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

如何在Oracle APEX中通过JavaScript动态操作调用交互式网格/报表的groupBy动作?

在Oracle APEX 23.1.0中通过按钮触发JS实现交互式网格/报表的分组统计

完全可行,针对交互式报表(IR)和交互式网格(IG)的实现方式略有不同,具体步骤如下:

一、针对交互式报表(IR)的实现

  1. 创建触发按钮:在页面合适位置(如报表工具栏、页面区域)添加按钮,可设置静态ID方便识别。
  2. 添加动态操作:
    • 触发事件选择「按钮点击」,绑定到刚创建的按钮。
    • 动作选择「执行JavaScript代码」,输入以下代码(替换YOUR_IR_STATIC_ID为你的交互式报表静态ID):
// 获取当前交互式报表实例
var irInstance = apex.region("YOUR_IR_STATIC_ID").widget().interactiveReport("getCurrentView");

// 清除现有分组规则
irInstance.model.clearGroupBy();

// 设置COL1、COL2为分组列
irInstance.model.addGroupBy("COL1");
irInstance.model.addGroupBy("COL2");

// 启用汇总行,统计每组行数
irInstance.model.setAggregation("ROW_COUNT", {
    type: "COUNT",
    label: "行数",
    columnAlias: "ROW_COUNT"
});

// 刷新报表应用更改
irInstance.refresh();

二、针对交互式网格(IG)的实现

  1. 创建触发按钮:步骤同IR,添加按钮并绑定动态操作。
  2. 编写JavaScript代码:
    交互式网格的API与IR不同,需使用以下代码(替换YOUR_IG_STATIC_ID为你的网格静态ID):
// 获取交互式网格的网格视图实例
var igInstance = apex.region("YOUR_IG_STATIC_ID").widget().interactiveGrid("getViews", "grid");

// 清除现有分组
igInstance.model.clearGroupBy();

// 设置COL1、COL2为分组列
igInstance.model.groupBy(["COL1", "COL2"]);

// 配置行数统计的聚合列
var countCol = igInstance.model.getColumn("ROW_COUNT");
if (!countCol) {
    // 若网格中无统计列,动态添加计算列
    igInstance.model.addColumn({
        type: "NUMBER",
        alias: "ROW_COUNT",
        label: "行数",
        isComputed: true,
        computeExpression: "COUNT(*)",
        aggregationType: "COUNT"
    });
} else {
    // 若已存在列,直接设置聚合类型
    countCol.aggregationType = "COUNT";
}

// 刷新网格应用更改
igInstance.view$.grid("refresh");

注意事项

  • 确保COL1、COL2是报表/网格中实际存在的列名(区分大小写,需与后端数据源列名一致)。
  • 交互式网格中,若提前在网格定义里创建了隐藏的ROW_COUNT计算列,可省略动态添加列的逻辑,直接启用聚合即可。
  • 测试时需确保页面完全加载后再触发按钮,避免因DOM未初始化导致的对象获取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:02:23