关注本人微信和易信公众号: 微软动态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。

<RuleDefinitions>

<TabDisplayRules />

<DisplayRules />

<EnableRules>

<EnableRule Id="Mscrm.QuoteIsInDraftState">

<FormStateRule State="Disabled" InvertResult="true" />

<FormStateRule State="Create" InvertResult="true" />

<CustomRule FunctionName="UserInSalesManagerRole" Library="$webresource:new_/Test.js" Default="false" InvertResult="false" />

</EnableRule>

</EnableRules>

</RuleDefinitions>

<LocLabels />

</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即可。我这里有个例子如下:
//判断记录的Owner是否等于当前用户
function CheckOwnerEqualsCurrentUser() {
try {
var userId = Xrm.Page.context.getUserId();
var owner = Xrm.Page.getAttribute("ownerid").getValue();
var ownerID = owner[0].id;
if (userId.toLowerCase() == ownerID.toLowerCase()) {
return true;
}
else {
return false;
}
}
catch (ex) {
//Xrm.Utility.alertDialog(ex.message); //要注释掉这行代码,否则会弹出错误提示
return false;
}
}

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)-27 ByteBuf内存池:PoolArena-PoolThreadCache

    前面两章分析的PoolChunk和PoolSubpage,从功能上来说已经可以直接拿来用了.但直接使用这个两个类管理内存在高频分配/释放内存场景下会有性能问题,PoolChunk分配内存时算法复杂度最 ...

  2. SpringCloud的入门学习之概念理解、Feign负载均衡入门

    1.Feign是SpringCloud的一个负载均衡组件. Feign是一个声明式WebService客户端.使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口, ...

  3. InnoSetup 根据选择的安装语言显示不同语言的(协议)License和更新说明

    需求 在安装时,选择中文安装,显示中文版协议(License)文件. 在安装时,选择英文安装,显示英文版协议(License)文件. 解决 [Languages] 段中有LicenseFile属性和I ...

  4. SSM框架之Mybatis(7)延迟加载、缓存及注解

    Mybatis(7)延迟加载.缓存及注解 1.延迟加载 延迟加载: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. **好处:**先从单表查询,需要时再从关联表去关 ...

  5. 微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装(一)

    在做web开发时,表单验证插件我们前端用的是jqueryValidate,由于个人主要精力是在后台JAVA开发上,为了让插件与后台更好的结合和使用,通过JAVA的自定义组件将表单全部重新写了一边,同时 ...

  6. (办公)mysql索引

    举个例子:20多w的数据,查询语句,什么都没有查到,既没有走到主键索引,普通索引,什么都没走,走的就非常慢. 下面要加索引,并了解mysql索引的作用,以及如何使用他们索引. 介绍MysqlMySQL ...

  7. STL 中 list 的使用

    list 容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表,这样,对链表的任一位置的元素进行插入.删除和查找都是极快速的.由于list对象的节点并不要求在一段连续的内存中, ...

  8. JUC-1-volatile

    什么是volatile关键字      volatile是轻量级同步机制,与synchronized相比,他的开销更小一些,同时安全性也有所降低,在一些特定的场景下使用它可以在完成并发目标的基础上有一 ...

  9. hashlib和hmac模块

    目录 一.hashlib模块 1.0.1 hash是什么 1.0.2 撞库破解hash算法加密 一.hashlib模块 1.0.1 hash是什么 hash是一种算法(Python3.版本里使用has ...

  10. springboot整合shiro进行权限管理

    背景:springboot2.1,shiro1.4:由于目前的小项目没做登录,但是客户又需要加上权限,因此楼主就想到了shiro(这是单独的项目,需要集成后台管理系统) shiro简介 Apache ...