Dynamics CRM 2011 编程系列(13):JS编程之Who Am I

    什么是“Who Am I”?它是Dynamics CRM系统提供给我们的一个Web Service 访问方法,通过该方法我们能获取当前登录系统用户的信息:域账号,所属角色,系统账号Id等等。这类信息不仅仅可以在服务端页面调用,也可以在客户端页面调用。

    在Dynamics CRM 2011之前的系统,想要获取用户登录环境信息需要通过Ajax方法来访问系统的Web Service。但在Dynamics CRM 2011中,系统已经将这类信息进行了封装,并提供了相应的API给我们调用。完美的实现,解决了繁琐的code问题。

我们先感性的认识下这些API吧:

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第1张图片

图1

 

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第2张图片

图2

 

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第3张图片

图3

 

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第4张图片

图4

 

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第5张图片

图5

 

    我们做个小例子,来看看这类API有什么功能吧。小例子的需求为:判断当前登录的用户是否具有角色“XXX”,如果具有就开放某个实体属性,如果不具有则将某个属性置灰处理。强烈建议读者循序渐进的阅读本系列文章,该节内容涉及到了大量之前介绍的知识。

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第6张图片

图6

 

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第7张图片

图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;

}

 

Dynamics CRM 2011 编程系列(13):JS编程之Who Am I_第8张图片

图8

 

 

小结

     完美的封装,省去了不少code时间。调用这些API不仅限于onload事件,几乎所有的客户端脚本都能调用这些API来处理问题。

你可能感兴趣的:(编程,api,脚本,service,crm,asp.net)