【Dynamics CRM】【Azure】Dynamics CRMとAzure Service Busの連携 その1
思いのほか地味(?)にて提供されている機能ですが、Dynamics CRMはAzure(のService Bus)と統合して、Plugin経由で連携することが可能です。
以下のように、「Microsoft Dynamics CRM との Azure 統合」という御大層な名前の資料があるのですが、Azureのいろんなサービスと連携してめっちゃくっちゃ何かできるよ!? というわけではなく、Plugin実行時にService Busにメッセージを投げることが可能というものです。
(このなんか御大層なタイトルをなんとかしてほしい。。。(-_-))
■Microsoft Dynamics CRM との Azure 統合
https://msdn.microsoft.com/ja-jp/library/gg334766.aspx
というわけで実際に試してみたわけですが、思いの外解説情報が少なく(かつMSDNわかりづらいし……)、やっている人本当に居るの?という状態で、調べて理解するまでに相当面倒でした……。( ゚皿゚)
そもそもAzure Service Busって?
Azure Service Bus は、アプリケーション、サービス、デバイスなど、あらゆるものを場所に関わらずつなぐことができるクラウド ベースの汎用メッセージング システムです。Azure で実行されているアプリ、オンプレミス システムで実行されているアプリ、両方で実行されているアプリのどれでも接続できます。Service Bus を使用して、家電製品、センサー、およびその他のデバイス (タブレットや電話など) を中央アプリケーションに接続したり、デバイスを相互接続したりできます。
とりあえず、AzureのDocumentからの引用ですが。
個人的理解として、ServiceBusは、今流行りのセンサー系IoT連携などのように、大量のリクエスト処理が求められるサービスを仲介・緩和するためのPaaSという理解です。
以下のキューの実装イメージのように一度ServiceBusに一度Requestをため込み、listenerアプリケーションで一つ一つ処理していく感じですね。
一度にデータベースへ対象のリクエストが発生しなくなるため、待機待ちなどを考慮せず、クライアント側は大量のRequestを一斉に投げることができます。
ServiceBusには上記のようなキューの他、受信したRequestを仕分けて処理するトピック、双方向通信を行うためのリレー、よりスケーラブルな対応が可能になるEvent Hubがあります。
今回はとりあえず一番シンプルなキューを使ってみました。
Dynamics CRM と Azure ServiceBusの連携イメージ
前述のとおりこの連携はDynamics CRMのPluginのように動作します。
実行アプローチは以下の2種類
・Stepとして各メッセージに登録されて、ContextをSend
・Pluginやworkflow activityとして処理内部から直接Service BusへSend
前者は必ずContextを受け渡すのに対し、後者はSendする内容をPlugin内部処理で自由にコントロールできます。
Dynamics CRMを他のデータベースやアプリケーションと連携させる際には、間のサーバにバッチ処理プログラム・WEB APIなどを配置し、仲介するのがベターかと思いますが、このAzure ServiceBusを使うことで、Pluginの実行時にServiceBusを中継させ、ほかのサービスと連携させるというアプローチが可能になります。
もちろん、PluginやFormScriptからHttpRequestを直接投げるという手段もありますが。
ただ、CRMがインターフェースを用意していることもあり、ある程度は安易に連携させることができるというのが、前述のService Busの特徴と合わせて一つのメリットかと思います。
次回、ServiceBusエンドポイントをCRMに登録する手順を確認したいと思います。
参考資料
■Dynamics CRM and Microsoft Azure
https://mscrmrocks.wikispaces.com/Dynamics+CRM+and+Microsoft+Azure