MuleSoftのAnypointテンプレートを使ってインテグレーション開発を加速

##始めに

企業は顧客対応業務を支えるためCRMソリューションを導入しました、但し単なる顧客管理アプリケーションはビジネスに足りない。多数システムから顧客データを集めてCRMを通して適切に呈するのは求めているアーキテクチャです。わたし前勤めていた会社は顧客データを集まるため17個のシステムと連携しました、のそため[ODS](http://en.wikipedia.org/wiki/Operational_data_store)プラットフォームで ECIF (Enterprise Customer Information Facility)も作りました。多数システムで顧客データが持ってない企業様もありますが、施策やレガシー、買収などのケースによって複数CRMシステムを持っているかもしれません。企業全体の顧客データの統合は主要な課題です。

この場[MuleSoft (ミュールソフト)](http://www.mulesoft.com/)をご紹介します。MuleSoftは世の中のアプリ、データ、デバイスのコネクターです。MuleSoftの[dataloder.io](https://appexchange.salesforce.com/listingDetail?listingId=a0N30000009w8ZBEAY)はUSのAppExchangeの人気ランキング1位のデータツールですし、[Anypoint プラットフォーム](http://qiita.com/Cho_/items/f40c50146b73580f03df)を使って簡単にSaaS、SOAおよびAPI連携できるインテグレーションプラットフォームです。

現在様々な要因により企業は複数のSalesforceインスタンスを持つのは普通に見えてます。組織と組織間が連携の課題を解けるよう、MuleSoftは一般的利用できる[Anypoint テンプレート](https://www.mulesoft.com/library#!/?filters=Salesforce)を用意されてる。こちらのテンプレートを使って簡単に設定すれば素早くアプリケーションが連携できます。さらに[Anypoint スタジオ](http://www.mulesoft.com/platform/mule-studio)の拡張でそれ以上のSalesforceと外部システムのインテグレーションもサポートしています。

##使用例
Salesforce to Salesforceの連携シナリオを想定して、リアルタイムで商談の双方向同期を実装します。

１、Anypoint スタジオを[インストール](http://www.mulesoft.org/documentation/display/current/Download+and+Launch+Anypoint+Studio)します。
完了しましたらこのようの見えます。
![スクリーンショット 2015-09-10 17.26.37.png](https://qiita-image-store.s3.amazonaws.com/0/60535/59adb8c4-f304-c55c-7978-15c5dffa95f5.png)


2、テンプレートを導入
スタジオでツールバーの二番目"library"![スクリーンショット 2014-12-15 17.09.56.png](https://qiita-image-store.s3.amazonaws.com/0/60535/5f393741-f809-a8de-669c-116595c22a1b.png)ボタンをクリックします。ライブラリーで様々なテンプレートあります、今回は"Salesforce Org to Org Opportunity"を検索して"Salesforce Org to Org Opportunity Bi-Directional Sync"を選びます。（Webからも[ダウンロード](https://www.mulesoft.com/library#!/salesforce-org-to-org-opportunity-bidirectional?searchTerm=Salesforce%20Org%20to%20Org%20Opportunity%20Bi-Directional%20Sync)できます）
![スクリーンショット 2014-12-15 16.00.15.png](https://qiita-image-store.s3.amazonaws.com/0/60535/7e1a6c7c-a697-f3eb-6199-4fc1daf51e3d.png)


Open in Studio をクリックして導入完了です。画面はこの感じです。
![スクリーンショット 2014-12-15 16.13.56.png](https://qiita-image-store.s3.amazonaws.com/0/60535/14d5ed5b-8b1a-cb89-a5eb-852721586d38.png)
> コンパイルエラーの場合Javaコンパイルバージョンを1.5以上設定します。


３、コンポーネント説明
・enpoints.xml
二つのフォローで各自組織から商談をプルします。毎回一方向のみというインテグリティを保証するためexpressionコンポーネントを使って商談の同期をロックします。Salesforceコネクターに目的組織とQuery用SOQLが設定しています。
![スクリーンショット 2014-12-15 17.39.23.png](https://qiita-image-store.s3.amazonaws.com/0/60535/f23aae45-05d9-ee06-5a96-06baa4fb4e21.png)

・businessLogic.xml
こちらも二つフォローあります、一つ目は組織Aから組織Bへの処理で、二つ目はその逆組織Aから組織Bへの処理です。両方のフォローはバッチモジュールに含まれるので大量データも簡単に処理できます。一つ目のフローの左側見ると、"query opportunity from B"という組織Bから商談を取得するのSalesforceコネクターがあります、両組織では商談名でレコードをマッチしてます。そして組織Bで取引先を探して、ないの場合は取引先を作成します。それから商談のデータを用意して組織BにUpsertします。最後にロックを解除して処理が終わります。二つ目フォローはロジックが同じでただ方向が逆になります。
![スクリーンショット 2014-12-15 18.15.57.png](https://qiita-image-store.s3.amazonaws.com/0/60535/bfb2a7ba-23c8-e906-3e17-e468de196c5e.png)


・mule.[env].properties
組織の認証情報はpropertyファイルに保存されてます、環境によって複数ファイルにわけます。

４、実装
今度の手直しの部分は"mule.dev.properties"ファイルに認証情報を入れるだけで、それ以外の部分は編集不要です。
その中のurlプロパティーは、SOAP API用のurlです。
![スクリーンショット 2014-12-16 9.13.04.png](https://qiita-image-store.s3.amazonaws.com/0/60535/802ed3d5-8f7e-d0bb-3d82-e4753b5384c8.png)

５、デプロイ (オプション)
MuleSoftの運用環境は[CloudHub](http://www.mulesoft.com/platform/saas/cloudhub-ipaas-cloud-based-integration)というクラウドサービスだけでなく、[MuleESB](http://www.mulesoft.org/what-mule-esb)を通じてオンプレミスシステムも使用可能です。今回はCloudHubにデプロイします。
・[cloudhub.io](cloudhub.io/signup.html)でフリーアカウントを登録します。
・プロジェクトを右クリック > "CloudHub" > "Deploy to CloudHub"。
・認証情報、ドメイン情報を入れて"Finish"をクリックしてデプロイ完了です。
![スクリーンショット 2014-12-18 11.17.52.png](https://qiita-image-store.s3.amazonaws.com/0/60535/11cf8026-8f76-4ee3-34f3-a03cb0f31c2d.png)



６、検証
デプロイせずローカルで検証すると、プロジェクトを右クリック > "Run as" > "Mule Application"をクリックすると実行始まります。
[CloudHub](https://cloudhub.io/login.html)にデプロイした場合は、アプリは自動で開始します。"Settings"メニューで開始と停止がコントロールできます。
コンソールや"Logs"メニューから以下のログが見えますとプログラムが正しく動いてます。
![スクリーンショット 2014-12-18 11.36.11.png](https://qiita-image-store.s3.amazonaws.com/0/60535/757578d7-f94f-757e-c31e-ca3083bccf10.png)


例え"Edge SLA"という名前の商談をテストすると、左側組織の金額を7万円に修正して、右側組織の金額も自動更新されます。
![スクリーンショット 2014-12-15 20.17.20.png](https://qiita-image-store.s3.amazonaws.com/0/60535/91190ae6-057e-7b4b-466b-ffa865af0e88.png)


ログで処理している商談Idや結果が見えます。
![スクリーンショット 2014-12-18 11.43.29.png](https://qiita-image-store.s3.amazonaws.com/0/60535/86955ed2-9f0e-20d2-90e0-99bc3351d1af.png)



これは商談の双方向同期の実装です、1週間や1日にもかからず５分でを完了しました。

##最後に
現在MuleSoftはSalesforce対応するテンプレートが50個以上用意されて、取引先、取引先責任者、商談、リードなどの標準オブジェクトを中心としてSalesforce to Salesforce、Salesforce to SAP、Salesforce to Siebelなどの連携シナリオをサポートしています。開発者に対してすぐ使える、参考してすぐ作れるのテンプレートの存在は、開発時間も月単位ではなく週単位で大幅削減できます。

テンプレートについて簡単にご紹介しましたが、カスタマイズとか開発などの内容は今後[パソナテキーラのブログ](https://www.pasonatquila.com/about/blog/)に書きます！