关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复125或者20140414可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!

一般是新建一个解决方案用于客制化命令栏和Ribbon区,我这里是新建了一个 RibbonEditor的解决方案,然后将你要修改的实体加入进来。

我这里是选择 报价单 实体,然后点击 确定 按钮。

在 CRM > 设置 > 解决方案页面 点击 自定义 图标。

选择前面建立的解决方案,然后点击 OK 按钮。

确保选择的选项卡是Command Bar,因为我这里要修改的实体是Dynamics CRM 2013版本中的更新的实体。在 ENTITIES 中选择你要修改的实体,上面部分就会更新成你选择实体的命令栏了。

然后根据你要更改的命令栏的区域,选中合适的命令按钮,我这里是修改表单命令栏,所以我选择如下,选择的事 FORM 的 Active Quote按钮。

右击我要修改的命令按钮,选择 Customize Command 菜单项。

然后就可以看到有些变化了,如下,这是这个按钮的一些属性。

本来最好的办法是增加一个Diplay Rule来根据条件隐藏这个按钮,这里介绍下。右击 Display Rules,选择 Add New这个菜单项,如下。

就会看到 Display Rules多了一行记录,右击,选择 Add Rule。

弹出的窗口如下,但是我们是要根据自定义的JavaScript来判定是否有角色权限,这里没有我们所要的类型,所以我们要用Enable Rule来做。

删除前面建立的Display Rule,我们利用Enable Rule来实现。可以看到已经有Enable Rule了,右击这个已经存在的Enable Rule,选择 Add New菜单项。

这里出来的可选类型和前面的Display Rule有些不同,我这里选择Custom Javascript Rule,然后点击OK按钮。

会多出一个 Custom Rule的节点,选中它,然后在右边设置属性如下。

注意,Library中选择的Web Resource (我这里是 new_/Test.js) 要先上传至这个解决方案,用到的函数(这里是UserInSalesManagerRole) 也要先定义。

然后保存并发布,如下图。

最后我去测试下,发现没有 激活报价单 按钮了。

我换个有这个角色的账号进去,可以看到这个按钮了。

可以知道的是使用Ribbon Workbench自定义按钮时是增加了如下的xml ,这些元素的含义可以参考SDK。

  1. <RuleDefinitions>
  2.  
  3. <TabDisplayRules />
  4.  
  5. <DisplayRules />
  6.  
  7. <EnableRules>
  8.  
  9. <EnableRule Id="Mscrm.QuoteIsInDraftState">
  10.  
  11. <FormStateRule State="Disabled" InvertResult="true" />
  12.  
  13. <FormStateRule State="Create" InvertResult="true" />
  14.  
  15. <CustomRule FunctionName="UserInSalesManagerRole" Library="$webresource:new_/Test.js" Default="false" InvertResult="false" />
  16.  
  17. </EnableRule>
  18.  
  19. </EnableRules>
  20.  
  21. </RuleDefinitions>
  22.  
  23. <LocLabels />
  24.  
  25. </RibbonDiffXml>

切记不要犯低级错误:如果你的Web Resource是直接使用记事本编辑然后上传的,记得保存的时候要选择编码为UTF-8,而不是默认的ASCII,应为你的代码中可能包括中文。

 
2015年10月6日补充:一般用一个专门的JS文件来保存Ribbon区(命令栏)用到的Java Script类型Web资源,比如这个JS文件我一般命名为 new_/common/RibbonScript.js ,我这篇博文没有这么做,大家不要学。因为在debug JavaScript的过程中发现,这个用到的Java Script类型Web资源,比如是new_/common/RibbonScript.js 会在浏览器按 F12 进行调试的时候找不到,如果你和实体使用的主要JS文件是一个的话,调试js的时候会带来麻烦。还有一个值得注意的地方是,enable rule会执行两次,一次在表单没有加载之前就执行一次,这个时候获取不到表单中字段的值,如果你的js代码涉及到获取的话就会报错,我的建议是将所有代码放在try catch 块中,捕获到异常的时候不要弹出提示,直接不处理,返回false即可。我这里有个例子如下:
  1. //判断记录的Owner是否等于当前用户
  2. function CheckOwnerEqualsCurrentUser() {
  3. try {
  4. var userId = Xrm.Page.context.getUserId();
  5. var owner = Xrm.Page.getAttribute("ownerid").getValue();
  6. var ownerID = owner[0].id;
  7. if (userId.toLowerCase() == ownerID.toLowerCase()) {
  8. return true;
  9. }
  10. else {
  11. return false;
  12. }
  13. }
  14. catch (ex) {
  15. //Xrm.Utility.alertDialog(ex.message); //要注释掉这行代码,否则会弹出错误提示
  16. return false;
  17. }
  18. }

Dynamics CRM 客户端程序开发:自定义系统标准按钮的可用性的更多相关文章

  1. Dynamics CRM 客户端程序开发:在实体的列表界面添加按钮

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复114或者20140312可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 如果没有安装Ribbon Wor ...

  2. 【小程序】小程序开发自定义组件的步骤>>>>>>>>>小程序开发过程中报错:jsEnginScriptError

    报错:jsEnginScriptError VM6342: jsEnginScriptError Component is not found in path "component/spac ...

  3. Dynamics CRM 客户端的插件调试

    Dynamics CRM 客户端的插件调试 一直以来,Dynamics CRM插件在大家的印象中都是不便于调试的,根据官方文档(http://technet.microsoft.com/zh-cn/l ...

  4. Dynamics CRM 2013 报表开发:安装开发工具

    最近项目需要开发报表,顺便看了下,首先需要配置开发环境.需要的工具为: 1.Business Intelligence Development Studio 可下载Sql Server 的安装包,选择 ...

  5. tcp客户端程序开发

    https://www.cnblogs.com/python-No/ 话不多说,直接进入正题 一:客户端一共分为5大块: 1.创建客户端套接字 2.和服务端套接字建立连接 3.发送数据 4.接收发送 ...

  6. Microsoft Dynamics CRM 前瑞开发

    做CRM开发最大的感受就是其前瑞开发过程中,调试起来比较麻烦,需要做一些断点还要配制一些浏览器设置,对新手来说比较困难.还有就是对REST调试,经常为了调试一个正确的结果而花费大量的时间.现在推荐一个 ...

  7. Dynamics CRM使用JS隐藏自定义按钮

    在我们平时客制化开发的时候会经常遇到要制作自定义按钮的情况,而这个自定义按钮的功能又经常会有一些隐藏逻辑需要实现,所以每次通过获取控件查找这个按钮再隐藏比较麻烦,而且偶尔会出现代码没起作用的效果.下面 ...

  8. 微信小程序开发---自定义组件

    开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用:也可以将复杂的页面拆分成多个低耦合的模块,有助于代码维护.自定义组件在使用时与基础组件非常相似. 创建自定义组件 类似于页面, ...

  9. Python-TCP客户端程序开发

    TCP客户端,需要与服务端建立连接,连接建立成功后才可以进行数据的传输. # 1.导入模块 import socket if __name__ == '__main__': # 2.创建套接字对象 t ...

随机推荐

  1. netty源码解析(4.0)-21 ByteBuf的设计原理

        io.netty.buffer包中是netty ByteBuf的实现.ByteBuf是一个二进制缓冲区的抽象接口,它的功能有: 可以随机访问.顺序访问. 支持基本数据类型(byte, shor ...

  2. PHPStorm 配置本地 WebServer 运行 PHP

    目标:PHPStorm 2018.2 通过配置运行 PHP 代码无需安装其它 Web Server File -> Settings菜单找到PHP,设置 CLI Interpreter PHP的 ...

  3. ASP.NET Core MVC配置差异(3.0和2.X)

    https://www.cnblogs.com/lonelyxmas/p/10934388.html net core 2.x MVC配置 public void ConfigureServices( ...

  4. Selenium(五):CSS选择器(二)

    1. CSS选择器 1.1 选择语法联合使用 CSS selector的另一个强大之处在于:选择语法可以联合使用. html代码: <div id='bottom'> <div cl ...

  5. JavaScript 赋值

    JavaScript 赋值运算符 赋值运算符向 JavaScript 变量赋值. 运算符 例子 等同于 = x = y x = y += x += y x = x + y -= x -= y x = ...

  6. [转]UiPath: How to Capture a Mouse Event on Hover Menus?

    本文转自:https://www.uipath.com/kb-articles/how-to-capture-mouse-event-on-hover-menus he Knowledgebase a ...

  7. Android 开发时使用 ViewPager 的问题及解决方案整理

    1. ViewPager 的页面重置问题 当我们使用ViewPager控件时,假设我们的ViewPager有三页,当我们第一次启动ViewPager显示第一页的时候,ViewPager会预加载第二页, ...

  8. RCA:收单设备调用云端接口频繁超时排查总结

    研发中心/王鹏 2019年7月 关键词:OKHTTP,安卓,连接复用,开源软件BUG 一.背景知识: OKHTTP已是安卓项目中被广泛使用的网络请求开源库,它有如下特性: 1.支持HTTP/2,允许所 ...

  9. window2012安装oracle报INS-13001 环境不满足最低要求

    在windows server 2012R2安装Oracle客户端或者服务端时,会弹窗报错INS-13001 环境不满足最低要求此时可以进行以下操作进行解决 在解压后的Oracle安装文件目录中,找到 ...

  10. axel 多线程下载工具

    yum install axel-2.4-9.el7.x86_64 -y # 选项 --max-speed=x , -s x 最高速度x --num-connections=x , -n x 连接数x ...