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

示例说明

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

参考示例:

设置方法

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

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

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

 

宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onLinkClick

宏代码

function paramToString(v) {
    return v == null ? null: v.toString();
};
 
function main(spreadsheetReport, ruleName, params) {
    //debugger;
    if (ruleName != "按角色跳转") return;
    // 判断当前用户所属角色,跳转到不同的报表
    if (currentUserHasRole("角色1")) {
        jump_role1(spreadsheetReport, ruleName, params);
    } else if (currentUserHasRole("角色2")) {
        jump_role2(spreadsheetReport, ruleName, params);
    } else {
        alert("当前用户不能跳转到任何报表!");
    }
};
 
// 如果当前用户拥有角色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=I402881eb0c9787c2014f8c9fb57300a5&showtoolbar=true&refresh=true", [{
        name: "paramsInfo",
        value: lang.toJSONString(paramsInfo)
    }])
};
 
// 如果当前用户拥有角色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=I402881eb0c9787c2014f8ca0925c00e7&showtoolbar=true&refresh=true", [{
        name: "paramsInfo",
        value: lang.toJSONString(paramsInfo)
    }])
};
 
//判断当前用户是否拥有某角色
function currentUserHasRole(roleName) {
    //debugger;
    var UserService = imports("bof.usermanager.UserService").getInstance();
    var userId = UserService.getCurrentUser().id;
    if (UserService.isAdmin(userId)) { // 如果是管理员则不判断角色
        return true;
    }
    // 获取角色ID值
    var role = UserService.getRoleByName(roleName);
    if (!role || !role.id) {
        return false;
    }
    var retVal = UserService.hasRoleByUserId(userId, role.id);
    return retVal;
};


关键对象总结

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

 

  • 无标签