Dynamics CRM 根据用户权限不同来进行按钮的显示和隐藏的功能

本文介绍如何使用RibbonWorkbench自定义DynamicsCRM中的按钮,并根据用户的特定角色(如系统管理员或销售员)来控制按钮的可见性。文中详细展示了通过编写JavaScript代码实现这一功能的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本人刚接触Dynamics CRM不久,也是个小白,写的内容算是自己做的笔记,也给新人一些参考,写的不对或者不好的地方请指出来,大家一起学习, 有问题可在下方评论,大神勿喷。

上一篇文章Dynamics CRM 365 Button自定义之RibbonWorkbench2016介绍了通过RibbonWorkbench 自定义Button,接下来我们将根据用户角色来显示和隐藏当前Button。
首先来看一张最后的效果图,当前具有系统管理员和销售员角色权限的情况,可以看到这里显示了百度MAP这个按钮。
这里写图片描述

下面将进行我们的操作,首先还是进入到我们的RibbonWorkbench解决方案里面,[注:选择Solution时,当前Solution必须包含需要操作的Entity] 第一步选择你要操作的Entity ,然后选择要操作的Button,这里我们需要对Button进行启用和禁用,我们选择Enable Rule 点击加号。

这里写图片描述

添加一个步骤,选择Custom Rule 自定义规则。

这里写图片描述

这里我们让他默认为false,FunctionName为你js定方法名,Library为你上传在Solution的js文件

这里写图片描述
下面是js代码

var role=false;
function ShowRoleForBaidu()
{

  var RoleId=Xrm.Page.context.getUserRoles();//获取当前的权限id
  //alert(RoleId);
  //有时候我们获取的id加了{}了的,这时候我们需要将它转换一下
  // var newRoleId=RoleId.replace(/^{/, "").replace(/}$/, "");

  for (var i=0;i<RoleId.length;i++) {
  //之所以用for是因为当前的用户可能不止一个角色,我们需要将他遍历出来。
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/roles(" + RoleId[i] + ")?$select=name", false);//true是异步,false是同步
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
    req.onreadystatechange = function () {

      if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 200) {//200执行成功且有返回值
          var result = JSON.parse(this.response);
          var name = result["name"];
          if (name == "销售员") {
            role = true;
          }

        } else {
          var error = JSON.parse(this.response).error;
          Xrm.Utility.alertDialog(this.statusText + error.message+"错误");
        }
      }
    };
    req.send();
  }
  return role;
}

接下来我们打开当前Button command指令,将我们创建的Enable Rule 添加进去

这里写图片描述

添加完成后

这里写图片描述

设置>安全性>用户 选中我们当前的用户 ,点击管理角色,将我们的售货员的角色的勾去掉,点击确定。
【友情提示:在没有备用具有系统管理员角色的用户时,千万不要将系系统管理员的角色删掉,不然。。。 嘿嘿 ,你自己去想想吧,别问我为什么要提示你们,宝宝想哭,,,】

这里写图片描述

大功告成,这里的Button已经不显示了,当用户具有售货员角色的时候就会重新显示了。

这里写图片描述

<think>好的,我现在需要回答用户关于如何在 DynamicsCRM 中使用 JavaScript控制按钮的显隐的问题。首先,我需要回忆一下 Dynamics CRM中自定义按钮控制的方法,通常这涉及到表单脚本Ribbon 工作区的定制。用户可能是在表单上或者实体列表的Ribbon栏中有按钮需要根据某些条件显示隐藏Dynamics CRM 的客户端API,尤其是Xrm.Page库,在旧版本中常用,但现在可能需要使用新的Xrm.WebApi或者其他方法,特别是如果用户使用的是UnifiedInterface的话。 首先,要确定用户使用的是哪种界面,经典视图还是统一界面,因为方法可能不同。但一般来说,控制按钮的显隐通常是通过RibbonWorkbench工具自定义命令,并在JavaScript中定义规则。步骤大概是这样的:在解决方案中添加按钮的命令,然后为该命令添加Enable Rule或者Display Rule,这些规则可以调用JavaScript函数返回的布尔值来决定是否显示或启用按钮。此外,可能需要使用页面上的字段值来动态判断,这时候需要注册字段的onChange事件来触发显隐逻辑。 另外,在表单脚本中,可能需要访问控件,比如使用Xrm.Page.ui.controls.get方法来获取按钮,但需要注意的是,Ribbon按钮的控制可能更复杂,因为它们不是表单上的标准控件,而是属于全局的Ribbon元素。 需要编写一个JavaScript函数,该函数根据业务逻辑返回true或false,然后在Ribbon的定义中引用这个函数作为显示规则。例如,当某个字段有值时显示按钮,否则隐藏。 还要考虑到权限问题,确保用户权限执行相关操作,但显隐控制更多是前端逻辑。此外,可能需要使用异步调用来获取数据,再更新按钮状态,这时候要确保函数返回的是Promise或者正确处理异步回调。 可能的代码示例是,在Ribbon命令的显示规则中调用一个自定义函数,该函数检查当前记录的状态或字段值,然后返回布尔值。同时,在表单加载或字段变更时触发该函数,以动态更新按钮状态。 需要提醒用户部署自定义按钮JavaScript资源,并在解决方案中正确配置。可能还需要使用Ribbon Workbench工具来简化配置过程,确保命令规则的关联正确。总结下来,关键点包括:使用Ribbon Workbench自定义按钮显示规则,编写JavaScript函数来返回条件结果,处理字段变更事件以动态更新,以及正确部署资源。</think>在Dynamics CRM中,可以通过JavaScript结合Ribbon Workbench工具控制按钮的显隐。以下是核心实现方法: ```javascript // 控制Ribbon按钮可见性的函数 function updateButtonVisibility(selectedControl) { // 获取当前表单上下文 var formContext = Xrm.Page; // 示例条件:当"状态"字段为"Active"时显示按钮 var statusField = formContext.getAttribute("statuscode"); // 获取Ribbon按钮控件(需要正确配置Command名称) var targetButton = selectedControl || formContext.ui.controls.get("your_button_command_name"); if (statusField && targetButton) { var statusValue = statusField.getValue(); var shouldShow = (statusValue === 1); // 假设1对应Active状态 // 设置按钮可见性(新接口方法) targetButton.setVisible(shouldShow); // 兼容旧版本方法 // Xrm.Page.ui.ribbon.controls.get("your_button_command_name").setVisible(shouldShow); } } // 表单加载时初始化 function onLoad(executionContext) { var formContext = executionContext.getFormContext(); updateButtonVisibility(); // 注册字段变更事件 formContext.getAttribute("statuscode").addOnChange(function(context) { updateButtonVisibility(); }); } ``` 实现原理说明: 1. 通过`Xrm.Page`或`executionContext.getFormContext()`获取表单上下文 2. 使用`getAttribute()`获取需要判断的字段值 3. 通过`setVisible()`方法控制按钮显示状态 4. 通过字段的`addOnChange`事件实现动态更新 部署步骤: 1. 在解决方案中添加Web资源(JavaScript文件) 2. 使用Ribbon Workbench工具配置按钮: - 添加Enable Rule/Display Rule - 选择"Custom Rule" - 指定JavaScript函数名称 3. 发布自定义项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值