如何从插件中的PartyList获取联系人指南?

Thd*_*hdK 3 c# plugins dynamics-crm dynamics-crm-2011

我正在创建一个插件,触发自定义活动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<String>("subject");
Recipients = entity.GetAttributeValue<EntityCollection>("to");

for (int i = 0; i < Recipients.Entities.Count; i++)
{
  Entity ent= Recipients[i];

  string number = ent["MobilePhone"].ToString();    
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我认为ent变量不包含任何属性.

我也尝试使用ActivityParty进行编码,但也没有运气.

我希望你们中的某个人可以帮助我.

谢谢!

cce*_*lar 6

Recipients是一个列表ActivityParty,而不是联系人,帐户,.... 因此你必须阅读它PartyId

EntityReference partyId = ent.GetAttributeValue<EntityReference>("partyid");
Run Code Online (Sandbox Code Playgroud)

有了这些信息,您必须查找与此partyID引用的记录.它可以是联系人,帐户,系统用户......您将获得此信息

var partyType = partyId.LogicalName;
Run Code Online (Sandbox Code Playgroud)

然后,您可以检索此记录的记录以读取该数字.


Thd*_*hdK 6

这是我最终如何做到的:

EntityCollection Recipients;
Entity entity = (Entity) context.InputParameters["Target"];

IOrganizationServiceFactory serviceFactory 
  = (IOrganizationServiceFactory)serviceProvider.GetService(
    typeof(IOrganizationServiceFactory)); 
IOrganizationService service = serviceFactory
  .CreateOrganizationService(context.UserId); 

Content = entity.GetAttributeValue<String>("subject"); 
Recipients = entity.GetAttributeValue<EntityCollection>("to"); 

for (int i = 0; i < Recipients.Entities.Count; i++)
{
  ActivityParty ap = Recipients[i].ToEntity<ActivityParty>();
  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;
  ...
} 
Run Code Online (Sandbox Code Playgroud)