如何在插件中从PartyList中获取联系人Guids?

3
我正在制作一个插件,该插件会在自定义活动SMS的创建消息时触发。 这个插件将使用第三方短信服务提供商发送实际的短信。
因此,我需要获取SMS活动的"To"字段中每个联系人的手机号码。 这是一种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();    
}

但是这并没有起作用,我认为 ent 变量不包含任何属性。

我也尝试过使用 ActivityParty 进行编码,但也没有成功。

希望你们中的某个人能帮助我解决这个问题。

谢谢!

2个回答

7

Recipients是一个ActivityParty列表,不是联系人、账户等列表。 因此你必须阅读它的PartyId

EntityReference partyId = ent.GetAttributeValue<EntityReference>("partyid");

通过这些信息,您需要查找与此partyID相关的记录。这可能是联系人、账户、系统用户等等。 您可以通过以下方式获得这些信息。

var partyType = partyId.LogicalName;

然后您可以检索该记录以读取数字。

谢谢回复。我尝试使用ActivityParty,但它也从未奏效过。我需要在代码中做什么修改?
  1. ActivityParty收件人; (或ActivityParty[])?
  2. Recipients = entity.GetAttributeValue<ActivityParty>("to"); (或ActivityParty[])? 当我这样做时,我会得到一个错误,无法将EntityCollection转换为ActivityParty。
当我使用entitycollection类型,并将集合中的每个对象强制转换为activityparty时,我会出现错误:“无法将类型'Microsoft.Xrm.Sdk.Entity'的对象强制转换为类型'ActivityParty'。”我还在做错什么?
- ThdK

7
这是我最终的做法:
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;
  ...
} 

我在我的插件中使用了早期绑定类型,同样地,获取电子邮件的To字段也存在问题。像这里所示更改代码为晚期绑定类型解决了我的问题。 - Sal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接