gpt4 book ai didi

c# - CRM 2011 从电子邮件抄送列表中删除事件方

转载 作者:行者123 更新时间:2023-11-30 21:40:40 24 4
gpt4 key购买 nike

如何通过插件从 CRM 2011 的电子邮件抄送字段中删除事件方?

到目前为止,我已经完成了,但我仍然无法做到这一点。我的问题是电子邮件路由器在抄送字段中复制了具有相同电子邮件地址的联系人。我们建议删除联系人重复数据是最好的解决方案,但该解决方案尚未被接受。因此,目前,我们需要能够从电子邮件抄送字段中删除事件方,并将其替换为未解析的电子邮件地址。

有什么想法吗?

Email email = crmService.Retrieve(Email.EntityLogicalName, emailId, new Microsoft.Xrm.Sdk.Query.ColumnSet(true)).ToEntity<Email>(); //Do not use ColumnSet(true)
List<ActivityParty> ccPartyList = email.Cc.ToList<ActivityParty>();
List<string> ccEmailAddresses = new List<string>();

foreach (ActivityParty ap in ccPartyList)
{
ccEmailAddresses.Add(ap.AddressUsed);
}

List<string> dedupedCCEmailAddresses = ccEmailAddresses.Distinct().ToList();
List<string> emailAddressToBeRemoved = new List<string>();


//Check for each unique email addresses, how many records are there
foreach (string emailAddress in dedupedCCEmailAddresses)
{
int count = ccPartyList.Count(ap => ap.AddressUsed.Equals(emailAddress, StringComparison.InvariantCultureIgnoreCase));
if (count > 1) //Same email address; Multiple Records
{
emailAddressToBeRemoved.Add(emailAddress);
}
}

//Remove ALL Activity Party from the List
foreach (string emailAddress in emailAddressToBeRemoved)
{
ccPartyList.RemoveAll(ap => ap.AddressUsed.Equals(emailAddress, StringComparison.InvariantCultureIgnoreCase));
ActivityParty unResolvedEmailAddress = new ActivityParty();
unResolvedEmailAddress.AddressUsed = emailAddress;
ccPartyList.Add(unResolvedEmailAddress);
}

Email emailToUpdate = new Email();
emailToUpdate.Id = emailId;
emailToUpdate.Cc = ccPartyList;
crmService.Update(emailToUpdate);

我现在用以下代码更新了它,其中我删除了所有 CC 方。

if (localContext == null)
{
throw new ArgumentNullException("localContext");
}

IPluginExecutionContext context = localContext.PluginExecutionContext;
IOrganizationService service = localContext.OrganizationService;
tracingService = localContext.TracingService;

Email emailFromTarget = (context.InputParameters.Contains("Target")
&& context.InputParameters["Target"] is Entity)
?
((Entity)context.InputParameters["Target"]).ToEntity<Email>() : null;

Entity email = service.Retrieve(Email.EntityLogicalName, emailFromTarget.Id, new ColumnSet("cc"));

EntityCollection cc = email.GetAttributeValue<EntityCollection>("cc");
if (cc != null)
{
cc.Entities.ToList().ForEach(party =>
{
cc.Entities.Remove(party);
});
}

email["cc"] = cc;
service.Update(email);

甚至,然后 CC 字段继续保持数据创建后。

我正在 Post Create 插件中执行此操作。那样不是删除它们吗?我必须将其作为工作流/CWA 来执行吗?

最佳答案

不是后期操作,而是在创建插件的预操作中注册它,并从目标实体中删除 dupe CC partylist。这会起作用。

关于c# - CRM 2011 从电子邮件抄送列表中删除事件方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44388069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com