Oracle APEX 19.2:Form-automatic row(DML)表单无修改保存需提示未更新行
解决方案:APEX 19.2 表单无修改时保存提示“Row not updated”
以下是几种可行的实现方式,按需选择即可:
方法一:利用APEX内置修改跟踪+动态操作
依赖APEX原生的修改状态跟踪,准确性高:
- 开启表单区域修改跟踪:
找到目标表单区域,编辑属性,在Advanced标签下将Track Changes设为Yes,APEX会自动记录字段修改状态。
- 开启表单区域修改跟踪:
- 创建页面计算项:
新增一个隐藏页面项(比如PXX_IS_ROW_MODIFIED,XX替换为你的页面编号),类型选PL/SQL Expression,表达式填写:
计算时机设为Before Header,作用域选Session State。这个变量由APEX自动赋值:APEX_UTIL.GET_SESSION_STATE('APEX$ROW_STATUS')U代表行已修改,空值则表示无修改。- 创建页面计算项:
- 添加动态操作拦截保存:
新建动态操作,触发条件选Button Click并关联你的保存按钮;
客户端条件选JavaScript Expression,输入:
动作选Execute JavaScript Code,输入:apex.item('PXX_IS_ROW_MODIFIED').getValue() !== 'U'
确保该动态操作的执行顺序在保存流程之前。alert('Row not updated'); apex.event.preventDefault(); // 阻止表单提交- 添加动态操作拦截保存:
方法二:纯JavaScript检测表单修改状态
无需额外配置,实现更简洁:
- 给表单区域设置静态ID:
编辑表单区域,在Advanced标签下设置Static ID(比如my_form)。
- 给表单区域设置静态ID:
- 给保存按钮添加动态操作:
新建动态操作,触发条件为Button Click(关联保存按钮);
客户端条件选JavaScript Expression,输入:
动作选Execute JavaScript Code,输入:!apex.region('my_form').isChanged()alert('Row not updated'); apex.event.preventDefault();- 给保存按钮添加动态操作:
方法三:通过DML流程分支实现提交后提示
适合需要在表单提交后显示提示的场景:
- 找到自动行DML流程:
在页面的Processes中,定位默认的自动行DML流程(通常命名为Process Row of [表名])。
- 找到自动行DML流程:
- 添加“流程跳过”分支:
点击该流程的Branches标签,新建分支:
- 分支类型:
On Process Skip(表示流程未执行DML操作,即无修改) - 分支条件:
Process Name匹配你的自动行DML流程名称 - 分支操作:
Show Message,消息内容填写Row not updated - 调整分支顺序,确保它在其他分支之前执行。
- 添加“流程跳过”分支:
内容的提问来源于stack exchange,提问作者Sajid Ullah
相关产品推荐
相关产品推荐

