2016-03-09 4 views
0

У меня есть фрагмент кода, который захватывает все активные учетные записи из CRM, а затем обновляет одно из скрытых полей для каждой учетной записи. В CRM насчитывается около 45 000 активных учетных записей, и именно поэтому я использую пейджинг и захватываю 5000 записей с каждой страницы. Он начинает обновлять записи со страницы 1 и захватывать первые 5000 записей, но висеть на 3100-й учетной записи и не двигаться дальше. Я здесь для поиска ваших добрых советов/предложений, чтобы сделать это нужным. ТИА !!!Программа застряла для обновления полного списка учетных записей в Dynamics CRM с использованием C#

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

ответ

0

Ваш код выглядит хорошо. У меня есть 2 предложения:

  1. Попробуйте переписать код, не пытаясь немедленно обновить запись. Попробуйте извлечь все записи и только после обновления всех данных.
  2. Для таких задач я могу предложить использовать SSIS - это намного проще. KingswaySoft adapter является бесплатным для таких операций.
+0

Я бы отлаживал свой код и обнаружил, что когда он отправился на запись второй страницы, срок действия соединения истек, и он отправляет это исключение. HTTP-запрос на «https: //XRMServices/2011/Organization.svc» был aborted' –

+0

К сожалению, я никогда не испытывал упомянутых видов исключений, поэтому я не знаю другого способа помочь вам, кроме упомянутых. –

+0

Проблема решена. На самом деле есть плагин, который выполняется сразу после обновления учетной записи. Таким образом, отключив плагин, выполните проделанную работу. –