MuleSoft公式チュートリアルを学ぶ - SaaSアプリケーションをSalesforceと連携する編

# はじめに

MuleSoftを勉強する機会があったので、公式チュートリアルをやってみました。

しかし2024年6月現在、いくつかのチュートリアルは **Mulesoftの最新バージョンと画面や機能が異なっていてなかなか進めない**ところがあったので、現行バージョンの仕様を調べ、最終的にうまくいった手順をスクショ満載でまとめました。

本記事は、前の記事

https://qiita.com/azemin/items/141e934d3a01478756d6

に引き続き、**Introduction to developing on Anypoint Platform** シリーズの**パート4**にあたる、**SaaSアプリケーションをSalesforceと連携する**（Connecting your first SaaS application to Salesforce）のチュートリアルを**MuleSoftの現行バージョンで学ぶ**際の手順です。

今回記事の元ネタのMuleSoft公式チュートリアルはこちらです：
Connecting your first SaaS application to Salesforce
https://developer.mulesoft.com/tutorials-and-howtos/quick-start/connecting-your-first-saas-application/


# 準備
このチュートリアルでは、下記のアプリケーションを使います。チュートリアルを進める前に無料トライアルアカウントの取得や、デスクトップアプリケーションのダウンロード／インストールをする必要があります。

- **Anypoint Studio** - APIの実装を開発するためのデスクトップ・アプリケーションです。[ダウンロード](URL "https://www.mulesoft.com/lp/dl/studio")・インストールしてください。
- **RESTクライアント** - APIテストのために何かしらのRESTクライアントアプリが必要です。本記事では[Postman](URL "https://www.postman.com/downloads/")を使います。
- **Saleforceのアカウント** - 無料の[開発者アカウント](URL "https://developer.salesforce.com/free-trials")を利用できます。


# 1. Muleアプリケーションを作成する
現在の公式チュートリアルでは、ウェブ上のAnypoint Platformにある **Flow Designer** 機能で新規のMuleアプリを作ることになっていますが、Flow Designer は**2024年2月28日をもって廃止**されてしまって現在使えません。

Anypoint Flow Designer is Retiring(EOL) on February 28, 2024

https://help.salesforce.com/s/articleView?id=001119574&type=1

デスクトップ Flow Designer の廃止

https://help.salesforce.com/s/articleView?id=release-notes.rn_forcecom_flow_fbuilder_eol_swing.htm&release=222&type=5

そのため、本記事では **Anypoint Studio** の方を使用します。

さっそく、Anypoint Studioを起動し、新規のMuleプロジェクトを任意の名前で作成します。

作成するフローは、最終的にこのようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/2a3a7e62-9334-2476-84e8-58754241f845.png)

まず、開いたキャンバスに、Mule Paletteから **HTTP Listener** コンポーネントをドラッグ＆ドロップし、Pathを **/submit** に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/11227379-c973-415d-9319-20bbb1c53b3c.png)

HTTP_Listener_configの設定は、デフォルト値のままでOKです。

次に、Mule Paletteから **HTTP Request** コンポーネントをドラッグ＆ドロップし、前のチュートリアルでCloudHubにデプロイしたAPIのエンドポイントURLを、URLフィールドに入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/f45e5c2f-fd23-4b5c-e62c-cb0af38f876a.png)

次に、Mule Paletteで **Foreach** コネクタを検索し、HTTP Requestの隣にドラッグ＆ドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/087b5caf-2fd2-e1f8-ba08-52b86ab7b24e.png)

最後に、Mule Paletteで **Salesforce** コネクタを検索し、**Create** コンポーネントを **For Eachコネクタに重ねるように** ドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/89950d7c-67c8-2033-1369-a31cd7f7e7cf.png)

Salesforceコネクタの設定では、まずBasic Settingsセクションで緑の＋アイコンをクリックして構成を入力します。

Salesforceアカウントのユーザー名、パスワード、セキュリティートークンを入力するのですが、セキュリティートークンについては後述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/cc88d9c7-c481-d7e3-7bec-30ebc9cd1eb8.png)

Salesforceの接続設定が完了したら、Generalセクションを入力します。
Typeは **Lead** を選択し、Recordsは **payload** とします*。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/096d87eb-20da-a5a5-8e0e-7441771feeae.png)
*実行時に Cannot coerce Object というエラーが出る場合はRecordsの記述を **[payload]** に変更

::: note info
Salesforceのセキュリティートークンについて

Salesforceのアカウントを作成したときに、セキュリティートークンがメールで送られてくるらしいのですが、来なかった場合はSalesforceにログインし、手動でトークンを再発行する必要があります。

Salesforceは、Lightning Experience と Salesforce Classic という2つのユーザーインタフェースがあり、トークン再発行メニューへの辿り着き方が違います。

**Lightning Experience:** 右上の丸いアイコン ＞ 設定 ＞ 私の個人情報 ＞ 私のセキュリティトークンのリセット
**Salesforce Classic:** 自分の名前 ＞ 個人用 ＞ 私のセキュリティトークンのリセット
:::

今回作成したフローは、下図のような流れになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/a1a3686c-4df1-06cf-2153-46f3b398baea.png)

次はこのフローをローカルでテストしてみましょう。

# Salesforce連携をテストする

テストを実行する前に、一度Salesforceにログインして、リード画面を確認します。
今回、テスト**実行前のリード総数は22件**です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/2ace1fe6-0907-9ea5-7dd0-20a5f6a41216.png)

では、Anypoint Studioで、すべてのファイルを保存し、キャンバス上のどこかで右クリックしてメニューから **Run project <プロジェクト名>** を選び、アプリを実行します。

ローカルでアプリが実行されている状態で **Postman** からリクエストを送信します。
送信先のURLは **localhost:8081/submit** です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/2e47ed55-0c1e-a117-2a6a-b731ff6fe2e6.png)

問題なく動いていれば、ステータス 200 が返され、フローの中で Contact APIから取得した連絡先がレスポンスBodyに含まれているのがわかります。

再びSaleforceを開いて、リードが追加されているか確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308847/1e9855ea-9c34-5e75-8040-1a20fd4edede.png)

テスト実行前よりもリード総数が増え（この時は6件増えて総数28件）、API連携によって追加されたリードがリストの上の方にあるのが確認できます。

# 余力があれば
余力があれば、前のチュートリアルと同じ手順で今回のアプリをCloudHubにアップロード／デプロイし、Postmanからクラウド上のAPIにリクエストを送信してテストしてもいいと思います。

# おわりに
本記事では、MuleSoft公式チュートリアルの **Introduction to developing on Anypoint Platform** シリーズ パート4にあたる **Connecting your first SaaS application to Salesforce** を、2024年6月現在のMuleSoft最新バージョンで学ぶ際の手順をご紹介しました。

このパート4がシリーズ最後のチュートリアルです。
ここまでやると、だいぶAPI連携を駆使している感がでてきますね。