javascript - 顶点 : Adding Select List to Tabular Form and then processing based on values

标签 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 列表绑定(bind)到它,我可能只用 PL/SQL 就可以解决这个问题,但是我有我试图避免的不必要的表字段。我想用“虚拟”列来解决它。

有什么想法吗?

提前谢谢你。

最佳答案

当您使用 apex_item.select_list 函数(或 apex_item 包的任何其他函数)时,APEX 允许您使用 apex_application.g_fXX集合,其中 XX - 数字,您将其作为第一个参数传递。这些集合包含表格形式的数据,可以在页面提交后在 PL/SQL 中访问。
假设我们有一张 table :

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 按钮将值更改为默认值。

关于javascript - 顶点 : Adding Select List to Tabular Form and then processing based on values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193528/

相关文章:

Oracle Apex - 引发虚拟列错误

javascript - 如何使用时刻获取日期?

javascript - JS创建的按钮稍后访问时未定义

javascript - onkeypress 事件监听器不工作

SQL IN 函数问题

mysql - 将 mysql 触发器转换为 pl/sql 触发器

javascript - 使用 JavaScript 向元素添加 CSS 类

php - 如何在 php 上从 plsql 打开自定义类型?

oracle - 无法使用 BULK COLLECT 和 FORALL 编译 PL/SQL

sql - 带 IF 条件的 PL/SQL 游标