apex select 列表,获取用户数据

apex select list, get user data

我创建了一个 select 列表项,需要在另一页上引用该列表。我如何获取用户输入,将其放入可用于计算另一页上 selected 项目的总价值的变量中?

select 列表的代码,显示在报告中以允许说明数量:

select item_id, 
   itemname, 
  item_price, 
   apex_item.hidden(1, item_id) ||
      apex_item.hidden(2, item_price) || 
      apex_item.select_list(
          p_idx           =>   3,
          p_value         =>   nvl(null,'item'),
          p_list_values   =>   '1,2,3,4,5,6,7,8,9,10',
          p_show_null     =>   'YES',
          p_null_value    =>   0,
          p_null_text     =>   '0',
          p_item_id       =>   'f03_#ROWNUM#',
          p_item_label    =>   'f03_#ROWNUM#',
          p_show_extra    =>   'NO') "item"
          from item 

显示总和的 select 看起来像这样:

  select itemname,
  item_price, 
  'select list value',
  ('select list value'* item_price) as sum
  from item

如何从 select 列表中获取所选的金额?

谢谢

Oracle APEX 有包 APEX_APPLICATION,其中包含名称从 G_F01G_F50 的集合。当您使用 apex_item 中的任何函数在报表中创建项目时,您将一个数字传递给 p_idx 参数。在您的示例中,select 列表是 3。此值对应于上述集合之一 - 在本例中为 G_F03

提交后,用户输入的所有值都会传递到这些集合。所以你可以在提交后的过程中编写如下代码:

for i in apex_application.g_f01.first .. apex_application.g_f01.last loop
  insert into my_table (id, new_value) 
  values (apex_application.g_f01(i), apex_application.g_f03(i));
end loop;

此代码展示了如何将用户输入的值插入 my_table。请注意,这些集合仅包含用户更改的行。如果用户获得包含 10 行的报表并更改其中 3 行,则每个集合将包含 3 个元素。

此外,APEX 有 APEX_COLLECTION API 来存储临时数据。

有关详细信息,请参阅文档:APEX_APPLICATION, APEX_COLLECTION

UPD.
有两种方法可以进一步处理数据 - 使用 table 或 APEX_COLLECTION。我从未使用过 APEX_COLLECTION,所以这是一个使用 table 的示例。 如果您使用 table 存储临时数据,则需要 ID、用户名和数据(示例中的 Select 列表中的数据)列。在包含报告的页面上,您需要在提交后执行此操作:

delete from my_table where user_name = :APP_USER;

for i in apex_application.g_f01.first .. apex_application.g_f01.last loop
  insert into my_table (id, new_value, user_name) 
  values (apex_application.g_f01(i), apex_application.g_f03(i), :APP_USER);
end loop;

在需要使用此数据的下一页上,创建以下报告:

select t.new_value, ...
  from my_table t, ... <other tables>
 where t.user_name = :APP_USER
   and t.id = ...
   and <other conditions>