APEX – 创建一个页面,其中包含多个表单链接到多个相关表格……所有表格都只用一个按钮提交?

我在APEX中有两个表,它们通过主键链接.一个表(APEX_MAIN)保存我们系统中文档的基本元数据,另一个表(APEX_DATES)保存与该文档处理相关的重要日期.

对于我的团队,我创建了一个控制面板,他们可以与所有这些数据进行交互.问题是,现在他们改变了页面上APEX_MAIN中的信息,然后他们改变了另一个上的APEX_DATES.我真的希望能够在同一页面上提供这些表格,并将更新提交到各自的表格和带有单个提交按钮的行.我已经在同一页面上使用两个不同的区域进行了设置,但是我在初始获取行时遇到错误(哪个行获取第二个似乎工作但是然后在第一个获取的表单中的页面项目是空的?)和提交(它给出了自发送更新请求以来数据库中的信息已经改变的一些错误).谁能帮我?

这是内置Apex表单的限制,不幸的是,每页只能有一个自动行读取过程.每页可以有多个表单区域,但是如果你这样做,你必须自己编写所有提取和提交处理的代码(真的不是那么困难,但你自己也需要处理乐观锁定等).

即使使用内置的表单功能,也可以将一个表的表单拆分到多个区域,因为区域本身只是一个布局对象,它没有与之关联的功能.

手动构建表单非常简单,但需要更多工作.

项目

这些应该将源设置为“静态文本”而不​​是数据库列.

纽扣

您将需要提交页面等创建,应用更改,删除等按钮.这些需要唯一的请求值,以便您知道正在处理哪个表,例如CREATE_EMP.您可以使按钮有条件地显示,例如仅在PK项为空时创建.

行获取过程

这将是一个简单的PL / SQL过程,如:

select ename, job, sal
into :p1_ename, :p1_job, :p1_sal
from emp
where empno = :p1_empno;

它需要是有条件的,这样它才会在进入表单时触发,而不是在每次页面加载后触发 – 否则如果存在验证错误,任何编辑都将丢失.这可以由隐藏项控制,该项最初为null,但在页面加载时设置为非空值.仅在隐藏项为空时才获取行.

提交流程

您可以有3个单独的进程用于与按钮关联的插入,更新,删除,或者单个进程查看:request值以查看需要执行的操作.无论哪种方式,进程都将包含简单的DML,如:

insert into emp (empno, ename, job, sal)
values (:p1_empno, :p1_ename, :p1_job, :p1_sal);

乐观锁定

为简单起见,我省略了上述内容,但内置表单为您做的一件事是处理“乐观锁定”以防止2个用户同时更新同一记录,其中一个更新覆盖另一个.您可以使用各种方法来执行此操作.常见的一种方法是使用OWA_OPT_LOCK.CHECKSUM来比较选择时的记录,因为它是提交更新时的记录.

在获取过程中:

select ename, job, sal, owa_opt_lock.checksum('SCOTT','EMP',ROWID)
into :p1_ename, :p1_job, :p1_sal, :p1_checksum
from emp
where empno = :p1_empno;

在提交过程中进行更新:

update emp
set job = :p1_job, sal = :p1_sal
where empno = :p1_empno
and  owa_opt_lock.checksum('SCOTT','EMP',ROWID) = :p1_checksum;

if sql%rowcount = 0 then
    -- handle fact that update failed e.g. raise_application_error
end if;
翻译自:https://stackoverflow.com/questions/7877396/apex-creating-a-page-with-multiple-forms-linked-to-multiple-related-tables

转载注明原文:APEX – 创建一个页面,其中包含多个表单链接到多个相关表格……所有表格都只用一个按钮提交?