Определяя, сколько вкладок для создания и сколько строк на каждой вкладке


Я написал это на PL/SQL-кода для Oracle Апекс, работает отлично. В начале у меня было более 200 линий на один и тот же код. Я новичок и я все еще учусь. После поиска на нескольких сайтах я нашла, какие функции использовать для того, чтобы динамически создавать компоненты, но я не мог найти все, что нужно. Пожалуйста, проверьте мой код и скажите мне, что я не должен использовать.

Код занимает от двух полей ввода, как много вкладок, чтобы создать и сколько строк на каждой вкладке.

Я не знаю, как динамически создавать вкладки и я использовал Bootstrap код для этого.

declare
    number_of_tabs       number(10) := :P2_CREATE_TABS;
    number_of_lines      number(10) := :P2_LINES;
    half_number_of_lines number(10) := CEIL(number_of_lines / 2);
    lock_column          boolean    := false;
begin
    -- Check if value of number_of_tabs && number_of_lines is not 0 or null
    if ((number_of_tabs != 0 OR number_of_tabs is not null) and number_of_tabs <= 5) and ((number_of_lines != 0 or number_of_lines is not null) and number_of_lines <= 20) then
        -- Start navigation block
        htp.p ('<nav><div class="nav nav-tabs" id="nav-tab" role="tablist">');
        -- Generate tabs
        for tab_count in 1..number_of_tabs
        loop
            -- Check if it's the first tab. If true, selected as default, else it's not selected as default
            if tab_count = 1 then
                htp.p ('<a class="nav-item nav-link active" id="nav-'||tab_count||'-tab" data-toggle="tab" href="#nav-'||tab_count||'" role="tab" aria-controls="nav-'||tab_count||'" aria-selected="true">Document '||tab_count||'</a>');
            else
                htp.p ('<a class="nav-item nav-link" id="nav-'||tab_count||'-tab" data-toggle="tab" href="#nav-'||tab_count||'" role="tab" aria-controls="nav-'||tab_count||'" aria-selected="false">Document '||tab_count||'</a>');
            end if;
        end loop;
        -- End tabs block
        htp.p('</div></nav><div class="tab-content" id="nav-tabContent">');
        -- Loop each tab
        for tab_index in 1..number_of_tabs
        loop
            -- Create area for each tab and set first as selected
            if tab_index = 1 then
                htp.p ('<div class="tab-pane fade show active" id="nav-'||tab_index||'" role="tabpanel" aria-labelledby="nav-'||tab_index||'-tab"><div class="row"><div class"col-md-6"  style="margin-left: 17em;"><table class="table">');
            else
                htp.p ('<div class="tab-pane fade show" id="nav-'||tab_index||'" role="tabpanel" aria-labelledby="nav-'||tab_index||'-tab"><div class="row"><div class"col-md-6"  style="margin-left: 17em;"><table class="table">');
            end if;
            -- Loop each line
            for line_index in 1..number_of_lines
            loop
                -- Check if it's in the first column
                if half_number_of_lines >= tab_index then
                    -- Check if it's the first element from the first column
                    if line_index = 1 then
                        htp.p ('<thead><tr><th scope="col"> </th><th scope="col">Name</th><th scope="col">Type</th><th scope="col">Width</th><tbody>');
                    end if;
                end if;
                -- Check if it's in the second column
                if half_number_of_lines < line_index then
                    -- Check if it's first value from second column
                    if lock_column = false then
                        htp.p ('</tbody></table></div><div class"col-md-6" style="margin-left: 17em;"><table class="table"><thead><tr><th scope="col"> </th><th scope="col">Name</th><th scope="col">Type</th><th scope="col">Width</th><tbody>');
                    end if;
                    -- Lock for next element
                    lock_column := true;
                end if;
                -- Create table row and element
                htp.p ('<tr><th scope="row">'|| line_index ||'</th><td>');
                -- Create text field
                htp.p ( APEX_ITEM.TEXT(
                        p_idx => tab_index,
                        p_value      =>'array element '||tab_index ,
                        p_item_label => 'Name',
                        p_attributes => 'class="form-control"')
                      );
                -- Close table row for element and opens next element
                htp.p ('</td><td>');
                -- Create dropdown field
                htp.p ( APEX_ITEM.SELECT_LIST(
                        p_idx           =>   tab_index,
                        p_list_values   =>   'Numeric;Numeric',
                        p_show_null     =>   'YES',
                        p_null_value    =>   'Alphnumeric',
                        p_null_text     =>   'Alphnumeric',
                        p_item_label => 'Type',
                        p_attributes => 'class="form-control"')
                      );
                -- Close table row for element and opens next element
                htp.p ('</td><td>');
                -- Create number field
                htp.p ( APEX_ITEM.TEXT(
                        p_idx => tab_index, 
                        p_value      =>'123' ,
                        p_item_label => 'Width',
                        p_attributes => 'class="form-control"')
                      );
                -- Close table row for element and opens next element
                htp.p ('</td></tr>');
            end loop;
            -- Close table
            htp.p ('</tbody></table></div></div>');
            -- Reset lock for the next tab
            lock_column := false;
            htp.p ('</div>');
        end loop;
        htp.p('</div>');
    end if;
end;


125
1
задан 3 апреля 2018 в 01:04 Источник Поделиться
Комментарии