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

Oracle Apex 22.1交互式网格新增记录验证逻辑实现咨询

实现交互式网格(IG)部门名称验证逻辑的方案

下面是基于Oracle APEX的具体实现步骤,核心用动态操作(Dynamic Action)结合AJAX回调来实现需求:

1. 创建AJAX回调过程

先在应用中创建一个AJAX可调用的PL/SQL过程,用来检查数据库中是否已存在目标部门名称:

DECLARE
    l_count NUMBER;
BEGIN
    -- 传入待检查的部门名称,查询存在数量
    SELECT COUNT(*)
    INTO l_count
    FROM emp_organizations
    WHERE dept_name = apex_application.g_x01;
    
    -- 以JSON格式返回检查结果
    apex_json.open_object;
    apex_json.write('exists', CASE WHEN l_count > 0 THEN 'Y' ELSE 'N' END);
    apex_json.close_object;
END;

将这个过程命名为 CHECK_DEPT_EXISTS(可自定义,后续要对应上)。

2. 绑定交互式网格的动态操作

在IG所在页面创建动态操作,配置如下:

  • 触发时机:选择 Before Save
  • 触发条件:添加条件 Row is New(仅针对新建行触发)
  • 执行动作:添加 Execute JavaScript Code,代码如下:
// 获取IG实例及新建行的部门名称
var igRegion = apex.region("YOUR_IG_STATIC_ID").widget();
var igModel = igRegion.interactiveGrid("getViews", "grid").model;
var newRecord = igModel.getRecord(igModel.last());
var deptName = igModel.getValue(newRecord, "DEPT_NAME");

// 跳过空值检查(可根据需求调整)
if (!deptName) return;

// 调用AJAX回调验证部门名称
apex.server.process("CHECK_DEPT_EXISTS", {
    x01: deptName
}, {
    success: function(response) {
        if (response.exists === 'N') {
            // 部门不存在时弹出确认框
            if (!confirm("Do you want to save this new value?")) {
                // 用户选择"否",取消当前保存操作
                apex.event.cancel(true);
            }
        }
        // 部门存在时直接继续保存流程
    }
});

注意替换代码中的 YOUR_IG_STATIC_ID 为你的交互式网格实际静态ID,CHECK_DEPT_EXISTS 要和第一步创建的AJAX回调名称一致。

3. 调整动态操作执行顺序

确保这个动态操作的执行顺序早于APEX默认的保存逻辑,这样才能在保存前完成验证并拦截操作。在动态操作的属性中,将执行顺序设为一个较小的数值(比如10)。

补充说明

  • 如果需要处理批量新建行的场景,需要调整JS代码遍历所有新建行,逐个检查部门名称
  • 可以根据需求添加空值判断逻辑,比如不允许空的部门名称,可在JS中增加对应判断

内容的提问来源于stack exchange,提问作者Velocity

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:03:11