Oracle Apex 22中IG多次点击保存后新增行未触发验证
Oracle Apex 22 Interactive Grid 全行列验证问题解决方法
针对你遇到的问题——首次保存错误行后,新增空行再保存时只有旧行高亮错误、新行无提示但弹出错误框的情况,可以通过以下几种方式解决,确保每次保存时所有行都执行验证并显示错误:
1. 强制触发全行列验证的JavaScript方案
找到页面上的保存按钮,修改其行为为执行自定义JavaScript代码,手动触发IG的所有行验证后再执行保存:
// 替换为你的Interactive Grid静态ID var igWidget = apex.region("IG_STATIC_ID").widget(); var gridView = igWidget.interactiveGrid("getViews", "grid"); // 触发所有行的验证 gridView.validateAllRows(); // 检查验证结果,有效再执行保存 if (gridView.isValid()) { // 替换为保存按钮的请求值(在按钮属性的Request项中查看) apex.submit("SAVE_REQUEST"); } else { // 强制显示所有错误提示 apex.message.showErrors(); }
2. 改用行级验证替代列级验证
如果列级验证的范围有限,创建行级验证来覆盖所有需要检查的列:
- 进入IG的验证设置,新建行级验证
- 类型选择“PL/SQL表达式”,输入验证逻辑,比如需要检查COL1和COL2非空:
:COL1 IS NOT NULL AND :COL2 IS NOT NULL - 设置验证的显示方式为“Display inline and in notification”,确保错误会在行内和通知框中显示
3. 调整IG的验证属性
检查IG的全局验证设置,确保开启“保存时验证所有行”:
- 打开IG的属性编辑页面
- 导航到“验证”选项卡
- 勾选“保存时验证所有行”(部分版本可能在“高级”或“行为”分类下)
问题原因说明
Apex 22的Interactive Grid默认可能仅对有数据变更的行执行验证,未提交的新增空行如果没有触发过单元格交互,可能会被跳过验证流程。通过上述方法,可以强制所有行在保存时都经过验证逻辑,确保错误提示完整显示。
内容的提问来源于stack exchange,提问作者user2924127
相关产品推荐
相关产品推荐

