2015-02-24 66 views
0

我已經編寫了一個在創建新記錄(發佈)時觸發的插件。這個插件簡單運行一個SSIS包,將新創建的記錄細節移動到SQL表中。我不得不將此插件作爲無隔離模式部署。如何將新創建的CRM聯繫人記錄複製到SQL表中

我想知道的是,是否有更好的解決方案來實現與SQL表同步CRM記錄?

我正在研究CRM 2011 RU 18的前提下。

    string connectionString = "User Id=username; Password=password; Initial Catalog=db; Data Source=myServer;"; 
        using (SqlConnection connection = new SqlConnection(connectionString)) 
        { 
         SqlCommand cmd = new SqlCommand("INSERT INTO testPerson (Firstname, Lastname, Emailaddress, CrmGuid) VALUES (@FN, @LN, @Email, @CrmGuid)"); 
         cmd.CommandType = CommandType.Text; 
         cmd.Connection = connection; 

         cmd.Parameters.AddWithValue("@FN", "James"); 
         cmd.Parameters.AddWithValue("@LN", "Bolton"); 
         cmd.Parameters.AddWithValue("@Email", "[email protected]"); 
         cmd.Parameters.AddWithValue("@CrmGuid", "C45843ED-45BC-E411-9450-00155D1467C5"); 

         connection.Open(); 
         cmd.ExecuteNonQuery(); 
        } 

        //////// Direct DB Connection ////////////  <--- END 1 
       } 

       catch (Exception ex) 
       { 
        tracingService.Trace("CRM to mWeb Sync Plugin: {0}", ex.ToString()); 
        throw; 
       } 
+0

每次創建記錄時啓動一個SSIS包都是矯枉過正的,並且需要是Async,除非最終用戶需要等待。我見過SSIS軟件包需要一分鐘或更長時間才能啓動。 – Nicknow 2015-02-24 21:32:12

+0

@Nicknow它是異步的,因爲它是一個單獨的記錄,它將花費少於幾分鐘的時間。 – kmria 2015-02-25 13:11:05

+0

只是爲了澄清,我並不是說插入需要一分鐘 - 我是說SISS包的啓動(與正在完成的工作無關)可能需要一分鐘或更長的時間。這是必須爲每個操作啓動SSIS包的原因之一可能是有問題的體系結構。 – Nicknow 2015-02-25 15:34:06

回答

0

如果你想在沙盒模式下運行這一點,你將無法直接針對SQL(或運行的SSIS包。)

正確的解決辦法是針對Web服務。

創建一個標準的.NET Web服務(WebApi,ASP.NET老學校,WCF等 - 挑選你的毒藥),你可以發佈這些字段。該Web服務應該將這些字段寫入SQL。這是基本的.NET - 您可以使用SqlCommand,EntityFramework等。像任何Web服務一樣,將此Web服務部署到IIS。

您可以在這裏創建一個ASP.NET的WebAPI Web服務得到一個完整的教程:現在http://www.codeproject.com/Articles/659131/Understanding-and-Implementing-ASPNET-WebAPI

,你的插件應該叫你已經使用HttpClient創建的Web服務。只要你有一個FQDN(即service.mydomain.com,而不是諸如localhost或34.22.643.23之類的東西),你將能夠以沙箱模式運行你的插件(即不是隔離)。

你可以使用任何IIS安全功能保護您的服務,或在您的WebAPI代碼中實施授權。

+0

感謝您的細節,我今天就放棄這一點。會讓你知道這一切是怎麼回事。 – kmria 2015-02-25 10:19:15

0

作爲一個可能的替代我看到的插件可以使用ADO連接/命令e.t.c.將數據直接推送到外部數據庫。

+0

這個插件的工作必須在2分鐘內完成。 – kmria 2015-02-24 14:45:22

+0

你可以嘗試,但絕對是這樣的長期運行的過程,你應該使用異步插件。只是好奇 - 爲什麼插入(據我瞭解)的記錄到桌子可能需要2分鐘? – 2015-02-24 15:15:30

+0

後臺辦公桌在三個不同的表中有聯繫記錄,所以在一次觸發中,我將從CRM中取出記錄並將它們分佈在三個不同的SQL表中。在插入新記錄時,我還必須獲取ID(PK),以便我可以在它們之間建立關係。因此我有點擔心它可能需要更長的時間,然後2分鐘。 – kmria 2015-02-24 15:50:59

0

根據@Nicknow,我終於學到了(足夠),並創建了我的第一個WCF服務並將其部署在IIS上。是的,這是一些工作和學習,但它完美的作品。從創建記錄到插件完成到在後臺數據庫中創建的新行,全部在2分鐘內完成。

如果其他人與我在同一條船上,我會建議購買This book,因爲這對我來說是巨大的幫助。

再次感謝你們指點我正確的方向。

相關問題