【发布时间】:2023-03-24 12:03:01
【问题描述】:
我在 CRM 中有一个场景,我需要使用来自外部 sql 数据库表的值更新多个帐户值(文本字段和选项集)。我该如何使用执行多个请求来执行此操作。要求是将 CRM 中的所有帐户数据与来自 sql 表的 ERP 数据同步。这个过程需要自动化,所以我选择使用每天运行的 Windows 服务来更新外部 sql 表中标记为更新的帐户。我正在努力寻找最好的方法,我在 DEV 上的控制台应用程序中测试了这个想法,下面是我的解决方案代码。我的问题是如何使用 ExecuteMultipleRequest 请求更好地做到这一点。
public static void UpdateAllCRMAccountsWithEmbraceAccountStatus(IOrganizationService service, CRM_Embrace_IntegrationEntities3 db)
{
List<C_Tarsus_Account_Active_Seven__> crmAccountList = new List<C_Tarsus_Account_Active_Seven__>();
//Here I get the list from Staging table
var crmAccounts = db.C_Tarsus_Account_Active_Seven__.Select(x => x).ToList();
foreach (var dbAccount in crmAccounts)
{
CRMDataObjectFour modelObject = new CRMDataObjectFour()
{
ID = dbAccount.ID,
Account_No = dbAccount.Account_No,
Account_Name = dbAccount.Account_Name,
Account_Status = Int32.Parse(dbAccount.Account_Status.ToString()),
Country = dbAccount.Country,
Terms = dbAccount.Terms
};
}
var officialDatabaseList = crmAccounts;
//Here I query CRM to
foreach (var crmAcc in officialDatabaseList)
{
QueryExpression qe = new QueryExpression();
qe.EntityName = "account";
qe.ColumnSet = new ColumnSet("accountnumber", "new_embraceaccountstatus");
qe.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);
qe.Criteria.AddCondition("accountnumber", ConditionOperator.NotIn, "List of acconts for example"
);
EntityCollection response = service.RetrieveMultiple(qe);
//Here I update the optionset value
foreach (var acc in response.Entities)
{
if (acc.Attributes["accountnumber"].ToString() == crmAcc.Account_No)
{
if (acc.Contains("new_embraceaccountstatus"))
{
continue;
}
else
{
acc.Attributes["new_embraceaccountstatus"] = new OptionSetValue(Int32.Parse(crmAcc.Account_Status.ToString()));
}
service.Update(acc);
}
}
}
}
我知道这可能不是正确的方法,请告诉我如何使用 ExecuteMultipleRequest 或完全不同的解决方案。
【问题讨论】:
标签: c# sql dynamics-crm-2013