Как получить контактные руководства из PartyList в плагине? - PullRequest
3 голосов
/ 16 ноября 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();    
}

Но это не работает, я думаю, что переменная ent не содержит атрибутов.

Я тоже пытался кодировать с ActivityParty, но не удача.

Я надеюсь, что кто-то из вас может помочь мне с этим.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 17 ноября 2011

Вот как я наконец это сделал:

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;
  ...
} 
6 голосов
/ 16 ноября 2011

Recipients - это список ActivityParty, а не контактов, учетных записей, ....Поэтому вы должны прочитать его PartyId

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

С этой информацией вы должны искать запись, которая ссылается на этот partyID.Это может быть контакт, учетная запись, системный пользователь, ... Вы получите эту информацию через

var partyType = partyId.LogicalName;

Затем вы сможете извлечь запись из этой записи, чтобы прочитать число.

...