我正在创建一个插件,触发自定义活动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();
}
但这不起作用,我认为ent变量不包含任何属性。
我也尝试使用ActivityParty进行编码,但也没有运气。
我希望你们中的某个人可以帮助我。
谢谢!
答案 0 :(得分:6)
Recipients
是ActivityParty
的列表,而不是联系人,帐户,....
因此,您必须阅读其PartyId
EntityReference partyId = ent.GetAttributeValue<EntityReference>("partyid");
使用此信息,您必须查找与此partyID引用的记录。它可以是联系人,帐户,系统用户,...... 你会得到这个信息
var partyType = partyId.LogicalName;
然后您可以检索此记录的记录以便读取该号码。
答案 1 :(得分: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;
...
}