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

Oracle APEX点击按钮报错:TypeError: apex.region(...) is null 求助

Oracle APEX 交互式网格批量更新选中记录报错解决方案

问题概述

需要将交互式网格中选中记录的CORRESPONDENCE_SENT字段批量更新为当前日期,执行JavaScript代码时触发错误:TypeError: apex.region(...) is null,已确认区域名称为breachbulkupdate(复制粘贴核对)。

触发按钮的执行代码如下:

var record;

var region = apex.region("breachbulkupdate");
console.log(region);

//Identify the particular interactive grid
var ig$     = apex.region("breachbulkupdate").widget();

//Fetch the model for the interactive grid
var grid    = ig$.interactiveGrid("getViews","grid");

//Fetch the model for the interactive grid
var model   = ig$.interactiveGrid("getViews","grid").model;

//Fetch selected records
var selectedRecords = apex.region("breachbulkupdate").widget().interactiveGrid("getViews","grid").view$.grid("getSelectedRecords");

//Set current date as correspondence sent date
var sentDate = new Date();

//Loop through selected records and update value of the salary column
for (i=0; i < selectedRecords.length; i++) {

   //Get the record
   record = model.getRecord(selectedRecords[i][0]);

   //Set Correspondence Sent Date
   model.setValue(record,"CORRESPONDENCE_SENT", sentDate);

}

核心问题与解决步骤

1. 混淆区域名称与静态ID

apex.region()接收的参数是区域的静态ID,而非区域名称。

  • 进入交互式网格的区域属性页面,找到「静态ID」字段,确认是否设置为breachbulkupdate。
  • 如果未设置静态ID,补充设置后再测试代码。

2. 代码执行时机过早

页面未完全渲染时调用apex.region()会导致无法找到元素,需将代码包裹在apex.ready()中确保DOM加载完成:

apex.ready(function() {
  // 获取区域对象
  var region = apex.region("breachbulkupdate");
  if (!region) {
    console.error("未找到指定区域,请检查静态ID");
    return;
  }

  // 获取交互式网格实例与模型
  var ig$ = region.widget();
  var gridView = ig$.interactiveGrid("getViews", "grid");
  var model = gridView.model;

  // 获取选中记录
  var selectedRecords = gridView.view$.grid("getSelectedRecords");
  var sentDate = new Date();

  // 批量更新字段值
  for (var i = 0; i < selectedRecords.length; i++) {
    var record = model.getRecord(selectedRecords[i][0]);
    model.setValue(record, "CORRESPONDENCE_SENT", sentDate);
  }
});

3. 优化代码减少重复调用

原代码多次重复调用apex.region()和interactiveGrid(),优化后一次性获取对象,降低出错概率同时提升性能。

4. 排查控制台日志

打开浏览器开发者工具(F12)查看控制台,检查是否存在其他报错(如资源加载失败、静态ID拼写错误),这些都可能导致区域无法被识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:26:10