顶点选​​择列表,获取用户数据

时间:2018-03-22 11:44:09

标签: oracle-apex oracle-apex-5.1

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

选择列表的代码,该列表显示在报告上以允许说明金额:

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 itemname,
  item_price, 
  'select list value',
  ('select list value'* item_price) as sum
  from item

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

由于

1 个答案:

答案 0 :(得分:2)

Oracle APEX包APEX_APPLICATION包含名称从G_F01G_F50的集合。当您使用apex_item中的任何函数在报表中创建项目时,您将一个数字传递给p_idx参数。在您的示例中,选择列表为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_APPLICATIONAPEX_COLLECTION

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

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>