Forms APEX-创建一个包含链接到多个相关表的多个表单的页面。。。只需一个按钮就可以提交吗?

Forms APEX-创建一个包含链接到多个相关表的多个表单的页面。。。只需一个按钮就可以提交吗?,forms,oracle-apex,Forms,Oracle Apex,我在APEX中有两个表,它们由主键链接。一个表(APEX_MAIN)保存系统中文档的基本元数据,另一个表(APEX_DATES)保存与文档处理相关的重要日期 我为我的团队创建了一个控制面板,他们可以在其中与所有这些数据进行交互。问题是,现在他们在一个页面上更改APEX_MAIN中的信息,然后在另一个页面上更改APEX_日期。我真的希望能够有这些表单在同一页上,并提交更新到各自的表和行与一个单一的提交按钮。我目前在同一页面上使用了两个不同的区域设置了此设置,但我在行的初始提取(第二次提取的哪一行似

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


我为我的团队创建了一个控制面板,他们可以在其中与所有这些数据进行交互。问题是,现在他们在一个页面上更改APEX_MAIN中的信息,然后在另一个页面上更改APEX_日期。我真的希望能够有这些表单在同一页上,并提交更新到各自的表和行与一个单一的提交按钮。我目前在同一页面上使用了两个不同的区域设置了此设置,但我在行的初始提取(第二次提取的哪一行似乎有效,但第一次提取的表单中的页面项为空?)和提交时都出现了错误(它给出了一些关于数据库中的信息在发送更新请求后已被更改的错误)。有人能帮我吗?

内置Apex表单的一个限制是,很遗憾,每页只能有一个自动行提取过程。每页可以有多个表单区域,但如果需要,则必须自己编写所有提取和提交处理的代码(其实没那么难,但你自己也需要注意乐观锁定等)

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

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

项目 它们应该将源设置为“静态文本”,而不是数据库列

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

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

select ename, job, sal
into :p1_ename, :p1_job, :p1_sal
from emp
where empno = :p1_empno;
它需要是有条件的,以便它仅在表单条目时触发,而不是在每次页面加载后触发-否则,如果存在验证错误,任何编辑都将丢失。这可以由初始为null但在页面加载时设置为非null值的隐藏项来控制。仅当隐藏项为null时才提取行

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

insert into emp (empno, ename, job, sal)
values (:p1_empno, :p1_ename, :p1_job, :p1_sal);
乐观锁 为了简单起见,我省略了上面的内容,但是内置表单为您做的一件事是处理“乐观锁定”为了防止两个用户同时更新同一条记录,其中一个用户的更新会覆盖另一个用户的更新。可以使用多种方法来执行此操作。常用的方法是使用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;

获取部件的另一个更简单的解决方案是创建一个包含所需所有feld的视图


缺点是您以后需要更改“提交”代码以插入到作为视图数据源的表中

我们是否可以对将一个表的表单拆分为多个区域的可能性进行评论?我实际上尝试将一个表的表单拆分为多个区域(纯粹是为了可用性)这很有效。我只使用了一个获取和更新过程,因为它来自同一个表,并且没有重复的行,所以它似乎没有给我带来任何麻烦。不过,感谢关于多表表单的信息…你能谈谈如何像你讨论的那样规避这个问题吗?哇!你真的全力以赴地使用了t帽子回应!谢谢!:)