C# ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updat
ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updateContent.Attributes.Add(“primarycontactid”,新的EntityReference(“contact”,substanceContact.GetAttributeValue(“primarycontactid”).Id)); //如果(!masterAccount.Contains(“parentaccountid”)&次级account.Contains(“parentaccountid”)) //updateContent.Attributes.Add(“parentaccountid”,subjectAccount.Attributes[“parentaccountid”]); 如果(!masterAccount.Contains(“新首字母缩写”)&&substanaccount.Contains(“新首字母缩写”)) updateContent.Attributes.Add(“new_首字母缩略词”,substanceAccount.Attributes[“new_首字母缩略词]); 如果(!masterAccount.Contains(“新类别”)和&subsideraccount.Contains(“新类别”)) updateContent.Attributes.Add(“新类别”,substanceAccount.Attributes[“新类别”]); 如果(!masterAccount.Contains(“new_sortname”)和&substanaccount.Contains(“new_sortname”)) updateContent.Attributes.Add(“new_sortname”,substanceAccount.Attributes[“new_sortname”]); 如果(!masterAccount.Contains(“新成员类型”)和&substanaccount.Contains(“新成员类型”)) updateContent.Attributes.Add(“new_membertype”,substanceAccount.Attributes[“new_membertype]”); 如果(!masterAccount.Contains(“新基础类型”)和&substanaccount.Contains(“新基础类型”)) updateContent.Attributes.Add(“new_foundationtype”,substanceAccount.Attributes[“new_foundationtype”]); 如果(!masterAccount.Contains(“新焦点区域”)&次级account.Contains(“新焦点区域”)) updateContent.Attributes.Add(“new_focusrea”,substanceAccount.Attributes[“new_focusrea”]); 如果(!masterAccount.Contains(“new_focusrea2”)&次级account.Contains(“new_focusrea2”)) updateContent.Attributes.Add(“new_focusrea2”,substanceAccount.Attributes[“new_focusrea2]”); 如果(!masterAccount.Contains(“new_focusrea3”)&次级account.Contains(“new_focusrea3”)) updateContent.Attributes.Add(“new_focusrea3”,substanceAccount.Attributes[“new_focusrea3]”); 如果(!masterAccount.Contains(“new_100aging”)&次级account.Contains(“new_100aging”)) updateContent.Attributes.Add(“new_100aging”,substanceAccount.Attributes[“new_100aging”]); 如果(!masterAccount.Contains(“新成员”)和&subsideraccount.Contains(“新成员”)) updateContent.Attributes.Add(“new_isamber”,substanceAccount.Attributes[“new_isamber]”); //联络资料组 如果(!masterAccount.Contains(“address1_name”)&次级account.Contains(“address1_name”)) updateContent.Attributes.Add(“address1_name”,substanceAccount.Attributes[“address1_name]”); 如果(!masterAccount.Contains(“address1_composite”)&次级account.Contains(“address1_composite”)) updateContent.Attributes.Add(“address1_composite”,substanceAccount.Attributes[“address1_composite”]); 如果(!masterAccount.Contains(“电话1”)和&substanaccount.Contains(“电话1”)) updateContent.Attributes.Add(“电话1”,substanceAccount.Attributes[“电话1”]); 如果(!masterAccount.Contains(“websiteurl”)&次级account.Contains(“websiteurl”)) updateContent.Attributes.Add(“websiteurl”,substanceAccount.Attributes[“websiteurl”]); 如果(!masterAccount.Contains(“emailaddress1”)&次级account.Contains(“emailaddress1”)) updateContent.Attributes.Add(“emailaddress1”,substanceAccount.Attributes[“emailaddress1”]); //详细信息选项卡 //联系人首选项部分 如果(!masterAccount.Contains(“preferredcontactmethodcode”)&次级account.Contains(“preferredcontactmethodcode”)) updateContent.Attributes.Add(“preferredcontactmethodcode”,substanceAccount.Attributes[“preferredcontactmethodcode]”); 如果(!masterAccount.Contains(“donotphone”)&次级account.Contains(“donotphone”)) updateContent.Attributes.Add(“donotphone”,substanceAccount.Attributes[“donotphone”]); 如果(!masterAccount.Contains(“donotpostalmail”)&次级account.Contains(“donotpostalmail”)) updateContent.Attributes.Add(“donotpostalmail”,substanceAccount.Attributes[“donotpostalmail”]); //市场部 如果(!masterAccount.Contains(“donotsendmm”)&次级account.Contains(“donotsendmm”)) updateContent.Attributes.Add(“donotsendmm”,substanceAccount.Attributes[“donotsendmm”]); 如果(!masterAccount.Contains(“emailaddress1”)&次级account.Contains(“emailaddress1”)) updateContent.Attributes.Add(“emailaddress1”,substanceAccount.Attributes[“emailaddress1”]); 如果(!masterAccount.Contains(“传真”)和&substanaccount.Contains(“传真”)) updateContent.Attributes.Add(“fax”,substanceAccount.Attributes[“fax”]); //说明部分 如果(!masterAccount.Contains(“preferredcontactmethodcode”)&次级account.Contains(“preferredcontactmethodcode”)) updateContent.Attributes.Add(“preferredcontactmethodcode”,substanceAccount.Attributes[“preferredcontactmethodcode]”); //联络科 如果(!masterAccount.Contains(“新格兰特合同”)和&substanaccount.Contains(“新格兰特合同”)) updateContent.AttributesC# ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updat,c#,dynamics-crm,crm,microsoft-dynamics,faultexception,C#,Dynamics Crm,Crm,Microsoft Dynamics,Faultexception,ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updateContent.Attributes.Add(“primarycontactid”,新的EntityReference(“contact”,substanceContact.GetAttributeValue(“primarycontacti
if (!masterAccount.Contains("new_membership")
&& subOrdinateAccount.Contains("new_membership"))
{
updateContent.Attributes.Add("new_membership", subOrdinateAccount.Attributes["new_membership"]);
}
MergeResponse mergeRes = (MergeResponse)xrm.Execute(merge);
using System;
using System.Data.Entity;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Xml.Linq;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.Query;
using Xrm;
using Microsoft.Crm.Sdk.Messages;
using System.Threading;
namespace Duplicate_Account_Merge
{
class Program
{
static void Main(string[] args)
{
XrmServiceContext xrm = new XrmServiceContext("Xrm");
Guid masterAccountId;
Guid subOrdinateAccountId;
//Create the target for the request.
EntityReference target = new EntityReference();
// Query for Accounts
var accounts = (from a in xrm.AccountSet.ToList()
where a.StateCode != 1 && a.Name != null
group a by a.Name into g
where g.Count() > 1
from a2 in xrm.AccountSet.ToList()
where a2.StateCode != 1
where a2.Name == g.Key
orderby a2.Name, a2.CreatedOn descending
select new
{
a2.Name,
//a2.LastName,
//a2.EMailAddress1,
a2.AccountId,
a2.CreatedOn
}).ToList();
int count = 0;
int mergeCount = 0;
while (accounts.Count != 0 && accounts.Count != 1)
{
if (accounts.Count > 1 && accounts[0].Name == accounts[1].Name)
{
masterAccountId = accounts[0].AccountId.Value;
subOrdinateAccountId = accounts[1].AccountId.Value;
//target,Id is the GUID of the contact that is being merged into.
//LogicalName is the type of the entity being merged to, as a string
target.Id = masterAccountId;
target.LogicalName = "account";
//Create the request.
MergeRequest merge = new MergeRequest();
// SubordinateId is the GUID of the contact merging.
merge.SubordinateId = subOrdinateAccountId;
merge.Target = target;
merge.PerformParentingChecks = false;
Entity updateContent = new Entity("account");
var accountcolumnset = new ColumnSet(
"name",
"accountnumber",
"new_membership",
//"parentaccountid",
"new_acronym",
"new_category",
"new_sortname",
"new_membertype",
"new_foundationtype",
"new_focusarea",
"new_focusarea2",
"new_focusarea3",
"new_100aging",
"new_isamember",
// Contacts section
"new_grantscontact",
"new_membershipcontact",
"msa_managingpartnerid",
"primarycontactid",
// Contact Information section
"address1_name",
"address1_composite",
"telephone1",
"websiteurl",
"emailaddress1",
// Details tab
// Contact Preferences section
"preferredcontactmethodcode",
"donotphone",
"donotpostalmail",
// Marketing section
"donotsendmm",
"lastusedincampaign",
// Description section
"description"
);
// Get Master Account Primary Contact,Website,Phone,Fax,Email
Entity masterAccount = xrm.Retrieve("account", masterAccountId, accountcolumnset);
// Get Subordinate Account Primary Contact,Website,Phone,Fax,Email
Entity subOrdinateAccount = xrm.Retrieve("account", subOrdinateAccountId, accountcolumnset);
// UPDATE THESE IFS WITH FIELD VALUES FROM THE COLUMN SET
// If these fields are populated on the Subordinate Account and NOT populated on the Master Account, update the Master record with values from the suboordinate.
if (!masterAccount.Contains("accountnumber") && subOrdinateAccount.Contains("accountnumber"))
updateContent.Attributes.Add("accountnumber", subOrdinateAccount.Attributes["accountnumber"]);
if (!masterAccount.Contains("new_membership") && subOrdinateAccount.Contains("new_membership"))
updateContent.Attributes.Add("new_membership", subOrdinateAccount.Attributes["new_membership"]);
//updateContent.Attributes.Add("primarycontactid", new EntityReference("contact", subOrdinateContact.GetAttributeValue<EntityReference>("primarycontactid").Id));
//if (!masterAccount.Contains("parentaccountid") && subOrdinateAccount.Contains("parentaccountid"))
// updateContent.Attributes.Add("parentaccountid", subOrdinateAccount.Attributes["parentaccountid"]);
if (!masterAccount.Contains("new_acronym") && subOrdinateAccount.Contains("new_acronym"))
updateContent.Attributes.Add("new_acronym", subOrdinateAccount.Attributes["new_acronym"]);
if (!masterAccount.Contains("new_category") && subOrdinateAccount.Contains("new_category"))
updateContent.Attributes.Add("new_category", subOrdinateAccount.Attributes["new_category"]);
if (!masterAccount.Contains("new_sortname") && subOrdinateAccount.Contains("new_sortname"))
updateContent.Attributes.Add("new_sortname", subOrdinateAccount.Attributes["new_sortname"]);
if (!masterAccount.Contains("new_membertype") && subOrdinateAccount.Contains("new_membertype"))
updateContent.Attributes.Add("new_membertype", subOrdinateAccount.Attributes["new_membertype"]);
if (!masterAccount.Contains("new_foundationtype") && subOrdinateAccount.Contains("new_foundationtype"))
updateContent.Attributes.Add("new_foundationtype", subOrdinateAccount.Attributes["new_foundationtype"]);
if (!masterAccount.Contains("new_focusarea") && subOrdinateAccount.Contains("new_focusarea"))
updateContent.Attributes.Add("new_focusarea", subOrdinateAccount.Attributes["new_focusarea"]);
if (!masterAccount.Contains("new_focusarea2") && subOrdinateAccount.Contains("new_focusarea2"))
updateContent.Attributes.Add("new_focusarea2", subOrdinateAccount.Attributes["new_focusarea2"]);
if (!masterAccount.Contains("new_focusarea3") && subOrdinateAccount.Contains("new_focusarea3"))
updateContent.Attributes.Add("new_focusarea3", subOrdinateAccount.Attributes["new_focusarea3"]);
if (!masterAccount.Contains("new_100aging") && subOrdinateAccount.Contains("new_100aging"))
updateContent.Attributes.Add("new_100aging", subOrdinateAccount.Attributes["new_100aging"]);
if (!masterAccount.Contains("new_isamember") && subOrdinateAccount.Contains("new_isamember"))
updateContent.Attributes.Add("new_isamember", subOrdinateAccount.Attributes["new_isamember"]);
// Contact Information section
if (!masterAccount.Contains("address1_name") && subOrdinateAccount.Contains("address1_name"))
updateContent.Attributes.Add("address1_name", subOrdinateAccount.Attributes["address1_name"]);
if (!masterAccount.Contains("address1_composite") && subOrdinateAccount.Contains("address1_composite"))
updateContent.Attributes.Add("address1_composite", subOrdinateAccount.Attributes["address1_composite"]);
if (!masterAccount.Contains("telephone1") && subOrdinateAccount.Contains("telephone1"))
updateContent.Attributes.Add("telephone1", subOrdinateAccount.Attributes["telephone1"]);
if (!masterAccount.Contains("websiteurl") && subOrdinateAccount.Contains("websiteurl"))
updateContent.Attributes.Add("websiteurl", subOrdinateAccount.Attributes["websiteurl"]);
if (!masterAccount.Contains("emailaddress1") && subOrdinateAccount.Contains("emailaddress1"))
updateContent.Attributes.Add("emailaddress1", subOrdinateAccount.Attributes["emailaddress1"]);
// Details tab
// Contact Preferences section
if (!masterAccount.Contains("preferredcontactmethodcode") && subOrdinateAccount.Contains("preferredcontactmethodcode"))
updateContent.Attributes.Add("preferredcontactmethodcode", subOrdinateAccount.Attributes["preferredcontactmethodcode"]);
if (!masterAccount.Contains("donotphone") && subOrdinateAccount.Contains("donotphone"))
updateContent.Attributes.Add("donotphone", subOrdinateAccount.Attributes["donotphone"]);
if (!masterAccount.Contains("donotpostalmail") && subOrdinateAccount.Contains("donotpostalmail"))
updateContent.Attributes.Add("donotpostalmail", subOrdinateAccount.Attributes["donotpostalmail"]);
// Marketing section
if (!masterAccount.Contains("donotsendmm") && subOrdinateAccount.Contains("donotsendmm"))
updateContent.Attributes.Add("donotsendmm", subOrdinateAccount.Attributes["donotsendmm"]);
if (!masterAccount.Contains("emailaddress1") && subOrdinateAccount.Contains("emailaddress1"))
updateContent.Attributes.Add("emailaddress1", subOrdinateAccount.Attributes["emailaddress1"]);
if (!masterAccount.Contains("fax") && subOrdinateAccount.Contains("fax"))
updateContent.Attributes.Add("fax", subOrdinateAccount.Attributes["fax"]);
// Description section
if (!masterAccount.Contains("preferredcontactmethodcode") && subOrdinateAccount.Contains("preferredcontactmethodcode"))
updateContent.Attributes.Add("preferredcontactmethodcode", subOrdinateAccount.Attributes["preferredcontactmethodcode"]);
// Contacts section
if (!masterAccount.Contains("new_grantscontact") && subOrdinateAccount.Contains("new_grantscontact"))
updateContent.Attributes.Add("new_grantscontact", subOrdinateAccount.Attributes["new_grantscontact"]);
if (!masterAccount.Contains("new_membershipcontact") && subOrdinateAccount.Contains("new_membershipcontact"))
updateContent.Attributes.Add("new_membershipcontact", subOrdinateAccount.Attributes["new_membershipcontact"]);
if (!masterAccount.Contains("msa_managingpartnerid") && subOrdinateAccount.Contains("msa_managingpartnerid"))
updateContent.Attributes.Add("msa_managingpartnerid", subOrdinateAccount.Attributes["msa_managingpartnerid"]);
if (!masterAccount.Contains("primarycontactid") && subOrdinateAccount.Contains("primarycontactid"))
updateContent.Attributes.Add("primarycontactid", subOrdinateAccount.Attributes["primarycontactid"]);
merge.UpdateContent = updateContent;
// Execute the request.
MergeResponse mergeRes = (MergeResponse)xrm.Execute(merge);
count++;
mergeCount++;
Console.WriteLine("Merge #"
+ mergeCount
+ "\n"
+ "Master Account: "
+ accounts[0].Name
+ " "
+ accounts[0].AccountId
+ "\n"
+ "Child Account: "
+ accounts[1].Name
+ " "
+ accounts[1].AccountId);
accounts.RemoveAt(1);
}
else
{
if (accounts.Count > 2 && accounts.Count != 1 && accounts.Count != 0)
accounts.RemoveAt(0);
}
}
Console.ReadLine();
}
}
updateContent.Attributes.Add("new_membershipname", ((EntityReference)subOrdinateAccount.Attributes["new_membership"]).Name);