You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle APEX 19.2:Form-automatic row(DML)表单无修改保存需提示未更新行

解决方案:APEX 19.2 表单无修改时保存提示“Row not updated”

以下是几种可行的实现方式,按需选择即可:

方法一:利用APEX内置修改跟踪+动态操作

依赖APEX原生的修改状态跟踪,准确性高:

    1. 开启表单区域修改跟踪:
      找到目标表单区域,编辑属性,在Advanced标签下将Track Changes设为Yes,APEX会自动记录字段修改状态。
    1. 创建页面计算项:
      新增一个隐藏页面项(比如PXX_IS_ROW_MODIFIED,XX替换为你的页面编号),类型选PL/SQL Expression,表达式填写:
    APEX_UTIL.GET_SESSION_STATE('APEX$ROW_STATUS')
    
    计算时机设为Before Header,作用域选Session State。这个变量由APEX自动赋值:U代表行已修改,空值则表示无修改。
    1. 添加动态操作拦截保存:
      新建动态操作,触发条件选Button Click并关联你的保存按钮;
      客户端条件选JavaScript Expression,输入:
    apex.item('PXX_IS_ROW_MODIFIED').getValue() !== 'U'
    
    动作选Execute JavaScript Code,输入:
    alert('Row not updated');
    apex.event.preventDefault(); // 阻止表单提交
    
    确保该动态操作的执行顺序在保存流程之前。

方法二:纯JavaScript检测表单修改状态

无需额外配置,实现更简洁:

    1. 给表单区域设置静态ID:
      编辑表单区域,在Advanced标签下设置Static ID(比如my_form)。
    1. 给保存按钮添加动态操作:
      新建动态操作,触发条件为Button Click(关联保存按钮);
      客户端条件选JavaScript Expression,输入:
    !apex.region('my_form').isChanged()
    
    动作选Execute JavaScript Code,输入:
    alert('Row not updated');
    apex.event.preventDefault();
    

方法三:通过DML流程分支实现提交后提示

适合需要在表单提交后显示提示的场景:

    1. 找到自动行DML流程:
      在页面的Processes中,定位默认的自动行DML流程(通常命名为Process Row of [表名])。
    1. 添加“流程跳过”分支:
      点击该流程的Branches标签,新建分支:
    • 分支类型:On Process Skip(表示流程未执行DML操作,即无修改)
    • 分支条件:Process Name匹配你的自动行DML流程名称
    • 分支操作:Show Message,消息内容填写Row not updated
    • 调整分支顺序,确保它在其他分支之前执行。

内容的提问来源于stack exchange,提问作者Sajid Ullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:32:41