我创建了一个选择列表项,需要在另一个页面上引用此列表。如何获取用户输入,将其放在可用于计算另一页上所选项目总值的变量中?
选择列表的代码,该列表显示在报告上以允许说明金额:
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
如何从选择列表中获取所选金额?
由于
答案 0 :(得分:2)
Oracle APEX包APEX_APPLICATION
包含名称从G_F01
到G_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_APPLICATION,APEX_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>