【发布时间】:2012-11-30 01:05:41
【问题描述】:
当电子邮件发送到队列并且在 CRM 中存在与“发件人”电子邮件关联的联系人时,在将电子邮件提升为电子邮件活动时,系统会自动使用联系人信息填写“发件人”字段。但是,如果 CRM 中也存在具有相同电子邮件的用户,则系统始终会选择系统用户而不是联系人。如果存在带有电子邮件的联系人,我需要覆盖此行为以始终接听联系人。
我为事件 Create for email 创建了一个操作后插件(也尝试了一个操作前插件),试图覆盖 From 字段。问题是,它不起作用。当我调试插件时,它会安静地通过分配而没有任何错误,然后同一个插件再次为同一个电子邮件触发。然后再次。又一次。
当我尝试创建新电子邮件并使用我尝试用于触发事件的实体的相同 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;
更新:所以我现在在 Pre-validation 上注册了插件,当路由器创建电子邮件活动时它不会触发,但是当用户在 CRM 中创建电子邮件时会触发它...
【问题讨论】:
标签: plugins workflow dynamics-crm-2011