Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# 程序无法使用C更新Dynamics CRM中的完整帐户列表#_C#_Dynamics Crm 2011_Account - Fatal编程技术网

C# 程序无法使用C更新Dynamics CRM中的完整帐户列表#

C# 程序无法使用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

我有下面的代码片段,它从CRM中获取所有活动帐户,然后更新每个帐户的一个隐藏字段。CRM中大约有45000个活动帐户,这就是为什么我使用分页并从每页抓取5000条记录的原因。它从第1页开始更新记录,抓取前5000条记录,但挂起第3100个帐户,不再移动。我来这里是想征求你的意见/建议,以便做必要的事。TIA

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; }
    }

你的代码看起来不错。我有两个建议:

  • 在不立即更新记录的情况下尝试重写代码。仅在更新所有数据后才尝试检索所有记录
  • 对于这样的任务,我可以建议使用SSIS——它要容易得多。这种操作是免费的

  • 我调试了我的代码,发现当它为第二页记录时,连接过期,它将此异常
    HTTP请求发送到'https://XRMServices/2011/Organization.svc'被中止
    不幸的是,我从未遇到过上述类型的异常,因此除了提到之外,我不知道其他方法可以帮助您问题解决了。事实上,有一个插件会在帐户更新后立即执行。所以,禁用插件就可以完成工作。@MohsIntest您可以通过简单的SQL查询来完成这些任务,这太快了,如果您面临这样的事情,以后不需要编写这么长的查询表达式,因为更新需要太长的时间。等等,您不是建议我们用SQL进行更新,是吗?至于最初的问题,您可能在与CRM的连接超时方面有问题,您需要刷新令牌IIRC。