2014-05-19 55 views
0

相同的請求,我需要將數據從一個SQL數據庫遷移到CRM 2011 我已經跑第一遍只將所需的字段,並從SQL數據庫標識符。 現在我應該檢索實體並使用查找更新值。檢查多條記錄存在於CRM 2011年

我使用批量操作(ExecuteMultipleRequest)執行插入和更新。 是否有類似的方式來檢查是否已經創建了一個實體集合,並且可能檢索它們的ID(如果是這種情況)?

單一實體檢查是真的放緩下來。

這是我用它來檢查記錄existin的方法:我已經做了一些這種類型的集成作業,以CRM的

/// <summary> 
/// Check if the entity with the specified value on the specified field exists 
/// </summary> 
/// <param name="entityName">Name of the entity</param> 
/// /// <param name="field">Field to be checked</param> 
/// <param name="fieldValue">Value to be checked</param> 
/// <returns>The GUID of the existing return if it exists, an empty one otherwise</returns> 

public Guid CheckIfExisting(string entityName, string field, string fieldValue) 
{ 
    try 
    { 
     QueryExpression entityQuery = new QueryExpression(entityName); 
     entityQuery.ColumnSet = new ColumnSet(entityName + "id"); 
     entityQuery.Criteria = new FilterExpression(); 
     entityQuery.Criteria.AddCondition(field, ConditionOperator.Equal, fieldValue); 

     EntityCollection retrievedEntities = service.RetrieveMultiple(entityQuery); 
     if (retrievedEntities.Entities.Count >0 && retrievedEntities.Entities[0].Id != null) 
      return retrievedEntities.Entities[0].Id; 
     else 
      return Guid.Empty; 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("There was an exception of type" + e.GetType()); 
     Console.WriteLine("Error message " + e.Message); 
     Console.WriteLine(e.StackTrace); 

    } 
    return Guid.Empty; 
} 
+0

你可以分享你的代碼,您使用的檢查現有記錄。我們可以處理查詢以提高性能。另外SQL Server索引還可以幫助改善查詢時間。 – Scorpion

回答

0

。有兩種主要的方法可以解決這個問題

最簡單的方法是使用卓越的kingswaysoft SSIS組件用於CRM http://www.kingswaysoft.com/products/ssis-integration-toolkit-for-microsoft-dynamics-crm。這很好,因爲它爲您提供了一個「upsert」選項,允許您執行此操作。但是,它也會遇到與使用CRM檢查每條記錄相同的問題。

第二個比較複雜,但性能更好的辦法是使用SSIS來比較你的東西。基本前提是獲取兩個列表,一個用於源代碼,另一個用於目標,並使用完全外部聯接加入它們。使用有條件拆分您的邏輯是這樣的

  • 如果它的來源,但沒有目的地,插入
  • 如果它的目的地,但不是在源,刪除
  • 如果它在這兩個再更新

當性能是一個因素時,這適用於大量數據。

+0

我真的很喜歡你的第二選擇!我想我會在下一個項目中使用它,但現在需要對代碼進行大幅改動,我沒有時間實施。我現在的想法是允許檢索查詢中的所有值(如加入的塊或條件),將檢索到的實體添加到以字段爲關鍵字的字典中,並直接在字典中檢查存在。 – MaPi

+0

好的,在此期間,您可以使用查詢表達式的IN條件並傳遞一個ID列表。這隻會是CRM上的一次打擊。在響應中,你會然後依次通過您通過ID列表,看看哪些回來 –

+0

凱文,我們使用您的第二個選項,我告訴你,這是非常快。我要添加的一件事就是不要使用SSIS中的排序,而要對源和目標組件進行排序,因爲它速度更快。 – kmria