當我們想要在C#中開發CRM庫(管理器)時,我們正面臨着問題,它將支持與多個CRM系統的通信 - 即您運行時的情況一次有多個CRM實例(例如兩個不同的組織)。CRM開發 - 支持多個組織的早期綁定方法
爲CRM庫要求:
使用早期綁定,而不是後期綁定
能夠與更多的客戶關係管理系統通信(組織)通過一個管理者(因爲類型安全的)
只有一種方法適用於所有CRM系統(組織)的一個操作(避免代碼重複) - 有必要創建一個實用程序來解析生成的實體文件(crmsvcutil工具) ganization。解析的結果將是實體文件中定義的實體的接口和部分類的列表。這些接口將根據它們包含的屬性(如IAccountNumber等)在部分類中實現。將有兩組接口 - 第一個接口用於兩個組織中通用的實體屬性,例如,接口ICrmAccount將定義AccountNumber,Name,Address1屬性等。第二組接口將用於實體唯一且不存在於所有CRM系統(組織)實體中的屬性。一般的CRM經理將提供所有的溝通方法,比如CreateAccount(),GetAccount()等等,這些功能將會因爲實現的接口而與特定的CRM系統一起工作。
我們設計了一個解決方案,它現在能夠使用兩種不同的CRM系統進行通信,但是它不能夠使用的接口來實現針對特定帳戶,請參閱封閉的解決方案,包含代碼的註釋。
該解決方案可以在這裏找到:
的解決方案說明:
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加載的,則應用程序將引發一個異常「無效」,其中'條件。實體成員正在調用無效的屬性或方法 - 請參閱方法實現。「
如果有人會找到解決方案如何解決異常,我們將不勝感激。
感謝
帕維爾
問題是如何包含多個實體定義(針對不同orgs的早期綁定類型)? – Daryl 2013-05-13 12:32:36