Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CRM 2011从电子邮件抄送列表中删除活动方_C#_Plugins_Dynamics Crm_Dynamics Crm 2011_Microsoft Dynamics - Fatal编程技术网

C# CRM 2011从电子邮件抄送列表中删除活动方

C# CRM 2011从电子邮件抄送列表中删除活动方,c#,plugins,dynamics-crm,dynamics-crm-2011,microsoft-dynamics,C#,Plugins,Dynamics Crm,Dynamics Crm 2011,Microsoft Dynamics,如何通过插件从CRM 2011中的电子邮件抄送字段中删除活动方 到目前为止,我已经做到了,但我还没有做到这一点。我的问题是,电子邮件路由器在抄送字段中复制具有相同电子邮件地址的联系人。我们建议,消除重复的接触是最好的解决方案,但该解决方案尚未被接受。因此,现在,我们需要能够从email CC字段中删除活动方,并将其替换为未解析的电子邮件地址 有什么想法吗 Email email = crmService.Retrieve(Email.EntityLogicalName, emailId, new

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

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

有什么想法吗

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);
Email Email=crmService.Retrieve(Email.EntityLogicalName,emailId,new Microsoft.Xrm.Sdk.Query.ColumnSet(true)).ToEntity()//不使用列集(true)
List ccPartyList=email.Cc.ToList();
List ccEmailAddresses=新列表();
foreach(ccPartyList中的ActivityParty ap)
{
ccEmailAddresses.Add(ap.AddressUsed);
}
List duplicatedccemailaddresses=ccEmailAddresses.Distinct().ToList();
List emailAddressToBeRemoved=新列表();
//检查每个唯一的电子邮件地址,有多少条记录
foreach(重复数据中的字符串emailAddress)
{
int count=ccPartyList.count(ap=>ap.AddressUsed.Equals(emailAddress,StringComparison.InvariantCultureIgnoreCase));
if(count>1)//相同的电子邮件地址;多条记录
{
emailAddressToBeRemoved.Add(emailAddress);
}
}
//从列表中删除所有活动方
foreach(emailAddressToBeRemoved中的字符串emailAddress)
{
RemoveAll(ap=>ap.AddressUsed.Equals(emailAddress、StringComparison.InvariantCultureIgnoreCase));
ActivityParty UnsolvedEmailAddress=新ActivityParty();
UnsolvedEmailAddress.AddressUsed=电子邮件地址;
ccPartyList.Add(unsolvedEmailAddress);
}
Email emailToUpdate=新电子邮件();
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);
if(localContext==null)
{
抛出新ArgumentNullException(“localContext”);
}
IPluginExecutionContext context=localContext.PluginExecutionContext;
IOOrganizationService=localContext.OrganizationService;
tracingService=localContext.tracingService;
电子邮件emailFromTarget=(context.InputParameters.Contains(“目标”)
&&context.InputParameters[“Target”]是实体)
? 
((实体)context.InputParameters[“Target”]).ToEntity():null;
实体email=service.Retrieve(email.EntityLogicalName、emailFromTarget.Id、新列集(“cc”);
EntityCollection cc=email.GetAttributeValue(“cc”);
如果(cc!=null)
{
cc.Entities.ToList().ForEach(参与方=>
{
cc.实体。移除(一方);
});
}
电子邮件[“抄送”]=抄送;
服务更新(电子邮件);
即使如此,CC字段仍会继续保留创建后的数据


我在创建插件后做这件事。是这样吗?不是要把它们去掉吗?我是否必须将其作为工作流/CWA来执行?

您建议的代码有什么问题

// Get your cc field
var cc = email.GetAttributeValue<EntityCollection>("cc");

// Iterate through the collection. If there's a partyId, it's a party list, so remove it
cc.Entities.ToList().ForEach(entity =>
{
    var partyId = entity.GetAttributeValue<EntityReference>("partyid");
    if (partyId != null)
        cc.Entities.Remove(entity);
}

// Update your email
email["cc"] = cc;
service.Update(email);
//获取您的cc字段
var cc=email.GetAttributeValue(“cc”);
//遍历集合。如果有partyId,它就是一个party列表,所以请删除它
cc.Entities.ToList().ForEach(entity=>
{
var partyId=entity.GetAttributeValue(“partyId”);
if(partyId!=null)
cc.实体。删除(实体);
}
//更新您的电子邮件
电子邮件[“抄送”]=抄送;
服务更新(电子邮件);

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

我现在用完整的代码示例更新了问题。当尝试从插件中执行时,上述逻辑不起作用,但在控制台应用程序中可以正常工作。为什么要进行post创建?您尝试过pre吗操作?@ArunVinoth是的,我做了预操作。我会在一点时间后发布完整的代码。@ArunVinoth你能把它写下来作为答案,这样我就可以把它标记为接受了吗?