Oracle APEX交互式网格页面项验证失效问题求助
解决Oracle APEX交互式网格关联项的验证问题
问题根源
当仅修改P300_ADD_MODIFY_REASON而未改动交互式网格内容时,APEX默认只会提交网格的变更数据,同一区域的独立项不会被自动提交到服务器,导致验证时无法获取该项的最新值;另外,服务器端条件设置为“项为空”的逻辑存在漏洞,二次提交时的状态判断不准确。
正确验证方案
1. 调整验证的触发时机和作用范围
- 将验证的触发时机从默认的“提交”改为“提交 - 页面项”,确保即使网格无变更,只要项有修改就触发验证。
- 把验证的作用范围设置为“页面项”,明确针对
P300_ADD_MODIFY_REASON进行验证,而非绑定到交互式网格的提交流程。
2. 修改服务器端条件逻辑
放弃“项为空”的模糊条件,改用PL/SQL表达式判断交互式网格是否有变更,或者原因项未填写:
apex_application.g_f01 is not null OR :P300_ADD_MODIFY_REASON is null
(apex_application.g_f01是交互式网格提交时的默认数组,非空代表网格有变更;该条件表示只要网格有变更,或原因项为空时,就触发验证)
3. 强制提交关联项
在交互式网格的保存处理前,添加一个“提交页面项”类型的前置处理,指定提交P300_ADD_MODIFY_REASON,确保服务器能获取到该项的最新值。
4. 前端辅助验证(可选)
为P300_ADD_MODIFY_REASON添加前端拦截,提前阻止未填写的提交:
- 在项的“自定义属性”中添加JavaScript:
$(document).on('click', '.t-Button--save', function() { var reason = $('#P300_ADD_MODIFY_REASON').val(); var hasIgChanges = apex.region('YOUR_IG_STATIC_ID').call('getModifiedRecords').length > 0; if (hasIgChanges && !reason) { apex.message.alert('请填写修改原因'); return false; } });
替换YOUR_IG_STATIC_ID为你的交互式网格区域静态ID。
内容的提问来源于stack exchange,提问作者Anshul Ayushya
相关产品推荐
相关产品推荐

