如何从插件中的PartyList获取联系人指南?
我正在创建一个插件,触发自定义活动SMS的创建消息。 这些插件将使用第三方短信服务提供商发送实际的短信。
因此,我需要在SMS活动的“收件人”字段中获取每个联系人的手机号码。 这是一个类型的字段:PartyList。
我目前正在使用以下代码:
EntityCollection Recipients; Entity entity = (Entity) context.InputParameters["Target"]; IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); Content = entity.GetAttributeValue("subject"); Recipients = entity.GetAttributeValue("to"); for (int i = 0; i < Recipients.Entities.Count; i++) { Entity ent= Recipients[i]; string number = ent["MobilePhone"].ToString(); }
但这不起作用,我认为ent变量不包含任何属性。
我也尝试使用ActivityParty进行编码,但也没有运气。
我希望你们中的某个人可以帮助我。
谢谢!
Recipients
是ActivityParty
的列表,而不是联系人,帐户,…. 因此,您必须阅读其PartyId
EntityReference partyId = ent.GetAttributeValue("partyid");
有了这些信息,您必须查找与此partyID有关的记录。 它可以是联系人,帐户,系统用户……您将获得此信息
var partyType = partyId.LogicalName;
然后,您可以检索此记录的记录以读取该数字。
这是我最终如何做到的:
EntityCollection Recipients; Entity entity = (Entity) context.InputParameters["Target"]; IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService( typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory .CreateOrganizationService(context.UserId); Content = entity.GetAttributeValue("subject"); Recipients = entity.GetAttributeValue("to"); for (int i = 0; i < Recipients.Entities.Count; i++) { ActivityParty ap = Recipients[i].ToEntity(); String contactid = ap.PartyId.Id.ToString(); Contact c = (Contact) service.Retrieve( Contact.EntityLogicalName, ap.PartyId.Id, new ColumnSet(new string[]{ "mobilephone" })); String mobilephone = c.MobilePhone; ... }