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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:50:34