Изменение поля От для электронной почты в плагине - PullRequest
1 голос
/ 11 августа 2011

Когда электронное письмо отправляется в очередь, и в CRM есть контакт, связанный с электронным письмом «От», после преобразования электронного письма в действие электронной почты система автоматически заполняет поле «От» контактной информацией.Однако, если в CRM также существует пользователь с таким же адресом электронной почты, то система всегда выбирает пользователя системы вместо контакта.Мне нужно переопределить это поведение, чтобы ВСЕГДА забрать контакт, если контакт с электронной почтой существует.

Я создал плагин после операции (также попробовал плагин перед операцией) для события Createдля электронной почты, пытаясь переопределить поле От.Проблема в том, что это не работает.Когда я отлаживаю плагин, он без ошибок проходит задание, а затем тот же плагин снова запускается для того же электронного письма.И опять.И снова.

Когда я вместо этого пытаюсь создать новое электронное письмо и использовать тот же ActivityList [], который я пытался использовать для объекта, вызвавшего событие, это работает.Кажется, проблема в том, что CRM не позволяет изменить поле From из плагина, или я что-то не так делаю?Если это ограничение применяется CRM, есть ли способ обойти его?

Мой код указан ниже:

var email = ((Entity)context.InputParameters["Target"]).ToEntity<Email>();

...

var oldFrom = ((EntityCollection)email.Attributes["from"]).Entities;
List<ActivityParty> newFrom = new List<ActivityParty>(); 
foreach (Entity party in oldFrom)
{
   EntityReference entRef = (EntityReference)party.Attributes["partyid"];
   if (entRef.LogicalName == SystemUser.EntityLogicalName)
      user = userLogic.Get(new Guid(entRef.Id.ToString()));
   if (user == null) return;
   string emailAddress = user.InternalEMailAddress;
   Contact contact = contactLogic.LookupPASIndividual("", emailAddress);
   if (contact != null)
   { newFrom.Add(new ActivityParty() {PartyId = new EntityReference(Contact.EntityLogicalName, contact.ContactId.Value) });
   }
   else
      return;
}
email.From = newFrom;

Обновление: Итак, я зарегистрировал плагин для предварительной проверки сейчас, и он не запускается, когда маршрутизатор создает активность электронной почты, он срабатывает, когда пользователь создает электронную почту в CRM, хотя ...

Ответы [ 3 ]

0 голосов
/ 15 августа 2011

В итоге я использовал обходной путь: создал асинхронное пост-событие, которое связывает активность электронной почты с контактом, если контакт с тем же адресом электронной почты существует, оставив пользователя, связанного с электронной почтой, в поле «От».

0 голосов
/ 24 августа 2012

У меня похожая проблема.В этой статье здесь говорится, что это проблема с ActivityParty и где в конвейере вызывается событие, однако я пока не заставил его работать для меня.

0 голосов
/ 13 августа 2011

Проблема в том, что вы не меняете адрес электронной почты, который обрабатывается вообще.

var email = ((Entity)context.InputParameters["Target"]).ToEntity<Email>();

Эта строка преобразует запись, которая в данный момент обрабатывается, в объект типа email. Вы изменяете запись, которая не входит в область действия операции. Вы должны изменить From цели (либо напрямую, либо написать ее обратно).

Для этапов обработки: взгляните на Конвейер выполнения событий . Предварительная проверка для вашей задачи рано. Я не совсем уверен, когда будет выполнено разрешение адресов, но я постараюсь выполнить ваше преобразование Pre-Create.

...