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

Oracle APEX交互式网格:勾选复选框自动填充用户与系统日期的实现咨询

Oracle APEX交互式网格勾选复选框自动填充用户及日期的实现方法

方案一:前端动态动作(实时触发)

适合勾选时立即在页面上显示填充值,无需提交。

  1. 给交互式网格的复选框列设置静态ID(比如cb_check),同时给交互式网格本身设置静态ID(比如ig_main)
  2. 创建动态动作:
    • 触发条件:事件选Change,选择类型选jQuery Selector,输入#cb_check input[type='checkbox']
    • 动作选执行JavaScript代码,代码如下:
      var ig = apex.region("ig_main").widget().interactiveGrid("getViews", "grid");
      var model = ig.model;
      var row = $(this.triggeringElement).closest(".a-GV-row");
      var record = model.getRecord(row);
      
      if ($(this.triggeringElement).is(":checked")) {
          // 填充当前APEX用户和系统日期
          model.setValue(record, "CHECK_BY", apex.item("APP_USER").getValue());
          model.setValue(record, "CHECKED_DATE", apex.locale.formatDate(new Date(), 'YYYY-MM-DD HH24:MI:SS'));
      } else {
          // 取消勾选时清空值(可选操作)
          model.setValue(record, "CHECK_BY", null);
          model.setValue(record, "CHECKED_DATE", null);
      }
      
    • 注意替换ig_main为你的交互式网格静态ID,CHECK_BY和CHECKED_DATE对应表中的实际列名,日期格式可根据需求调整

方案二:后端数据库触发器(提交时生效)

适合保障数据一致性,避免前端篡改,在数据写入数据库时统一处理:

CREATE OR REPLACE TRIGGER TRG_YOUR_TABLE_CHECK
BEFORE INSERT OR UPDATE ON YOUR_TABLE_NAME
FOR EACH ROW
WHEN (NEW.CHECK_BOX_COL = 'Y') -- 替换为复选框对应的表列名,'Y'为勾选状态的标识值
BEGIN
    -- 填充当前数据库会话用户,若需APEX登录用户可改用APEX_UTIL.GET_SESSION_USER
    :NEW.CHECK_BY := SYS_CONTEXT('USERENV', 'SESSION_USER');
    :NEW.CHECKED_DATE := SYSDATE;
    
    -- 取消勾选时清空字段(可选操作)
    IF :NEW.CHECK_BOX_COL != 'Y' THEN
        :NEW.CHECK_BY := NULL;
        :NEW.CHECKED_DATE := NULL;
    END IF;
END;
/
  • 替换YOUR_TABLE_NAME为你的数据表名,CHECK_BOX_COL为复选框对应的表列名
  • 若要使用APEX登录用户而非数据库用户,可将:NEW.CHECK_BY赋值改为APEX_UTIL.GET_SESSION_USER,需确保触发器在APEX会话上下文执行

补充说明

  • 可结合两种方案:前端实时反馈提升体验,后端触发器保障数据准确
  • 确保CHECK_BY和CHECKED_DATE列在交互式网格中设置为可更新(可设为隐藏列)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:59:57