Oracle APEX交互式网格:如何不用forEach获取某列全部记录
在Oracle APEX交互式网格中用普通for循环获取列值并检查重复
核心实现步骤
- 定位交互式网格并获取数据模型:Oracle APEX的交互式网格(IG)数据存储在内部模型中,需先通过IG的静态ID获取模型对象。
- 用标准for循环遍历记录:通过模型的
getRecords()方法拿到所有行数据,使用普通for循环(而非forEach)逐个读取目标列的值。 - 收集值并检测重复:借助临时对象存储已出现的列值,遍历过程中判断当前值是否存在,以此识别重复项。
完整代码示例
假设你的交互式网格静态ID为emp_ig,年龄列的静态ID为AGE,可直接使用以下代码:
// 获取交互式网格的模型对象 const igModel = apex.region("emp_ig").widget().interactiveGrid("getViews", "grid").model; // 获取所有行记录数组 const allRecords = igModel.getRecords(); // 存储已出现的年龄,用于检测重复 const ageTracker = {}; // 存储检测到的重复年龄 const duplicateAges = []; // 普通for循环遍历所有记录 for (let i = 0; i < allRecords.length; i++) { // 读取当前行的年龄值,替换"AGE"为你的列静态ID const currentAge = allRecords[i].get("AGE"); // 跳过空值(可根据需求移除该判断) if (currentAge == null) { continue; } // 检查年龄是否已存在 if (ageTracker[currentAge]) { // 避免重复添加同一值到重复列表 if (!duplicateAges.includes(currentAge)) { duplicateAges.push(currentAge); } } else { // 首次出现的年龄,存入追踪对象 ageTracker[currentAge] = true; } } // 输出结果到控制台 console.log("所有年龄值:", Object.keys(ageTracker)); console.log("重复的年龄:", duplicateAges);
关键细节提示
- 静态ID替换:必须将代码中的
emp_ig(IG的静态ID)和AGE(列的静态ID)替换为你项目中的实际值。 - 未提交数据兼容:
model.getRecords()会包含IG中未提交的修改数据,若只需已保存数据,可调整为获取模型的getSavedRecords()。 - 空值处理:代码中的空值跳过逻辑可根据业务需求保留或删除。
内容的提问来源于stack exchange,提问作者Chadmerdinger
相关产品推荐
相关产品推荐

