在 Oracle APEX 交互式网格中使用 JavaScript 从应用程序项中设置列值
Posted
技术标签:
【中文标题】在 Oracle APEX 交互式网格中使用 JavaScript 从应用程序项中设置列值【英文标题】:Set column value from Application Item by using JavaScript in Oracle APEX interactive grid 【发布时间】:2022-01-16 16:24:44 【问题描述】:当用户按下保存时,我想在 IG 中设置列值。我有 2 列“created_by”和“updated_by”,现在当我的主键列:P8_ID 为空时,应该使用应用程序项设置“created_by”列值:登录时设置的 SESSION_USER_ID,当:P8_ID 不为空时设置“updated_by” . 我可以在“页面项目”可用的表单上设置使用流程,但如何为 IG 列执行相同操作?请指导。 --使用 Apex 21.1--
【问题讨论】:
【参考方案1】:apex 应用程序中的一个常见做法是通过触发器设置表上的审计列(created (date)、created_by、updated (date) 和 updated_by)。这种方法的优点是这在您的应用程序中是透明的。您不必担心应用程序中执行插入/更新的任何地方的审计列。
虚拟桌子上的示例:
create or replace trigger test_table_biu
before insert or update
on test_table
for each row
begin
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end test_table_biu;
/
【讨论】:
感谢@Koen Lostrie...我们正在使用自定义身份验证,所有用户都在我们自己的表中。 :SESSION_USER_ID 登录成功后设置的列,在 DML 操作期间需要更新(不允许删除)。对于 created_at 和 updated_at 我们在插入或更新之前编写了触发器,正如您已经提到的那样工作正常。我认为我们必须在相关页面上为 DML 操作编写自己的 pl/sql 代码...请指教。 在触发器中使用V('SESSION_USER_ID')
而不是 'APP_USER'
- 触发器应该在任何 dml 上触发我不明白为什么你必须编写自定义代码
感谢@Koen Lostrie 的指导和帮助。将尝试按照说明进行操作。问候以上是关于在 Oracle APEX 交互式网格中使用 JavaScript 从应用程序项中设置列值的主要内容,如果未能解决你的问题,请参考以下文章
Oracle APEX 交互式网格:如何使用 PLSQL 访问内容?
在交互式网格 Oracle Apex 中的自定义验证中突出显示列
将PL / SQL块与交互式网格一起使用(Oracle Apex)
在将编辑内容保存到数据库之前验证 Oracle Apex 可编辑交互式网格