版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
示例说明
我们对电子表格报表设置跳转规则时,有时会遇到如下需求:要求根据当前用户所属角色不同,跳转到不同的目标报表。或者是根据用户所属机构不同,跳转到不同的目标报表,类似上述需求,可以参照如下方法设置。
参考示例:
Image Added
设置方法
1、首先在电子表格设计器(Microsoft Office Excel)中,创建电子表格报表,源报表和目标报表。
2、在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
3、在报表宏界面新建跳转规则向导。设置向导,让其自动生成服务端模块和客户端模块代码,然后手动修改其生成的“客户端模块”代码,参考如下的示例代码,修改其中的 main 方法。
Image Added
宏类型
类型 | 对象 | 事件 |
---|---|---|
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)。