页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

示例说明

我们对电子表格报表设置跳转规则时,有时会遇到如下需求:要求根据当前用户所属角色不同,跳转到不同的目标报表。或者是根据用户所属机构不同,跳转到不同的目标报表,类似上述需求,可以参照如下方法设置。

参考示例:

设置方法

1、首先在电子表格设计器(Microsoft Office Excel)中,创建电子表格报表,源报表和目标报表。

2、在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。

3、在报表宏界面新建跳转规则向导。设置向导,让其自动生成服务端模块和客户端模块代码,然后手动修改其生成的“客户端模块”代码,参考如下的示例代码,修改其中的 main 方法。

 

宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onLinkClick

宏代码

 

代码块
languagejs
linenumberstrue
function paramToString(v) {
    return v == null ? null : v.toString();
};
 
function main(spreadsheetReport, ruleName, params) {
    //debugger;
    if (ruleName != "按角色跳转根据参数跳转") return;
    var value = spreadsheetReport.getParameterValue("产品大类名称");  
    // 判断当前参数值,跳转到不同的报表
判断当前用户所属角色,跳转到不同的报表        if (currentUserHasRole("角色1value == "饮料")) { 
            jump_role1(spreadsheetReport, ruleName, params);
        } else if (currentUserHasRole("角色2")) {value == "调味品"){
            jump_role2(spreadsheetReport, ruleName, params);
        } else {
            alert("当前用户不能跳转到任何报表!当前参数值不能跳转到任何报表!");
        }
    
};
  
// 如果当前用户拥有角色1,则跳转到报表1如果当前参数值是饮料,则跳转到报表1
function jump_role1(spreadsheetReport, ruleName, params) {
    var paramsInfo = [];
    //获取传递至目标报表的参数值
    //paramsInfo.push({
        name: "五级分类产品名称",
        value: paramToString(params[0]),
        displayValue: paramToString(params[0])
    });
    //@smartbi.openOtherPage:"I402881eb0c9787c2014f8c9fb57300a5"
    //新窗口打开
    //openURL("openresource.jsp?resid=I402881eb0c9787c2014f8c9fb57300a5I40288253015803c503c590e5015803fc00350218&showtoolbar=true&refresh=true", [{name:"paramsInfo",value: lang.toJSONString(paramsInfo)}])
    //覆盖当前资源
    var command =  name: "paramsInfo",
spreadsheetReport.command;
    command.close();
    //@smartbi.openOtherPage:"I40288253015803c503c590e5015804933a850628"
    command.execute('OPENWITHNOREFRESH', 'I4028b881015ecb42cb42853d015ecbb0ed820042');
    var report  value: lang.toJSONString= command.spreadsheetReport;
    if (paramsInfo.length > 0) report.setParamsInfo(paramsInfo);
    }])report.doRefresh();
};
  
// 如果当前用户拥有角色2,则跳转到报表2如果当前参数值是调味品,则跳转到报表2
function jump_role2(spreadsheetReport, ruleName, params) {
    var paramsInfo = [];
    paramsInfo.push({         name: "五级分类产品大类名称",
        value: paramToString(params[0]),
        displayValue: paramToString(params[0])
    });
    //@smartbi.openOtherPage:"I402881eb0c9787c2014f8ca0925c00e7"
    //openURL("openresource.jsp?resid=I402881eb0c9787c2014f8ca0925c00e7I4028b881015fe2dbe2db21df015fe2f7c6c7019c&showtoolbar=true&refresh=true", [{
        name: "paramsInfo",
        value: lang.toJSONString(paramsInfo)
    }])
};
 
//判断当前用户是否拥有某角色
function currentUserHasRole(roleName)
{
    //debugger;覆盖当前资源
    var UserServicecommand = imports("bof.usermanager.UserService").getInstance()spreadsheetReport.command;
    var userId = UserService.getCurrentUsercommand.close().id;
    if (UserService.isAdmin(userId)) { //@smartbi.openOtherPage:"I4028b881015fe2dbe2db21df015fe36107450452"
如果是管理员则不判断角色         return true;
    }
    // 获取角色ID值command.execute('OPENWITHNOREFRESH', 'I4028b881015fe2dbe2db21df015fe36107450452');
     var rolereport = UserService.getRoleByName(roleName)command.spreadsheetReport;
    if (!role || !role.id) {
        return falseparamsInfo.length > 0) report.setParamsInfo(paramsInfo);
    }
    var retVal = UserService.hasRoleByUserId(userId, role.id);
    return retVal;
};
report.doRefresh();
};

 

关键对象总结

  • 判断当前用户是否拥有某角色:function currentUserHasRole(roleName)。
  • 跳转到目标报表:function jump_role2(spreadsheetReport, ruleName, params)。

function paramToString(v) {    return v == null ? null : v.toString();}function main(spreadsheetReport, ruleName, params) {    debugger;    if (ruleName != "根据参数跳转") return;    var value = spreadsheetReport.getParameterValue("产品大类名称");      // 判断当前参数值,跳转到不同的报表        if (value == "饮料") {             jump_role1(spreadsheetReport, ruleName, params);        } else if (value == "调味品"){            jump_role2(spreadsheetReport, ruleName, params);        } else {            alert("当前参数值不能跳转到任何报表!");        }    }; // 如果当前参数值是饮料,则跳转到报表1function jump_role1(spreadsheetReport, ruleName, params) {    var paramsInfo = [];    //获取传递至目标报表的参数值    //paramsInfo.push({ name:"产品名称",value:paramToString(params[0]),displayValue:paramToString(params[0])});    //@smartbi.openOtherPage:"I402881eb0c9787c2014f8c9fb57300a5"    //新窗口打开    //openURL("openresource.jsp?resid=I40288253015803c503c590e5015803fc00350218&showtoolbar=true&refresh=true", [{name:"paramsInfo",value: lang.toJSONString(paramsInfo)}])    //覆盖当前资源    var command = spreadsheetReport.command;    command.close();    //@smartbi.openOtherPage:"I40288253015803c503c590e5015804933a850628"    command.execute('OPENWITHNOREFRESH', 'I4028b881015ecb42cb42853d015ecbb0ed820042');    var report = command.spreadsheetReport;    if (paramsInfo.length > 0) report.setParamsInfo(paramsInfo);    report.doRefresh();}; // 如果当前参数值是调味品,则跳转到报表2function jump_role2(spreadsheetReport, ruleName, params) {    var paramsInfo = [];    paramsInfo.push({ name:"产品大类名称",value:paramToString(params[0]),displayValue:paramToString(params[0])});    //@smartbi.openOtherPage:"I402881eb0c9787c2014f8ca0925c00e7"    //openURL("openresource.jsp?resid=I4028b881015fe2dbe2db21df015fe2f7c6c7019c&showtoolbar=true&refresh=true", [{name:"paramsInfo",value: lang.toJSONString(paramsInfo)}])
    //覆盖当前资源    var command = spreadsheetReport.command;    command.close();    //@smartbi.openOtherPage:"I4028b881015fe2dbe2db21df015fe36107450452"    command.execute('OPENWITHNOREFRESH', 'I4028b881015fe2dbe2db21df015fe36107450452');    var report = command.spreadsheetReport;    if (paramsInfo.length > 0) report.setParamsInfo(paramsInfo);    report.doRefresh();};