APEX:将选择列表添加到表格形式,然后根据值进行处理
Posted
技术标签:
【中文标题】APEX:将选择列表添加到表格形式,然后根据值进行处理【英文标题】:APEX: Adding Select List to Tabular Form and then processing based on values 【发布时间】:2016-12-16 22:50:57 【问题描述】:我对 APEX 还很陌生,但我已经到了让我变得复杂的地步,所以我需要一些帮助。我有一个带有复合主键(S_ID
和DEPARTMENT_ID
)的表格表单的对话框表单。我正在通过APEX_ITEM.SELECT_LIST
方法添加一个选择列表作为最后一列,其中包含两个值(Approve:0;Reject:1
)和一个提交按钮。如果用户将至少一条记录“标记”为Reject
,则提交页面后,我想从表格形式更新所选记录中的两个隐藏字段。如果用户选择所有记录为Approve
,那么我需要更新另一个表中的状态和日期。对于所有记录,选择列表的默认值为Approve
。
我很擅长使用 SQL 和 PL/SQL,但是一旦我添加了 APEX_ITEM.SELECT_LIST
,我意识到可能需要 javascript,这就是我卡住的地方。如果我向表中添加一个字段然后将 SELECT 列表绑定到它,我可能只使用 PL/SQL 就可以解决这个问题,但是我有不必要的表字段,我试图避免。我想用“虚拟”列来解决它。
有什么想法吗?
提前谢谢你。
【问题讨论】:
【参考方案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:8Submit
按钮执行上面的代码,Reset
按钮将值更改为默认值。
【讨论】:
以上是关于APEX:将选择列表添加到表格形式,然后根据值进行处理的主要内容,如果未能解决你的问题,请参考以下文章