页面树结构
转至元数据结尾
转至元数据起始

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

示例说明

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

切换【B】参数,值为2的时候显示电子表格2:



设置方法

1、在“公共设置 -> 参数定义”中,创建【B】参数。



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 == "层级") { //判断参数名称是否为"B"
        var destQuery = null;
        var command = spreadsheetReport.command;
        command.close();
        if (param.value == 1) { //如果参数B的值为2,则打开电子表格2
            destQuery = 'I8aa782bd015949814981ce3c01595f0d97f4740a'; //电子表格2的ID
        }
        if (param.value == 2) { //如果参数B的值为2,则打开电子表格2
            destQuery = 'I8aa782bd015949814981ce3c01595f12d1667472'; //电子表格2的ID
        }

        if (param.value == 3) { //如果参数B的值为1,则打开电子表格1    
            destQuery = 'I8aa782bd015949814981ce3c01595f15a03c74c7'; //电子表格1的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事件如下:

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

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


宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onRenderReport

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



评论

  1. 陈舒婷 发表:

    若设置了以上宏不生效,可以尝试把如下截图中红框内的内容改为:

     if (spreadsheetReport.params.length > 0) {

     

                report.setParamsInfo(spreadsheetReport.params); // 传递所有参数值

     

            }