我遇到了麻烦,不确定使用Oracle ApEx解决该问题的最佳方法是什么。
基本上,我有一个基于Table1的表单,但与此同时,此表单中的一个节/区域分支到另一个页面,然后在该页面中将详细信息添加到Table2中。
为了通过一个更好的示例对此进行扩展,假设我有一个名为CUSTOMER的表,该表包含客户的个人详细信息,例如CUST_ID,FIRSTNAME,SURNAME,DOB,然后还有另一个名为PURCHASES的表,其以下各列为PURCHASE_ID ,CUST_ID,ITEM,ITEM_DESCR,COST,其中CUST_ID是CUSTOMERS表的外键。
现在,我想基于表CUSTOMER创建一个Oracle Apex表单,但是在该表单中,在用户将表单提交并提交到数据库之前,我还希望允许用户添加该客户在购买时所购买的所有商品通过某种方式存储。一旦用户输入了客户详细信息以及5条购买记录(以某种方式),所有数据就会被提交并提交到CUSTOMER和PURCHASES表的数据库中。
任何人都可以建议解决这种情况的方法,或针对这种情况的其他替代方法。
谢谢。
最佳答案
无需重定向到页面2来输入表2信息,您需要提交页面1并跳转到页面2。这将保存页面1的会话状态。您还不希望将页面1的数据更新到Table1中,因此请确保该提交未调用执行插入/更新的过程-例如以“保存”按钮或其他条件为条件。
另外,也可以像我的示例here一样在一页上完成所有操作。感兴趣的页面是您通过“创建”按钮到达的第7页。第7页有一种主/明细表格,但我没有使用Apex向导进行构建-我不确定是否可以,但我倾向于不使用向导和内置的表格上表格工具在我的工作中,所以我不确定。
这是我为第7页所做的:
1)创建一个空白页
2)添加了HTML区域“ New Customer”,并为Surname添加了文本项,为DOB添加了日期项。
3)使用以下SQL创建报告区域“购买”:
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;
我以“提交”按钮为条件。
apex_application
程序包包含与表格形式的列相对应的数组变量g_f01,g_f02等。6)创建一个分支,当按下SUBMIT时可返回到第6页。
如您所见,如果您希望功能偏离Apex页面和区域向导提供的“开箱即用”行为,则必须编写更复杂的代码。但是几乎所有您想做的事情都可以通过这种方式完成。