Morning Girl

Windows, C#, .NET, Dynamics CRM etc..

【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.microsoft.com

Azure Service Bus は、アプリケーション、サービス、デバイスなど、あらゆるものを場所に関わらずつなぐことができるクラウド ベースの汎用メッセージング システムです。Azure で実行されているアプリ、オンプレミス システムで実行されているアプリ、両方で実行されているアプリのどれでも接続できます。Service Bus を使用して、家電製品、センサー、およびその他のデバイス (タブレットや電話など) を中央アプリケーションに接続したり、デバイスを相互接続したりできます。

とりあえず、AzureのDocumentからの引用ですが。

個人的理解として、ServiceBusは、今流行りのセンサー系IoT連携などのように、大量のリクエスト処理が求められるサービスを仲介・緩和するためのPaaSという理解です。

以下のキューの実装イメージのように一度ServiceBusに一度Requestをため込み、listenerアプリケーションで一つ一つ処理していく感じですね。

一度にデータベースへ対象のリクエストが発生しなくなるため、待機待ちなどを考慮せず、クライアント側は大量のRequestを一斉に投げることができます。

f:id:sugimomoto:20160717104241p:plain

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を中継させ、ほかのサービスと連携させるというアプローチが可能になります。

f:id:sugimomoto:20160717104209p:plain

もちろん、PluginやFormScriptからHttpRequestを直接投げるという手段もありますが。

ただ、CRMがインターフェースを用意していることもあり、ある程度は安易に連携させることができるというのが、前述のService Busの特徴と合わせて一つのメリットかと思います。

次回、ServiceBusエンドポイントをCRMに登録する手順を確認したいと思います。

参考資料

■Dynamics CRM and Microsoft Azure

https://mscrmrocks.wikispaces.com/Dynamics+CRM+and+Microsoft+Azure

blogs.msdn.microsoft.com

kaji-3.hatenablog.com

crmfortress.com