Oracle APEX 24.2.3中JavaScript无法捕获多个交互式网格数据的问题
Oracle APEX 24.2.3中JavaScript无法捕获多个交互式网格数据的问题
看起来你在尝试用JavaScript抓取多个交互式网格(IG)的数据时,碰到了所有记录都返回undefined的麻烦,我来帮你排查下问题,顺便给你一个靠谱的解决方案。
首先看你贴的代码,里面有个明显的笔误——var grid = reg这行没写完对吧?这可是获取IG数据的关键前提,没补全这步肯定拿不到有效数据。我先把你的函数修正并补全,再给你讲讲正确的操作姿势:
第一步:修正基础函数的错误
你原来的函数里,缺少了获取IG核心实例的关键步骤,正确的getIGData函数应该是这样的:
function getIGData(staticId) { console.log('Getting data for region:', staticId); // 先获取APEX区域对象 var region = apex.region(staticId); if (!region) { console.error('Region not found:', staticId); return []; } // 关键:获取交互式网格的widget实例,这是操作IG数据的核心对象 var grid = region.widget(); if (!grid || !grid.model) { console.error('Interactive Grid widget/model not found for region:', staticId); return []; } // 获取所有记录(如果只需要已修改的记录,换成grid.model.getUpdatedRecords()即可) var records = grid.model.getRecords(); // 把模型内部的记录对象转换成易读的键值对格式 var gridData = records.map(function(record) { return grid.model.getRecordValues(record); }); console.log('Fetched data for', staticId, ':', gridData); return gridData; }
第二步:处理多个交互式网格的情况
要抓取多个IG的数据,只需要循环调用上面的函数就行,比如你有两个IG的staticId分别是ig_employees和ig_departments,可以这么做:
function getAllIGData() { // 定义需要抓取的所有IG的staticId列表 var igStaticIds = ['ig_employees', 'ig_departments']; var allData = {}; igStaticIds.forEach(function(id) { allData[id] = getIGData(id); }); // 这里可以对整合后的allData做后续操作,比如提交到后台处理 console.log('All IG data collected:', allData); return allData; }
为什么你之前会得到undefined?
大概率是这几个原因:
- 没有正确获取IG的widget实例:直接用
apex.region(staticId)拿到的是区域容器对象,不是IG的操作实例,必须调用.widget()才能拿到包含数据模型的核心对象 - 没使用模型的正确方法:要获取有效数据,得先用
model.getRecords()拿到记录集合,再用getRecordValues()把内部记录对象转换成普通键值对,不然直接操作记录对象就会出现undefined - 代码笔误:比如你写的
var grid = reg明显没写完,这会导致后续所有调用直接报错
现在你可以试试上面的代码,应该就能正常抓取到多个IG的数据了。
备注:内容来源于stack exchange,提问作者fesm
相关产品推荐
相关产品推荐

