おはよう/午後/夕方!
CRM (カスタマイズされた SplendidCRM) と自家製モンスター (crm+cms+backoffice) の 2 つのシステムがあります。
- CRM - Asp.Net 2.0 Web サイト、Sql Server 2008; ビュー、ストアド プロシージャ、トリガーを使用して実装。たとえば、監査はトリガー + SP として実装されます。WebSite はシンプルな UI です。Ado DataSet は Dtos として使用されます
- 自家製モンスター - Asp.Net 3.5 WebApplication、SqlServer 2008; ListToSql を使用して実装。Sql サーバーはストレージとしてのみ使用されます。c# コードで実装されたすべてのロジックと監査。VS のデザイナーが生成したクラスは、Dtos として使用されます。
それらの間に「二重」同期を実装する必要があります。
object is updated in Crm -> changes are applied in home-brewed monster
object is updated in home-brewed monster -> changes are applied in Crm
同期は「ほぼリアルタイム モード」で動作する必要があります。遅延は許容されます。多くのデータはありません。現在、約 35000 オブジェクトと 120000 監査エントリがあり、最大で 100000 オブジェクトになる可能性があります。オブジェクトも大きくありません (データベースの 60 列)。
どちらのシステムにも、更新を可能にする API があります。Crm 用の Web サービスと自家製モンスター用の Wcf サービスです。モンスターのため、実装の変更は Wcf サービスを介してのみ適用できます (監査が機能するためなど)。Crmについては、Webサービス呼び出しまたは直接SP呼び出しによって更新できます(ただし、Webサービスが望ましいです)。
現在、Crm にはオブジェクトの外部 ID を保持する列があり、一種の同期がありますが、より堅牢で専門的なソリューションが必要です。
何らかの理由 (管理者の失敗または間違った更新プログラムの適用) により、両方のシステムが「オフライン」になることがあります。これは同期には影響しません。システムが復旧したらすぐにすべての更新を適用する必要があります。自家製のモンスターからのデータが優先され、Crm からの変更を上書きすることが重要です。
問題は、どのテクノロジ/ライブラリを使用するのが適切かということです。同期を「システム外」で行うことができればよいでしょう (システムはデータが変更されたというイベントを発生させ、外部ツールは変更を同期します)。これはシステムによるものであり、同期ルールは頻繁に変更される可能性があります。たとえば、ある条件で Crm からオブジェクトを削除する最初の「バージョン」の同期、2 番目のバージョンでは削除せずにエクスポートするデータが少なく、「3 番目のバージョン」ではより多くのデータがエクスポートされます。両方のシステムに共通のフィールドが追加されました。この変更は将来表示されるため、他のシステム (またはそれら以外) には触れず、同期ルールのみを変更したいと思います。