如何使用APEX_APPLICATION.G_F01访问APEX_ITEM.TEXTAREA字段

时间:2012-08-28 16:26:48

标签: oracle-apex

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

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字段的值。

1 个答案:

答案 0 :(得分: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_tabl
  5. 因此,在您的示例中,您可以首先更新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;
    

    这很简单......?!