在 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 可编辑交互式网格

在 Oracle APEX 交互式网格中使用 JavaScript 从应用程序项中设置列值

Oracle APEX交互式网格新行不可编辑