MS CRM 2011中PartyList类型字段的实例化
在MS CRM中,有一组实体,其类别是“活动”实体,其中包括有电子邮件、电话联络、传真、新建、约会、定期约会、任务等实体,这一类实体的作用有如下几点:
第一,每一种活动实体,代表了组织内部员工之间以及内部员工与客户之间的沟通渠道;
第二,每一个活动实体的实例,代表了组织内部员工的工作内容以及完成工作内容的方式;
可见,活动实体是非常重要的实体,使用这些实体,将割裂的、分散于各处的客户数据、销售数据、市场数据等数据串联起来、流动起来。可以说,这些活动实体是纽带、是桥梁。
在项目实施过程中,不可避免的,可能需要使用代码创建某一类活动实体的实例。而活动实体很大的一个特点就是,其中的PartyList类型字段的创建、更新等维护工作。
PartyList类型,代表了一个多方参与的概念,举例来说,就是电子邮件中的“收件人”字段,换言之,可以在这个字段中,选择一个实体或者多个实体的多个实例,也就是一个可以有多个lookup值的字段。
在SDK中,对PartyList类型字段的操作有相应的代码,本文中的代码,是以晚绑定方式,介绍如何维护PartyList类型字段。
在SDK的“New Types in Microsoft Dynamics CRM SDK”部分,对于PartyList类型的介绍是“EntityCollection”或者“ActivityParty[]”类型。EntityCollection类,是Microsoft.Xrm.Sdk命名空间中的一个类,用于代表一个实体集合,其构造函数有两个:
EntityCollection();
EntityCollection(IList<Entity>);
可见,EntityCollection实体内部也是对集合实体进行封装后, 为了开发方便而构造出来的一个实体。
那么,在构造PartyList类型的属性的EntityCollection实例时,传入什么样的Entity实例呢?在SDK中,PartyList类型的介绍时,已经说明,是EntityCollection实例或者ActivityParty[]数组,可见,构造EntityCollection实例时,传入的IList<Entity>中的Entity应该是ActivityParty实体的实例。
那么,ActivityParty又是什么样子的呢?从SDK中,可以看到该类型的属性中,非常重要的就是PartyId,该属性的数据类型是Lookup,代表了PartyList中的一个参与方实例,而多个参与方实例,构成了一个PartyList类型的实例。既然PartyId是Lookup类型的,那么就使用EntityReference去构造。
由上面的分析,最后可以形成的代码样例如下:
1 Entity email = new Entity("email");
2 email["subject"] = "test";
3 Entity toActivityParty = new Entity("activityparty");
4 toActivityParty["partyid"] = new EntityReference("systemuser", new Guid("7CB98851-7ECC-E011-90FB-782BCB24D1E0"));
5 EntityCollection to = new EntityCollection(new List<Entity>() { toActivityParty });
6 email["to"] = to;
7 email["description"] = "haha";
8 orgService.Create(email);
如此,即可创建一个电子邮件的实例,该Email的接收人,就是主键值为"7CB98851-7ECC-E011-90FB-782BCB24D1E0"的系统用户。