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

Oracle Apex Interactive Grid按钮点击后遍历选中行方法咨询

Oracle APEX Interactive Grid 自定义按钮遍历选中行方案

核心问题说明

自定义按钮触发动态动作时,执行上下文this指向按钮组件本身,而非Interactive Grid实例,因此直接调用this.data.selectedRecords会返回空值,必须通过IG的公开API获取选中数据,不需要额外绕路。

原代码存在的问题

  • 上下文依赖错误:自定义按钮场景下this.data为undefined,外层判断逻辑永远不会执行
  • 变量名不匹配:循环内赋值的变量是product_wizard_code,最终打印的是未赋值的id变量
  • 值覆盖问题:循环内反复给id、value单变量赋值,最终只能拿到最后一行的数值,无法获取所有选中行数据
  • 隐式全局变量风险:循环变量i未声明,容易引发全局变量污染

可直接运行的实现代码

将以下代码绑定到自定义按钮UpdateButton的点击动态动作(执行JavaScript类型)即可:

// 初始化IG相关实例,不依赖this上下文
const igGrid = apex.region("InterfaceGrid").widget().interactiveGrid("getViews", "grid");
const igModel = igGrid.model;
// 获取选中行:当前页选中用igGrid.getSelectedRecords(),跨页全选用igModel.getSelectedRecords()
const selectedRows = igGrid.getSelectedRecords();

// 无选中行时直接提示退出
if (selectedRows.length === 0) {
    apex.message.alert("请先勾选需要操作的数据行");
    return;
}

// 用数组存储所有行数据,避免循环覆盖
const rowDataList = [];

// 遍历选中行
for (let i = 0; i < selectedRows.length; i++) {
    const currentRow = selectedRows[i];
    if (!currentRow) continue;

    // 读取文本类型ID列值
    const rowId = igModel.getValue(currentRow, "ID");
    // 读取选择列表Value列值:.v为列表存储的实际值,.d为列表显示的文本,按需取用
    const rowValue = igModel.getValue(currentRow, "VALUE").v;

    // 存入结果集
    rowDataList.push({
        id: rowId,
        value: rowValue
    });

    // 单行业务逻辑可直接写在此处
    console.log("当前行数据:", rowId, rowValue);
}

// 遍历完成后可执行批量业务逻辑
console.log("所有选中行数据:", rowDataList);

注意事项

  • 代码中填写的列名ID、VALUE必须和IG中列定义的*Column Name(静态ID)*完全一致,大小写敏感
  • 选择列表取值时如果需要获取用户看到的显示文本,把.v替换为.d即可
  • 如果开启了IG的跨页选择功能,需要获取所有分页下勾选的行,将获取选中行的代码替换为const selectedRows = igModel.getSelectedRecords();
  • 批量操作建议先收集完所有行数据再统一提交,不要在循环内发起重复AJAX请求,避免性能问题

内容的提问来源于stack exchange,提问作者Łukasz Kudelski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:09:58