如何在Oracle APEX主从页面中启用交互式网格单元格验证
根本原因
主表表单是单记录表单,所有字段对应页面级项,用:COLUMN可以正常读取单值;但从表是交互式网格(IG),属于多行数据集,页面级绑定变量无法对应到每行的独立单元格值,因此直接套用主表的校验写法会失效。
方法1:客户端实时校验(优先选择,用户体验好)
编辑时失焦即可触发校验,无需等待页面提交,配置步骤:
- 进入从表交互式网格的列属性面板,选中需要添加校验的目标列
- 展开「验证」属性组:
- 校验类型可选PL/SQL 表达式或JavaScript 表达式
- 如果选PL/SQL表达式,不要给IG内部列加冒号前缀,直接写列名即可,比如要校验数值大于等于0直接写
COLUMN >= 0 - 如果选JavaScript表达式,取值用
this.value即可,对应逻辑写this.value >= 0 - 填写自定义错误消息,即校验不通过时给用户的提示内容
- 保存页面后即可测试实时校验效果
如需关联同IG内其他列做校验,JavaScript写法可以用
this.model.getValue( this.model.getRecord( this.id ), '关联列名' )取同行其他列值,比如校验结束日期晚于开始日期的逻辑可以直接基于该方法实现。
方法2:服务端行级校验(适合复杂逻辑,安全性更高)
可以规避前端绕过校验的风险,适合关联数据库查询的复杂校验逻辑,配置步骤:
- 进入页面的「验证」节点,新建一条验证规则
- 验证的「适用范围」选择交互式网格,再指定你的从表IG对应的区域
- 「验证级别」选择行级,系统会自动对IG内的所有新增/修改行逐行执行校验
- 类型选PL/SQL表达式,引用IG内部列同样不需要加冒号前缀,直接写列名即可,比如
COLUMN >= 0 - 「关联列」选择你要绑定报错提示的目标列,校验不通过时错误标识会直接展示在对应单元格上
- 填写错误消息后保存页面即可
注意事项
- 若你的IG属性里开启了「仅当提交时验证」开关,需要关闭才能触发实时客户端校验
- 未提交到数据库的IG临时新增行,上述两种校验规则都可以正常识别生效
- 校验逻辑如果需要引用页面级项,还是可以正常加
:前缀绑定,只有引用当前IG内部的列时不需要加冒号
内容的提问来源于stack exchange,提问作者averagejavauser
相关产品推荐
相关产品推荐

