什么是“Who Am I”?它是Dynamics CRM系统提供给我们的一个Web Service 访问方法,通过该方法我们能获取当前登录系统用户的信息:域账号,所属角色,系统账号Id等等。这类信息不仅仅可以在服务端页面调用,也可以在客户端页面调用。
在Dynamics CRM 2011之前的系统,想要获取用户登录环境信息需要通过Ajax方法来访问系统的Web Service。但在Dynamics CRM 2011中,系统已经将这类信息进行了封装,并提供了相应的API给我们调用。完美的实现,解决了繁琐的code问题。
我们先感性的认识下这些API吧:
图1
图2
图3
图4
图5
我们做个小例子,来看看这类API有什么功能吧。小例子的需求为:判断当前登录的用户是否具有角色“XXX”,如果具有就开放某个实体属性,如果不具有则将某个属性置灰处理。强烈建议读者循序渐进的阅读本系列文章,该节内容涉及到了大量之前介绍的知识。
图6
图7
//将这些脚本放在实体的onload事件中
var helper=new RESTHelper();
//Name='酱油哥'中的“酱油哥”需要进行url编码,可以用Asp.net中的Server.UrlEncode方法来编码
var roleList=helper.Read("/gh2011/XRMServices/2011/OrganizationData.svc/RoleSet?$filter=Name eq '%e9%85%b1%e6%b2%b9%e5%93%a5'");
var roles=context.getUserRoles();
var singleTextControl=Xrm.Page.getControl("new_singletextcontrol");
var isOk=false;
for(var tmp in roles)
{
if(CompareGUID(roles[tmp],roleList.results[0].RoleId))//判断是否具有角色"酱油哥"
{
//alert("Yes!");
isOk=true;
break;
}
}
if(isOk)
{
singleTextControl.setDisabled(true);
}
//用这个方法来比较guid可以确保万无一失
function CompareGUID(data1,data2)
{
data1=data1.replace(/\{?(.{36})\}?/,"$1").toLowerCase();
data2=data2.replace(/\{?(.{36})\}?/,"$1").toLowerCase();
return data1==data2;
}
图8
小结
完美的封装,省去了不少code时间。调用这些API不仅限于onload事件,几乎所有的客户端脚本都能调用这些API来处理问题。