8

我对 Oracle apex_application.gfnn 的工作方式以及它是仅适用于 Oracle ApEx 中的标准 SQL 报告还是仅适用于 SQL(可更新报告,即表格形式)感到非常困惑。

基本上我正在尝试使用这个示例 SQL 来实现以下目标,这只是一个标准 SQL 报告,但我不确定我想要实现的目标是否可以通过这种类型或报告实现,即:

select id,
       name,
       telephone,
       apex_item.checkbox2(10,id) as "Tick when Contacted",
       apex_item.text(20,my_date) as "Date Contacted",
       apex_item.textarea(30,my_comment,5,80) as "Comment"
from   my_table

根据上面的 SQL,假设这个 SQL 查询返回 10 行。现在使用复选框作为我的驾驶 ID,我勾选了所有奇数记录/行的复选框,即第 1、3、5、7、9 行,对于这些行中的每一行,我还输入了一个日期值 (f20) 和注释(f30)

牢记这一点,然后我想创建一个页面进程,当用户按下“保存”按钮时调用该页面进程,该按钮将遍历这些检查的行并存储每条记录、我的日期和我的评论,但仅适用于我已选择。

因此,基于上述内容,我希望我的表中有 5 个新闻行,其中包含以下列:

ID      MY_DATE      MY_COMMENT
1       26/08/2012   Comment A
3       27/08/2012   Comment B
5       28/08/2012   Comment C
7       29/08/2012   Comment D
9       30/08/2012   Comment E

不幸的是,我不确定如何使用apex_application.G_F10.COUNT.

对于勾选复选框的每一行,我希望能够访问每个数组元素 (f20) 和 f(f30) 的内容。

这是可能的还是我误解了 apex_application.G_Fnn 的工作原理?如果这是不可能的,我怎么能做到这一点?我需要表格报告吗?

4

1 回答 1

11

你很亲密。

select apex_item.checkbox2(10, empno) select_me,
apex_item.text(20, empno) empno,
apex_item.text(30, ename)||apex_item.hidden(50, empno) ename
from emp

我正在连接隐藏的项目,因为我不希望它在自己的列中。布局混乱。
此外,由于复选框的工作方式,隐藏项目在那里。复选框只为选中的项目提交它们的值。这意味着数组 10 有 3 个值。其他数组仍将包含所有行的值。
这就是我再次添加隐藏 empno 的原因:这样我们就可以将检查的值与其他行匹配。

在提交过程中:

DECLARE
   v_empno emp.empno%TYPE; 
   v_ename emp.ename%TYPE;
BEGIN
   --f10: checkbox
   --f20: empno
   --f30: ename
   --f50: empno again
   for i in 1..apex_application.g_f10.count
   loop
      for j in 1..apex_application.g_f50.count loop
         if apex_application.g_f10(i) = apex_application.g_f50(j) 
         then         
            -- access values for the selected rows in the other arrays
            v_empno := apex_application.g_f20(j);
            v_ename := apex_application.g_f30(j);

            apex_debug_message.log_message('Employee: '||v_empno||' - '||v_ename);
         end if;
      end loop;
   end loop;
END;

运行页面,启用调试,选择记录 2、4 和 6,提交。

记录选择和查询输出

调试输出:

调试输出:布莱克、琼斯、福特

您现在需要做的就是将您的处理置于该循环中。

于 2012-08-27T13:10:08.487 回答