提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。 |
注:此示例仅供参考!实际应用中须根据具体需求稍作调整!
我们对电子表格报表设置跳转规则时,有时会遇到如下需求:要求根据当前用户所属角色不同,跳转到不同的目标报表。或者是根据用户所属机构不同,跳转到不同的目标报表,类似上述需求,可以参照如下方法设置。
参考示例:
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; }; |