前面的几篇文章介绍了Micosoft Dynamics CRM 2011的组织服务的各个常用方法,。除了常用方法外,还可以使用 IOrganizationService.Execute 方法执行没有公开为方法的消息。Execute 方法采用消息请求类作为参数并返回消息响应类。请求消息类名称以“Request”结尾,响应消息类名称以“Response”结尾。本文将介绍微软CRM组织服务中的一个特殊的方法Execute方法。
Execute方法可以执行消息,它可以处理一个请求消息,而后返回和请求消息对应的响应消息;Execute方法是为了基于消息而开发,而不是基于方法开发出来的,这样,方法名称不变的情况下,只需要传入不同消息即可完成不同的操作。
Execute方法的执行流程示意图如下所示:
Execute方法的签名如下:
1 OrganizationResponse Execute (
2 OrganizationRequest request
3 )
OrganizationResponse是所有请求消息的基类,其主要属性包括有:
名称 |
说明 |
Parameters |
必填项, 获取/设置请求的参数集合. 可以由派生类提供 |
RequestName |
必填项, 获取/设置请求的名称,可以由派生类提供 |
可以通过设置Parameters属性以及RequestName属性的方式完成请求消息的创建,不过如果直接使用派生类,例如AssignRequest或者WhoAmIRequest,那么参数集合以及请求名称都已经由相应的派生类填充好了。
Execute方法的返回值是OrganizationResponse的派生类,与请求消息的名称唯一的不同就是后缀名称。例如,如果Execute方法的输入参数是AssignRequest,那么对应的返回值就是一个AssignResponse类的对象,如果Execute方法的输入参数是WhoAmIRequest,那么Execute方法的返回值就是一个WhoAmIResponse类的对象。总之,请求和响应成对出现。
请求Request分为三类,分别是特定实体请求、非特定实体请求以及通用请求。下面一一介绍。
特定实体请求,顾名思义,就是只能够用于某个实体的某个特定应用的请求,这类请求的名称中会包含被应用到的实体的名称。例如SendEmailRequest请求,就是只能够用于电子邮件Email这个实体的发送邮件这个操作上,例如GenerateQuoteFromOpportunityRequest请求,只能够用于基于商机创建报价单的操作中。
非特定实体请求,例如CreateRequest请求,那么可以利用该请求,创建客户实例,也可以创建联系人实例等等其他的创建操作都可以使用CreateRequest请求。
通用请求,这类请求和实体没有什么关系,是为了完成一些其他的操作而准备的,例如WhoAmIRequest,是为了向服务器发起请求以确定当前登录者的身份。
SDK中已经将请求、响应封装好了,一共提供了200多个请求,这么多的请求,不可能都记下来,那么在需要使用的时候,翻阅SDK,查看需要使用的请求的成员,以了解如何设置一个请求,以及对相应的响应进行处理。
下面只是举一个简单的样例代码,说明大致的写法,各位同学要根据自己的实际情况进行具体分析。样例代码是设置一个分派请求AssignRequest对象。AssignRequest请求的主要属性包括有:
名称 |
说明 |
Assignee |
设置/获取实例的新负责人或者负责团队. |
Target |
设置/获取带分派的实例. |
AssignRequest属性如此,那么实例化的代码就如下所示:
1 //实例化AssignRequest对象,并设置Assignee苏醒以及Target属性,_therUserId是一个用户的GUID,_accountId是一个客户记录的GUID
2 AssignRequest assign = new AssignRequest
3 {
4 Assignee = new EntityReference(“systemuser”, _otherUserId),
5 Target = new EntityReference(“account”, _accountId)
6 };
7
8 // 执行请求
9 AssignResponse respose = (AssignResponse)_service.Execute(assign);
如此,即完成了将主键值为_accountId的客户记录分派给了用户_otherUserId。