在日常工作或生活中,我们时常会遇到一些个性化的需求。像针对个人、部门分组、或是不同角色的人可以做一些个性化的展示,让他们看到他们能看到的、或是他们常使用的内容等。比如针对销售部门与采购部门,我们可以做 ...
在日常工作或生活中,我们时常会遇到一些个性化的需求。像针对个人、部门分组、或是不同角色的人可以做一些个性化的展示,让他们看到他们能看到的、或是他们常使用的内容等。比如针对销售部门与采购部门,我们可以做不同的可视化报告让不同部门的人直接查看不同的报告即可,而对于同个部门不同区域或是不同层级的人,我们可以通过数据的行权限来管控每个人可看的数据。 除了以上的场景,我们时常还会遇到一些较之更小的或是更加个性化的场景,例如,对于同一个可视化报告,不同的人或是角色进来能看到的大部分内容都相同,但会有一两个图表不同,即不同人看不同的图表;或是同一个图表,对与进来的不同人展示不一样的默认值。面对这样的场景,单单是使用我们原来的授权方式可能就无法满足了,那该如何处理呢? 今天这里就带大家使用永洪BI的“角色”加脚本的方式实现以上两个比较常见的个性化(定制化)场景: 1)同一个报告,不同角色可见不同组件;2)同一个组件,不同角色显示不同默认值。 角色是永洪BI权限管理模块的一个重要组成部分,通过角色可以简单的做到不同分组的人批量授权或是其他更复杂的权限管控。我们可以在管理系统-认证授权模块新建各种角色,然后这些角色可以赋给不同的人或是不同分组,此时我们在角色上做各种授权,有相应角色的分组或个人就有了相应的权限。 报告内容个性化(定制化)展示实现效果 了解了组件与角色,接下来,进入本次主题。以下先看一下实现效果。 1 当用户usr1登录时,能看到各市场销售额占比环图,各产品销量柱图,以及销售数据明细表且默认能看到市场级别与销量两个字段数据。 当用户usr2登录时,能看到的则是年度销售额达成情况仪表,各产品销量柱图,以及销售数据明细表且默认能看到市场分布与销售额两个字段数据。 报告内容个性化(定制化)展示实现步骤 环图:图表组件区拖拽环图组件到画布区域,拖拽数据字段绑定出图,如下。其他几个图表类似。 需要注意的是,除了表面能看到的占比环图,其实在环图下方我们还有销售额达成的仪表,在制作时,我们需先分别做好两个图表,然后叠放到一起;除此之外,下方的销售明细表我们绑定字段为参数列字段(参数列用法参见链接:https://www.yonghongtech.com/help/Z-Suite/9.4/ch/dataprocess_dynamicbind.html?zoom_highlightsub=%E5%8F%82%E6%95%B0%E5%88%97),这里使用的下拉列表参数实现方式,当然,如果觉得参数组件多余,我们可以给它以遮盖或不显示的方式隐藏掉。 进入认证授权界面,新建角色“销售经理”,将角色分配给用户usr2,并且给这个角色授权步骤1完成报告的读权限【这里选择‘角色’是方便后续用户有变化时,不需要针对每个用户去授权,将变更用户加入或移除当前角色即可】。新建销售员同理,分配给用户usr1。 完成这一步后,我们登录两个用户,都可以看到步骤1完成的报告且两者能看到内容是一样的,那么下一步我们就需要对他们分别能看的内容做一个控制,下面将通过脚本来完成。 回到制作报告界面,选择报告-脚本-装载时运行进行脚本编写。 //1.通过查字符串索引的方式判断当前登录用户是否有相关角色 var arr=new Array() for(var i=0 ; i<param['_roles_'].length; i++){="" ="" param['_roles_']为系统内置角色参数 arr.push(param['_ROLES_'][i]); } data=arr.toString() //转换为字符串 //debug(data.indexOf('CEO')) //indexOf()查找对象是否在字符串中存在 返回-1为不存在,其他整数为角色存在 a=data.indexOf('销售员') b=data.indexOf("销售经理"); //通过角色存在与否控制组件的显示隐藏 if(a!=-1 && b==-1){ 组1.visible=false //组1为仪表与相关辅助组件的组合 组2.visible=true //组2为环图与相关辅助组件的组合 } if(a==-1 && b!=-1){ 组1.visible=true 组2.visible=false } //2.通过循环遍历登录用户角色是否满足,满足则设置参数组件默认勾选值,以此来影响图表展示默认值 var arr1=param["_ROLES_"] for(var i=0 ; i<arr1.length; i++){<="" span=""> if(arr1[i]=='销售员'){ 下拉列表参数1.setSelectedObjects(['市场级别','销量'],STRING); } if(arr1[i]=='销售经理'){ 下拉列表参数1.setSelectedObjects(['市场分布','销售额'],STRING) } } 上面的脚本代码可直接复制使用,注意根据实际情况做相应的调整。 若以上脚本字符串查索引的方式不便于理解,可都用循环遍历的方式,上面脚本代码可整合到第二小段代码,融合后如下: var arr1=param["_ROLES_"] for(var i=0 ; i<arr1.length; i++){<="" span=""> if(arr1[i]=='销售员'){ 下拉列表参数1.setSelectedObjects(['市场级别','销量'],STRING); 组1.visible=false 组2.visible=true } if(arr1[i]=='销售经理'){ 下拉列表参数1.setSelectedObjects(['市场分布','销售额'],STRING) 组1.visible=true 组2.visible=false } } |
2024-02-29
2024-01-22
2024-01-03
2023-12-27
2023-12-08
回答
回答
回答
回答
3