APEX:将选择列表添加到表格形式,然后根据值

时间:2016-12-16 22:50:58

标签: javascript plsql oracle-apex oracle-apex-5

我是APEX的新手,但是我已经到了让我变得复杂的地步,所以我需要一点帮助。我有一个带有表格形式的对话框表单,其中包含复合主键(S_IDDEPARTMENT_ID)。我正在通过APEX_ITEM.SELECT_LIST方法添加一个选择列表作为最后一列,其中包含两个值(Approve:0;Reject:1)和一个提交按钮。如果用户“标记”至少一个记录为Reject,则一旦提交页面,我想从表格形式更新所选记录中的两个隐藏字段。如果用户选择所有记录为Approve,那么我需要更新另一个表中的状态和日期。所有记录的选择列表的默认值均为Approve

我对SQL和PL / SQL非常好,但是一旦我添加了APEX_ITEM.SELECT_LIST,我意识到可能需要JavaScript,这就是我遇到的问题。如果我向表中添加一个字段然后将SELECT List绑定到它,我可能只能使用PL / SQL来解决它,但是我有一个不必要的表字段,我试图避免。我想用“虚拟”专栏来解决它。

有什么想法吗?

提前谢谢。

1 个答案:

答案 0 :(得分: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_f01g_f02g_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按钮将值更改为默认值。