C# 程序无法使用C更新Dynamics CRM中的完整帐户列表#
我有下面的代码片段,它从CRM中获取所有活动帐户,然后更新每个帐户的一个隐藏字段。CRM中大约有45000个活动帐户,这就是为什么我使用分页并从每页抓取5000条记录的原因。它从第1页开始更新记录,抓取前5000条记录,但挂起第3100个帐户,不再移动。我来这里是想征求你的意见/建议,以便做必要的事。TIAC# 程序无法使用C更新Dynamics CRM中的完整帐户列表#,c#,dynamics-crm-2011,account,C#,Dynamics Crm 2011,Account,我有下面的代码片段,它从CRM中获取所有活动帐户,然后更新每个帐户的一个隐藏字段。CRM中大约有45000个活动帐户,这就是为什么我使用分页并从每页抓取5000条记录的原因。它从第1页开始更新记录,抓取前5000条记录,但挂起第3100个帐户,不再移动。我来这里是想征求你的意见/建议,以便做必要的事。TIA string temp1 = string.Empty; QueryExpression qe = new QueryExpression { EntityName = "accou
string temp1 = string.Empty;
QueryExpression qe = new QueryExpression
{
EntityName = "account",
ColumnSet = new ColumnSet("name", "new_latestpolicydate","new_latestpolicydate_hidden"),
Criteria = new FilterExpression
{
Conditions = {
new ConditionExpression("statecode",ConditionOperator.Equal,0)
}
}
};
qe.PageInfo = new PagingInfo();
qe.PageInfo.Count = 5000;
qe.PageInfo.PageNumber = 1;
qe.PageInfo.PagingCookie = null;
while (true)
{
EntityCollection ec = service.RetrieveMultiple(qe);
Console.WriteLine("Page no:\t{0}\nTotal Active Accounts:\t{1}",qe.PageInfo.PageNumber, ec.Entities.Count);
foreach (Entity item in ec.Entities)
{
if (item.Attributes.Contains("new_latestpolicydate"))
{
DateTime date;
date = Convert.ToDateTime(item.Attributes["new_latestpolicydate"]);
temp1 = date.Date.ToString("d");
item.Attributes["new_latestpolicydate_hidden"] = temp1;
}
if (temp1 != string.Empty)
{
service.Update(item);
Console.Write("\r{0} are accounts updated", i++);
}
}
if (ec.MoreRecords)
{
qe.PageInfo.PageNumber++;
qe.PageInfo.PagingCookie = ec.PagingCookie;
}
else
{ break; }
}
你的代码看起来不错。我有两个建议:
我调试了我的代码,发现当它为第二页记录时,连接过期,它将此异常
HTTP请求发送到'https://XRMServices/2011/Organization.svc'被中止
不幸的是,我从未遇到过上述类型的异常,因此除了提到之外,我不知道其他方法可以帮助您问题解决了。事实上,有一个插件会在帐户更新后立即执行。所以,禁用插件就可以完成工作。@MohsIntest您可以通过简单的SQL查询来完成这些任务,这太快了,如果您面临这样的事情,以后不需要编写这么长的查询表达式,因为更新需要太长的时间。等等,您不是建议我们用SQL进行更新,是吗?至于最初的问题,您可能在与CRM的连接超时方面有问题,您需要刷新令牌IIRC。