Oracle APEX交互式网格:勾选复选框自动填充用户与系统日期的实现咨询
Oracle APEX交互式网格勾选复选框自动填充用户及日期的实现方法
方案一:前端动态动作(实时触发)
适合勾选时立即在页面上显示填充值,无需提交。
- 给交互式网格的复选框列设置静态ID(比如
cb_check),同时给交互式网格本身设置静态ID(比如ig_main) - 创建动态动作:
- 触发条件:事件选
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
相关产品推荐
相关产品推荐

