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

如何不依赖TD索引生成APEX交互式报表JSON以规避列序变更问题

解决APEX交互式报表不依赖列索引生成JSON的方案

核心思路

放弃依赖TD列索引的方式,给每个包含APEX.ITEM的报表列绑定自定义唯一标识(类似IG的data-id),通过标识关联对应数据库字段,生成与列序无关的可靠JSON。

具体实现步骤

1. 给报表列添加自定义标识

在交互式报表的列属性中,进入高级选项,找到自定义属性,为每个需要绑定APEX.ITEM的列添加data-column-id="对应B表字段名",比如B表的EMP_ID字段就设置为data-column-id="EMP_ID"。

2. 前端JS通过自定义标识生成JSON

替换原依赖TD索引的JS代码,改为通过自定义标识匹配字段:

针对交互式网格(IG):

var rows = apex.region("你的报表区域ID").widget().interactiveGrid("getViews", "grid").model.getRecords();
var dataArray = [];

rows.forEach(function(row) {
    var rowData = {};
    row.domNode.querySelectorAll(".apex-item").forEach(function(item) {
        // 通过父元素TD获取自定义字段标识
        var columnId = item.closest("td").getAttribute("data-column-id");
        rowData[columnId] = apex.item(item.id).getValue();
    });
    dataArray.push(rowData);
});

var jsonData = JSON.stringify(dataArray);

针对传统交互式报表:

var dataArray = [];
// 遍历报表每一行
$("#你的报表区域ID .a-IRR-table tr").each(function() {
    var rowData = {};
    // 遍历带自定义标识的列
    $(this).find("td[data-column-id]").each(function() {
        var columnId = $(this).attr("data-column-id");
        var itemId = $(this).find(".apex-item").attr("id");
        rowData[columnId] = apex.item(itemId).getValue();
    });
    dataArray.push(rowData);
});

var jsonData = JSON.stringify(dataArray);

3. 后端MERGE语句解析JSON

后端依旧使用MERGE操作,通过JSON_TABLE解析前端传来的JSON,因为JSON的key就是数据库字段名,完全不受列序影响:

MERGE INTO B_TABLE b
USING (
    SELECT 
        jt.*
    FROM JSON_TABLE(
        :P_JSON_DATA,
        '$[*]' COLUMNS (
            EMP_ID VARCHAR2(50) PATH '$.EMP_ID',
            EMP_NAME VARCHAR2(100) PATH '$.EMP_NAME',
            SALARY NUMBER PATH '$.SALARY'
        )
    ) jt
) src
ON (b.EMP_ID = src.EMP_ID)
WHEN MATCHED THEN
    UPDATE SET 
        b.EMP_NAME = src.EMP_NAME,
        b.SALARY = src.SALARY
WHEN NOT MATCHED THEN
    INSERT (EMP_ID, EMP_NAME, SALARY)
    VALUES (src.EMP_ID, src.EMP_NAME, src.SALARY);

关键优势

  • 彻底摆脱用户调整列序的影响,绑定的是字段名而非列位置
  • JSON结构与数据库表列一一对应,可读性和维护性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:21