3

我使用以下查询获得以下表格报告:

select id,
       name,
       telephone,
       apex_item.checkbox2(1,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

此报告显示 10 条记录,其中驱动键是分配给 F01 的复选框。

我的问题是,因为这是一个表格报告,使用 Oracle APEX_APPLICATION.G_F01.COUNT - 我如何访问 textarea 字段的值,其中“my_comment”是报告中的用户可输入值,而不是来自数据库列/表?

从我所见,这似乎是一个顺序问题,如果您输入的记录顺序不正确,那么就会丢失值。

我只勾选了第 1、3 和 5 行的复选框,因此希望返回仅与这些选定行相关的 textarea 字段的值。

4

1 回答 1

6

是的,当您的表格形式包含复选框时,它会变得很棘手。在您的示例中, g_f01 将仅包含 3 个值为 1、3、5 的元素,但数组 g_f30 将包含 10 个元素。

通常在使用 apex_item 构建表格形式时,最好也使用 APEX 集合:

  1. 使用 my_table 中的相关数据填充页面入口处的 APEX 集合。将 mytable 行的 ID 保存在隐藏项中,例如 apex_item.hidden(2,id)。
  2. 编写报告以从集合而不是 my_table 工作,并在复选框项目中使用 seq_id 而不是 ID:apex_item.checkbox2(1,seq_id)
  3. 提交时,使用 g_fxx 数组更新集合 - 通常使用不止一次。
  4. 最后使用集合更新 my_table

因此,在您的示例中,您可能首先更新 APEX 集合,以通过将 c050 设置为“Y”来指示哪些行已被勾选:

for i in 1..apex_application.g_f01.count loop
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f01(i), 
      50, 'Y');
end loop;

然后使用其他更改对其进行更新:

for i in 1..apex_application.g_f02.count loop
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i), 
      20, apex_application.g_f20(i));
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i), 
      30, apex_application.g_f30(i));
end loop;

最后将相关更改应用到 my_table:

for r in (select c002, c020, c030 
          from apex_collection
          where collection_name = 'MYCOLL'
          and c001 = 'Y' -- Checked rows only
         )
loop
    update my_table
    set my_date = r.c020
    ,   my_comment = r.c030
    where id = r.c002;
end loop;

就那么简单...?!

于 2012-08-28T17:08:48.053 回答