Dynamics CRM 2011 编程系列(33):Ribbon的开发3(按钮的执行环境)
之前的两篇博文《Dynamics CRM 2011 编程系列(31):Ribbon的开发一(添加按钮,选项卡,Jewel)》,《Dynamics CRM 2011 编程系列(32):Ribbon的开发二(按钮的禁用规则)》分别介绍了Dynamics CRM 2011系统中可以向Ribbon中添加的按钮以及这些按钮的显示禁用规则。在日常开发中按钮的功能依赖于它们的执行环境,那怎样获取按钮的执行环境就成了一个关键的问题。
比如我们要添加一个按钮,该按钮要根据当前登录用户的角色来判断是否显示,或者该按钮只有在当前记录关联的父记录状态为可用时才可以单击。要完成这项功能获得按钮的执行环境是关键。
再或者按钮的执行的功能必须的参数只有在该按钮的执行环境中才能获得的时候,怎么获取按钮的执行环境也成为完成该需求的一个关键。如:执行批量操作的HomepageGrid按钮。
本文的开发建立在博客《Dynamics CRM 2011 编程系列(31):Ribbon的开发一(添加按钮,选项卡,Jewel)》的基础上,建议读者在阅读该博文之前阅读该文章。
例子1:具有角色“销售经理”的用户才能点击该按钮
图1
图2
图3
图4
图5
图6
图7
图8
图9
图10
使用到的代码
function campaignEnableRule1() { var isEnable=false; var path="/$ORGANIZATION$/xrmservices/2011/organizationdata.svc/RoleSet?$select=RoleId&$filter=Name eq '%e9%94%80%e5%94%ae%e7%bb%8f%e7%90%86'"; var curOrganizationName=Xrm.Page.context.getOrgUniqueName(); var curUserRoleList=Xrm.Page.context.getUserRoles(); var helper=new RESTHelper(); var allowRoleId; path=path.replace(/\$ORGANIZATION\$/,curOrganizationName); allowRoleId=helper.Read(path); if(allowRoleId!=null && allowRoleId.results!=undefined) { for(var i=0;i<curUserRoleList.length;i++) { if(curUserRoleList[i].toString().toLowerCase() == allowRoleId.results[0].RoleId.toString().toLowerCase()) { isEnable=true; break; } } } return isEnable; }
例子2:HomepageGrid按钮执行上下文
HomepageGrid按钮的点击事件可以传递当前执行上下文,这类上下文是以参数的形式传递。共有23个参数可供选择,我们就来看看吧:
图11
图12
图13 HomepageGrid按钮执行时获取到的参数,该图中的参数与图11中的参数按序号一一对应(后同)
图14
例子3:Form按钮执行上下文
与HomepageGrid按钮一样,它的上下文是以参数的形式传递。共有23个参数可供选择,我们就来看看吧:
图15
图16
图17
小贴士
在按钮的CustEnable规则中可以使用博文《Dynamics CRM 2011 编程系列(13):JS编程之Who Am I》中描述的API来提取按钮的执行环境。