複数の CRM システムとの通信をサポートする C# で CRM ライブラリ (マネージャー) を開発したい場合、問題に直面しています。つまり、複数の CRM インスタンスを同時に実行している場合 (たとえば、2 つの異なる組織) )。
CRM ライブラリの要件:
遅延バインドではなく事前バインドを使用する (型の安全性のため)
一人のマネージャーを通じて、より多くの CRM システム (組織) と通信できる
すべての CRM システム (組織) で使用される 1 つの操作 (コードの重複を避ける) に対して 1 つの方法のみ - 生成されたエンティティ ファイルを解析するためのユーティリティ (crmsvcutil ツール) を組織ごとに作成する必要があります。解析の結果は、エンティティ ファイルで定義されたエンティティのインターフェイスと部分クラスのリストになります。インターフェイスは、IAccountNumber など、含まれる属性に従って部分クラスで実装されます。インターフェイスには 2 つのグループがあります。最初のグループは、両方の組織で共通のエンティティ属性用です。たとえば、インターフェイス ICrmAccount は、AccountNumber、Name、Address1 属性などを定義します。 . インターフェイスの 2 番目のグループは、エンティティに固有であり、すべての CRM システム (組織) のエンティティには存在しない属性用です。
2 つの異なる CRM システムと通信できるソリューションを設計しましたが、特定のアカウントに対して実装されたインターフェイスを使用することはできません。コードのコメントを含む同封のソリューションを参照してください。
解決策は次の場所にあります。
解決策の説明:
CRM_BusinessLogic - 通信のためのすべてのメソッドを保持し、コンストラクターで正しいデータ コンテキストを初期化する CRMManager が含まれています。
CRM_Interfaces - エンティティ ファイルの解析の結果として生成されたすべてのインターフェイスが含まれます (これは別の解析ツールで行う必要があります)。現在は、両方のデータ コンテキストで実装されているエンティティを含む iCRMContext と、両方のデータ コンテキストで実装されているエンティティを含む iCRMContext の両方に共通の 1 つの属性のみを保持する iCRMAccount のみが含まれています。現在、両方のコンテキストが同じエンティティ Account を実装しています。
CRM_SCEurope - 最初の CRM 組織 SC Europe 用に生成されたエンティティ ファイル - SCEuropeEntities.cs、解析ツールによって生成されたデータ コンテキスト (組織コンテキストに存在するエンティティに応じてインターフェイスのリストを実装) - SCEuropeContext_generated および SCEuropeContext.cs が含まれ、正しい組み立て
CRM_SoSW - CRM_SCEurope と同じ内容で、2 番目の CRM 組織に関連するデータが含まれています。
CRM_Test - 両方の組織と通信するテスト コンソール アプリが含まれています
同封のソリューションには、設計されたソリューションの基本的なテストには十分な名前パラメーターのみを持つ Account エンティティのみが含まれていることに注意してください。
重要: プロジェクトを実行する前に、Program.cs ファイル (CRM_Test プロジェクト) でマネージャーの資格情報を設定する必要があります。
アカウント データが、実装されたインターフェイス iCRMContext で生成された部分クラス (SoSwContext、SCEuropeContext) を使用して CRM から読み込まれるかどうかを見ることができるように、アプリケーションは例外「Invalid 'where' condition. An entity member is invoking an invalid property or method. - メソッドの実装を参照してください。".
誰かが例外を解決する方法を見つけてくれれば幸いです。
ありがとう
パベル