Page tree
Skip to end of metadata
Go to start of metadata

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如报表使用冻结,或多个宏代码冲突等),需根据实际需求开发代码。

示例说明

在电子表格报表中切换一个参数,根据不同的参数值打开不同的报表。如下图所示,切换【跳转报表】参数,当值为1的时候显示电子表格1:

设置方法

1、在 公共设置 > 参数定义 中,创建参数。

2、在“分析展现”节点下,创建电子表格1、电子表格2对应的查询,要求所有查询都需要在where条件中添加"B参数"="B参数",如下图: 


3、在电子表格设计器中使用上面查询分别创建电子表格对应的电子表格1、电子表格2。

4、在 公共设置 > 宏资源包 节点下,新建一个宏资源包,类型选择电子表格,适用范围选择电子表格1和电子表格2。


5、双击此宏资源包进入报表宏界面。

6、在报表宏界面新建客户端模块,在弹出的新建模块对话框中选择对象为 spreadsheetReport;事件为 onParamValueChanged;并把下面宏代码复制到代码区域。 

宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onParamValueChanged

宏代码

function paramToString(v) {
    return v == null ? null : v.toString();
};
function main(spreadsheetReport, param) {
    // 避免宏代码循环调用
    if (!spreadsheetReport._init) {
        return;
    }
    if (param.name == "跳转至报表") { //判断参数名称是否为"跳转至报表"
        var destQuery = null;
        var command = spreadsheetReport.command;
        command.close();
        if (param.value == 1) { //如果参数B的值为2,则打开电子表格2
            destQuery = 'I8a8af0a6017297949794e7480172986ed7b10d71'; //电子表格2的ID
        }
        if (param.value == 2) { //如果参数B的值为2,则打开电子表格2
            destQuery = 'I8a8af0a6017297949794e7480172987376070df0'; //电子表格2的ID
        }
        command.execute('OPENWITHNOREFRESH', destQuery);
        //spreadsheetReport.autoRefresh = false;
        var report = command.spreadsheetReport;
        if (spreadsheetReport.params.length > 0) {
            report.setParamsInfo(spreadsheetReport.buildParamsInfo()); // 传递所有参数值
        }
        if (spreadsheetReport.autoRefresh == 1) { // 增加电子表格切换参数自动刷新判断
            report.doRefresh();
        }
    }
};


注:在某些场景下设置以上宏代码的时候会出现循环调用,所以在以上宏代码的main方法中初始判断,并增加一个onRenderReport事件如下:

将这个变量设置到切换参数的宏模块中:

针对某种场景下切换参数参数没有改变的问题,在宏代码中做了相应的修改,之前只传递了决定报表切换的那个参数,修改之后将所有参数传递给了切换后的报表。

onRenderReport事件代码需要放置在以上宏代码的前面。



宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onRenderReport


宏代码

function main(spreadsheetReport) {
    spreadsheetReport._init = true;
}

资源下载

资源:migrate.xml