我遇到了麻烦,不确定使用Oracle ApEx解决此问题的最佳方法。
基本上我有一个基于Table1的表单,但同时,此表单中的一个部分/区域分支到另一个页面,然后在表格中添加详细信息。
为了扩展这个更好的例子,假设我有一个名为CUSTOMER的表,其中包含客户的个人详细信息,例如CUST_ID,FIRSTNAME,SURNAME,DOB,然后我还有另一个名为PURCHASES的表,其中包含以下内容: columns,PURCHASE_ID,CUST_ID,ITEM,ITEM_DESCR,COST,CUST_ID是CUSTOMERS表的外键。
我现在想要创建一个基于表CUSTOMER的Oracle Apex表单,但在同一表单中,在用户提交表单并将表单提交到数据库之前,我还想让用户添加所有购买的客户是通过某种方式在商店购买。一旦用户输入了客户详细信息以及5个购买记录(以某种方式),所有提交并提交到CUSTOMER和PURCHASES表的数据库。
任何人都可以就此类情况提出解决方案或其他替代方案。
感谢。
答案 0 :(得分:4)
而不是重定向到第2页输入表2信息,您需要提交第1页和分支到第2页。这将保存页面1的会话状态。您不希望页面1数据已更新到Table1中,因此请确保此提交不会调用执行插入/更新的进程 - 例如以“保存”按钮或其他任何条件为条件。
或者,像我的示例here一样在一个页面上完成所有操作。感兴趣的页面是第7页,您可以通过“创建”按钮访问该页面。第7页有一种主/细节形式,但我没有使用Apex向导构建它 - 我不确定你是否可以,但我倾向于不使用向导和内置的表格式工具在我的工作中,所以我不确定。
这就是我为第7页所做的:
1)创建了空白页
2)添加了一个HTML区域“新客户”,并添加了一个Surname的文本项和一个DOB的日期项。
3)使用以下SQL创建报告区域“Purchases”:
select apex_item.text(1,'') item_desc
, apex_item.text(2,'') cost
from dual
connect by level <= 5
CONNECT BY子句是从DUAL生成5个虚拟行的技巧。 apex_item
包生成表格表单项 - 在本例中为item_desc和cost的2个文本项,以''作为初始值。
4)创建了2个按钮: 提交 - 提交页面 取消 - 重定向到第6页
5)创建一个PL / SQL进程以在提交时运行,如下所示:
declare
l_cust_id integer;
begin
-- Insert the new customer
insert into so_customers (surname, dob)
values (:p7_surname, :p7_dob)
returning cust_id into l_cust_id;
-- Insert the purchases (if data has been entered)
for i in 1..apex_application.g_f01.count loop
if apex_application.g_f01(i) is not null then
insert into so_purchases (cust_id, item_desc, cost)
values (l_cust_id,
apex_application.g_f01(i),
apex_application.g_f02(i)
);
end if;
end loop;
end;
我以SUBMIT按钮为条件。 apex_application
包中包含与表格形式列对应的数组变量g_f01,g_f02等。
6)创建了一个分支,当按下SUBMIT时,该分支返回到第6页。
如果您希望功能偏离Apex页面和区域向导提供的“开箱即用”行为,您必须编写更复杂的代码,如您所见。但是你想要做的任何事情都可以通过这种方式完成。