2012-07-31 90 views
0

場景:
X_source = N/A.
Y_source = SQL server 2008 R2.
Z_source = CRM 2011 database.
如何使用Plugin將數據從Sql Server 2008 R2數據庫傳輸到CRM 2011內部數據庫?

我有將每天從信息X_source以一定的間隔更新Y_source。完成之後,Z_source必須連接到Y_source並上傳該信息。我無法控制X來源,但知道Y_source將與Z_source位於同一網絡中。

問題:
因爲我知道,有超過20萬條記錄Y_source我不能只是調用的所有記錄,並將其上傳到Z_source。我必須找到一種方法,可以批量迭代它們,也可以通過1進行迭代。我想到的想法是使用T-SQL遊標,但這看起來可能是錯誤的違規。

來源:
我有地址和憑據,以兩個Y & Z.我也有控制權Z_source

編輯 好吧,讓我清楚了一些東西出來,我認爲可能是重要的:

  1. Z_source確實是從2011年CRM獨立的數據庫,但它是它的原產地是來源。

  2. 另外,更新Z_source的過程可以是CRM 2011的外部過程。這意味着只要數據庫被更新,CRM是否觸發更新並不重要。

  3. 待處理的記錄數量將超過200,000。

回答

1

的解決方案,我想出了是要建立一個C#控制檯應用程序連接到Y_source檢索數據然後使用CRM 2011 SDK使用快速入門應用程序:Sdk/samplecode/cs/quickstart並將其修改爲插入Z_source。這個應用程序將在Y_source更新後6小時通過Windows任務運行,所以是的,我不需要一個精確的觸發器。

0

有幾件事情:2011年CRM

  1. 插件類似於SQL觸發器。 CRM事件,如Create,Delete,Update,Merge等,觸發器執行您在插件中編寫的代碼。這似乎不適合您的情況,因爲您希望獨立於CRM操作進行批量操作。

  2. CRM 2011沒有在基於集合的批處理中完成。一次只能完成一個數據庫行。 (爲了證明這一點,請描述您認爲應該在一組中完成的任何CRM事件並查看生成的SQL。)但是,僅僅因爲CRM 2011不能使用基於集合的操作並不意味着您必須收集所有SQL Server中的源數據一次一行。

因此,我提出以下建議:

  • 編寫一個簡單的應用程序,一次拉從SQL Server中的所有數據。在結果上調用.ToList()將結果集放入內存中。
  • 循環遍歷行列表,並且對於每個行,在CRM 2011中執行相應的操作(Create,Update,Delete等)。
    • 對於每一行,請將該行的唯一標識符包含在CRM記錄中,以便將來知道在與Y-Source同步時是否刪除或更新記錄。
  • 安排您的應用程序在Y-Source更新時運行。

根據您的需求,應用程序可以成爲定或SQL Server,這是按計劃的服務器,或者其他任何可以完成上述上運行一個控制檯應用程序觸發的CLR存儲過程。最近的問題Schedule workflows via external tool也是這樣說的。

+0

謝謝你的回覆彼得。我會在今天看看你的解決方案。 – Abraham 2012-08-01 14:01:13

相關問題