2016-12-16 2 views
2

Я довольно новичок в APEX, но я добираюсь до такой степени, что мне становится сложно, поэтому мне нужна небольшая помощь. У меня есть диалоговая форма с табличной формой с составным первичным ключом (S_ID и DEPARTMENT_ID). Я добавляю Select List с помощью метода APEX_ITEM.SELECT_LIST в качестве последнего столбца с двумя значениями (Approve:0;Reject:1) и кнопкой «Отправить». Если пользователь «помещает» по меньшей мере одну запись как Reject, после отправки страницы я хочу обновить два скрытых поля в выбранной записи из табличной формы. Если пользователь выбирает все записи как Approve, тогда мне нужно обновить статус и дату в другой таблице. Значения по умолчанию для списка выбора: Approve для всех записей.APEX: добавление выбранного списка в табличную форму, а затем обработку на основе значений

Я довольно хорошо разбираюсь в SQL и PL/SQL, но как только я добавил APEX_ITEM.SELECT_LIST, я понял, что JavaScript может понадобиться, и именно здесь я застрял. Вероятно, я могу понять это с помощью PL/SQL, если я добавлю поле в таблицу, а затем привяжу к нему список SELECT, но тогда у меня есть ненужное поле таблицы, которое я пытаюсь избежать. Я хотел разрешить его с помощью «виртуальной» колонки.

Любые идеи?

Заранее спасибо.

ответ

1

При использовании apex_item.select_list функции (или любой другой функции из пакета apex_item) APEX позволяет использовать apex_application.g_fXX коллекции, где XX - число, которое вы передаете в качестве первого параметра. Эти коллекции содержат данные из табличной формы и могут быть доступны в PL/SQL после отправки страницы.
Допустим, у нас есть таблица:

create table tab_form (
s_id number, 
department_id number, 
field_to_update varchar2(100)); 

insert into tab_form (s_id, department_id, field_to_update) values (1, 1, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (1, 2, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (1, 3, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (2, 1, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (2, 2, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (2, 3, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (3, 1, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (3, 2, 'field is not updated'); 
insert into tab_form (s_id, department_id, field_to_update) values (4, 3, 'field is not updated'); 

Вам необходимо сделать следующее. Создание отчета с помощью запроса, как это:

select APEX_ITEM.TEXT(1, s_id) S_ID, 
     APEX_ITEM.TEXT(2, department_id) DEPARTMENT_ID, 
     FIELD_TO_UPDATE, 
     APEX_ITEM.SELECT_LIST(3, null, 'Approve;0,Reject;1', null, 'YES', null, '%') ar 
    from TAB_FORM 

Использование apex_item пакет инициирует использование коллекций g_f01, g_f02 и g_f03. Затем создайте кнопку для отправки и процесс, который будет выполнен, когда нажата кнопка Submit. Процесс может содержать такой код:

begin 
    forall i in 1 .. apex_application.g_f03.count 
    update tab_form 
     set field_to_update = case when apex_application.g_f03(i) = '0' then 'approved by the user' 
            when apex_application.g_f03(i) = '1' then 'rejected by the user' 
            else 'the user hasn''t decided yet' end 
    where s_id = apex_application.g_f01(i) 
     and department_id = apex_application.g_f02(i); 
end; 

В этом коде, вы можете реализовать любую логику, необходимую для обработки ввода пользователя.

Вы можете увидеть этот пример на странице здесь: https://apex.oracle.com/pls/apex/f?p=34599:8
Кнопка Submit выполняет код, приведенный выше, кнопка Reset изменяет значения по умолчанию.

+0

Спасибо, это было довольно хорошо и просто. – user7308691

Смежные вопросы