2013-05-10 33 views
0

當我們想要在C#中開發CRM庫(管理器)時,我們正面臨着問題,它將支持與多個CRM系統的通信 - 即您運行時的情況一次有多個CRM實例(例如兩個不同的組織)。CRM開發 - 支持多個組織的早期綁定方法

爲CRM庫

要求:

  1. 使用早期綁定,而不是後期綁定

  2. 能夠與更多的客戶關係管理系統通信(組織)通過一個管理者(因爲類型安全的)

  3. 只有一種方法適用於所有CRM系統(組織)的一個操作(避免代碼重複) - 有必要創建一個實用程序來解析生成的實體文件(crmsvcutil工具) ganization。解析的結果將是實體文件中定義的實體的接口和部分類的列表。這些接口將根據它們包含的屬性(如IAccountNumber等)在部分類中實現。將有兩組接口 - 第一個接口用於兩個組織中通用的實體屬性,例如,接口ICrmAccount將定義AccountNumber,Name,Address1屬性等。第二組接口將用於實體唯一且不存在於所有CRM系統(組織)實體中的屬性。一般的CRM經理將提供所有的溝通方法,比如CreateAccount(),GetAccount()等等,這些功能將會因爲實現的接口而與特定的CRM系統一起工作。

我們設計了一個解決方案,它現在能夠使用兩種不同的CRM系統進行通信,但是它不能夠使用的接口來實現針對特定帳戶,請參閱封閉的解決方案,包含代碼的註釋。

該解決方案可以在這裏找到:

Link for download

的解決方案說明:

CRM_BusinessLogic - 包含CRMManager保存用於該通信的所有方法和構造函數初始化正確的數據上下文

CRM_Interfaces - 包含所有生成的接口,這些接口是實體文件解析的結果(這將必須使用單獨的解析工具完成)。現在只包含iCRMAccount,其中只包含兩個組織共同的屬性,而iCRMContext包含在兩個數據上下文中實現的實體 - 現在這兩個上下文都實現相同的實體Account。

CRM_SCEurope - 包含第一個CRM組織生成的實體文件SC Europe - SCEuropeEntities.cs,解析工具生成的數據上下文(實現接口根據哪些實體存在於組織上下文中) - SCEuropeContext_generated和SCEuropeContext。CS返回正確裝配

CRM_SoSW - 同樣的內容CRM_SCEurope,包含與第二CRM組織

CRM_Test數據 - 包含測試控制檯應用程序將與這兩個組織溝通

請注意該封裝的解決方案僅包含僅具有Name參數的Account實體,該參數足以用於設計解決方案的基本測試。

重要提示:在項目運行之前,您必須在Program.cs文件(CRM_Test項目)中爲管理器設置證書。

正如您所看到的,如果帳戶數據是使用生成的部分類(SoSwContext,SCEuropeContext)通過實現的接口iCRMContext從CRM加載的,則應用程序將引發一個異常「無效」,其中'條件。實體成員正在調用無效的屬性或方法 - 請參閱方法實現。「

如果有人會找到解決方案如何解決異常,我們將不勝感激。

感謝

帕維爾

+0

問題是如何包含多個實體定義(針對不同orgs的早期綁定類型)? – Daryl 2013-05-13 12:32:36

回答

1

對於我現在的老闆,他們有多個CRM組織,有些幾乎是一樣的,我們實際上能夠使用完全相同的早期綁定類,有20幾行的自定義代碼來處理差異。其他組織不是,所以我們有一個單獨的dll,其中包含生成的早期綁定類型的組織特定命名空間。沒有理由,他們不能全部在同一個dll中,但是如果它們全都在相同的命名空間中,則會出現問題,因爲每個都將定義它自己的聯繫人,約會等定義。

請記住,只要您不嘗試選擇或更新不存在的特定字段或實體,就可以將早期綁定類型用於不同的組織。所以如果組織1在聯繫實體上有一個公司ID,而組織2沒有,你仍然可以使用組織1的早期界限類型,組織2,只要你不填充CompanyId(即將它放入實體參數集合)

相關問題