フローを設計する
学習の目的
この単元を完了すると、次のことができるようになります。
- フローの設計の準備をする。
- Salesforce で新規作成または更新された取引先責任者を Square の顧客に自動的に同期するフローを設定する。
フローの設計の準備をする
「MuleSoft Composer の基本」で説明したように、フローはシステムとデータを統合するために組み合わせて設定する一連のステップです。フローを設計する前に、フローチャートを使用してフローの主なステップを描き出すことをお勧めします。一連の流れを紙に描き出すと、どのようなフローになるか把握しやすくなります。
以下は、前の単元で説明した NTO のユースケースのインテグレーションフローの主なステップを示すフローチャートの一例です。
以下に、この NTO のユースケースのフローを作成するためのタスクと関連するフローコンポーネントについて詳しく説明します。
タスク |
フローコンポーネント |
---|---|
新規作成または更新された NTO の取引先責任者を見つける。 |
新規作成または更新された取引先責任者先に関する NTO 組織からのトリガー。 |
対応する Square の顧客を検索する。 |
取引先責任者と同じメールアドレスを持つすべての顧客を検索するアクションステップ。 |
顧客のリストを反復処理する。 |
顧客のリストを反復処理する For Each ブロック。 |
顧客リストが空でないかどうかと更新ユーザーがコンポーザーユーザーではないかどうかを調べる。 |
顧客リストが空でないかどうかと、更新ユーザーがコンポーネントユーザーでないかどうかを評価する For Each ブロック内の If/Else ブロック。 |
顧客リストが空で更新ユーザーがコンポーネントユーザーでない場合、つまり対応する顧客が存在する場合:
|
If/Else ブロックで次のことを実行する。
|
対応する顧客が存在しない場合:
|
顧客リストが空かどうかを評価する 2 番目の If/Else ブロックで次のことを実行する。
|
MuleSoft Composer ではデフォルトで作業が検証され、手順の各ステップにアプリケーション内コンテキストヘルプが表示されます。たとえば、システムに接続を追加すると、MuleSoft Composer で接続がテストされるため、正常に機能することを確認したうえで次のステップに進むことができます。また、各ステップ内の必須項目を入力するように MuleSoft Composer から求められます。これでフローの作成が簡単になります。
フローの作成のベストプラクティスは、数ステップごとにテストを繰り返しながらフローを完成させることです。
次のデモ動画で、MuleSoft Composer を使用して Salesforce の取引先責任者を Square の顧客に同期する方法をご覧ください。
フローを設計する
Salesforce で新規作成または更新された取引先責任者を Square の顧客と自動的に同期するインテグレーションフローを設計する準備が整いました。
単元 1 で学習したように、フローの実行時に無限ループに陥ってしまう問題を回避するには、フローを設計する際にコンポーザーのユーザー名とパスワードを使用して NTO 組織への接続を作成します。
次の手順に従ってフローを設計します。
NTO 組織から MuleSoft Composer を起動します。
- ユーザー名とパスワードを使用して NTO 組織にログインします。
- アプリケーションランチャーに
Composer
と入力して [MuleSoft Composer] を選択します。
新しいフローを作成します。
- [Create New Flow (新規フローの作成)] をクリックします。
- デフォルトのフロー名の横にある鉛筆アイコンをクリックします。
- フローに
Sync Salesforce Contacts to Square Customers
(Salesforce の取引先責任者を Square の顧客に同期) と名前を付け、[Save (保存)] をクリックします。
NTO Sandbox 組織の接続を使用してフローのトリガーを作成します。
- [Salesforce] をクリックします。
-
[Add new Salesforce connection (新しい Salesforce 接続を追加)] をクリックし、NTO Sandbox 組織への接続を作成します。
メモ: 初めての Salesforce 接続の場合、このオプションは表示されません。次のステップに進みます。 - この接続に
NTO sandbox org
(NTO Sandbox 組織) と名前を付けます。 -
[This is a sandbox organization (これは Sandbox 組織です)] チェックボックスをオンにして、[Create (作成)] をクリックします。
メモ: 開発者組織を使用する場合は、このチェックボックスの選択をスキップして、[Create (作成)] をクリックします。 - NTO Sandbox 組織のユーザー名とパスワードを入力して、[Log In to Sandbox (Sandbox にログイン)] をクリックします。
- [Allow (許可)] をクリックして、MuleSoft Composer に「Access the identity URL service (ID URL サービスにアクセス)」「Manage user data via APIs (API を使用してユーザーデータを管理)」「Perform requests at any time (いつでも要求を実行)」権限を付与します。MuleSoft Composer で接続が自動的にテストされます。エラーメッセージが表示されていない場合は接続が確立され、フローの最初のステップ (トリガー) が表示されます。
NTO 組織で取引先責任者が作成または更新されるたびにフローを開始するトリガーを設定します。
- [Choose an event that starts this flow (このフローを開始するイベントを選択)] 項目をクリックして、[New or updated record (レコードの新規作成または更新)] を選択します。
- [Object Type (オブジェクト種別)] 項目をクリックして [Contact (取引先責任者先)] を選択します。
- [Sample Output (サンプル出力)] セクションを見ると、NTO 組織の取引先責任者の項目とそれに関連付けられているサンプル値が表示されています。これで、正しい組織に接続されていることを確認でき、フローの今後のステップで使用できるデータの構造がわかります。
- [Save (保存)] をクリックしてフローを保存します。
Square Sandbox 接続を使用して、フローの 2 番目のステップを作成します。
- プラスアイコンをクリックしてステップを追加します。
- [HTTP] をクリックし、[Add new HTTP connection (新しい HTTP 接続を追加)] をクリックします。
- この接続に
NTO Square sandbox
と名前を付けます。 - [Authorization Type (承認種別)] 項目で、[Bearer Token (ベアラートークン)] を選択します。
- 単元 1 で取得したテキストファイルからベース URL をコピーして、[Base URL (ベース URL)] 項目に貼り付けます。このユースケースでは
https://connect.squareupsandbox.com
です。 - 同じテキストファイルから Square Sandbox アクセストークンをコピーして、[Token (トークン)] 項目に貼り付けます。
- [Next (次へ)] をクリックします。
- [Request Method (要求メソッド)] 項目で、[GET] を選択します。
- [Request Path (要求パス)] 項目に、
/v2/customers
と入力します。 - [Connect (接続)] をクリックします。MuleSoft Composer で接続が自動的にテストされます。エラーメッセージが表示されていない場合は接続が確立され、フローの 2 番目のステップが表示されます。
トリガー取引先責任者と一致する顧客を検索する 2 番目のステップを設定します。
- [Action (アクション)] 項目で、[Request (要求)] を選択します。
- [HTTP method (HTTP メソッド)] 項目で、[POST] を選択します。
- [Path (パス)] 項目に、
/v2/customers/search
と入力します。 - [Edit Example Request (要求例を編集)] をクリックします。
- 次のコードをコピーして貼り付け、[Save (保存)] をクリックします。この要求は、[Search customers (顧客の検索)] (POST) エンドポイントが使用されている場合に API Explorer ツールで生成される要求に似ています。
{ "query": { "filter": { "email_address": { "exact": "max.mule@mulesoft.com" } } }, "limit": 1 }
- [Select Optional Fields (省略可能な項目を選択)] をクリックします。
- [Exact (完全)] をクリックし、[Apply (適用)] をクリックします。[Body (本文)] セクションに [Exact (完全)] 項目が表示され、フローのステップ 1 の [Email (メール)] 項目に自動的に対応付けられます。
- [Edit Example Response(応答例を編集)] をクリックします。
- 次のコードをコピーして貼り付け、[Save (保存)] をクリックします。この応答は、[Search customers (顧客の検索)] (POST) エンドポイントが使用されている場合に API Explorer ツールで生成される応答に似ています。この応答は顧客リストを返します。そのため、次に For Each ブロックを使用して、顧客のリストを反復処理する必要があります。
{ "customers": [ { "id": "C36YN1H364V79CJ6JAPRRV9FRM", "created_at": "2022-05-27T17:47:08.613Z", "updated_at": "2022-05-27T17:47:48Z", "given_name": "Max", "family_name": "Mule", "email_address": "max.mule@mulesoft.com", "address": { "address_line_1": "415 Mission Ave", "locality": "San Francisco", "administrative_district_level_1": "CA", "postal_code": "94105", "country": "US" }, "phone_number": "1-800-664-9073", "reference_id": "0031U000023vRPcQAM", "preferences": { "email_unsubscribed": false }, "creation_source": "THIRD_PARTY", "version": 1 } ] }
フローのステップ 2 の顧客リストの各顧客を反復処理する For Each ブロックを作成して設定します。
- プラスアイコンをクリックしてステップを追加します。
- スクロールダウンして [For Each] を選択します。
- [Input list (入力リスト)] 項目で、フローのステップ 2 の [List of Customers (顧客のリスト)] を選択します。
For Each ブロック内で、トリガー取引先責任者に対応する顧客がいるかどうかを判断する If/Else ブロックを作成して設定します。この If/Else ブロックでは、実行時に無限ループに陥る問題が発生しないことを保証するために、更新を実行しているユーザーがコンポーザーユーザーでないかどうかも評価します。
- プラスアイコンをクリックして For Each ブロック内にステップを追加します。
- スクロールダウンして [If/Else Block (If/Else ブロック)] をクリックします。デフォルトで [All conditions must be met (AND) (すべての条件を満たす必要がある (AND))] が選択されています。
- 項目にフローのステップ 2 の [Customers (顧客)] を選択し、演算子に [Is not empty (空でない)] を選択します。この条件を満たした場合は、取引先責任者に対応する顧客がいます。
- [Add a condition (条件を追加)] をクリックします。
- 項目としてフローのステップ 1 の [Last Modified by Id (最終更新者 Id)]、演算子として [Does not equal (次の文字列と一致しない)] を選択して、単元 1 で見つけたコンポーザーユーザーの Salesforce ID を入力します。この例では 0051U0000026WFLQA2 です。この条件に一致した場合、更新を実行しているユーザーはコンポーザーユーザーではなくエンドユーザーです。両方の条件を満たした場合は、If ブランチの後続の 2 つのステップ (Square 顧客の更新、NTO 取引先責任者の更新) が実行されます。
既存の NTO Square Sandbox 接続を使用して If/Else ブロックの If ブランチ内にフローの 3 番目のステップを作成します。
- プラスアイコンをクリックして If ブランチにステップを追加します。
-
[HTTP] をクリックし、[NTO Square sandbox] をクリックします。
メモ: 既存の NTO Square Sandbox 接続を再利用します。
適切な取引先責任者の詳細 (関連付けられた取引先責任者 ID など) を使用して顧客を更新する 3 番目のステップを設定します。
- [Action (アクション)] 項目で、[Request (要求)] を選択します。
- [HTTP method (HTTP メソッド)] 項目で、[PUT] を選択します。
- [Path (パス)] 項目をクリックし、[Custom Expression (カスタム式)] をクリックします。カスタム式エディターが表示されます。このカスタム式エディターを使用して、フローの前のステップからの動的な項目値 (データピルとも呼ばれます) とユーザーが入力する静的なテキストの両方を含むメッセージを設定します。
-
/v2/customers/
と入力し、[Data (データ)] タブをクリックして、フローのステップ 2 の [Customers (顧客)] > [Id] を選択します。 - [Apply (適用)] をクリックします。
- [Edit Example Request (要求例を編集)] をクリックします。
- 次のコードをコピーして貼り付け、[Save (保存)] をクリックします。この要求は、[Update customer (顧客の更新)] (PUT) エンドポイントが使用されている場合に API Explorer ツールで生成される要求に似ています。
{ "given_name": "Jane", "family_name": "Doe", "email_address": "Jane.Doe@example.com", "address": { "address_line_1": "500 Electric Ave", "address_line_2": "Suite 600", "locality": "New York", "administrative_district_level_1": "NY", "postal_code": "10003", "country": "US" }, "phone_number": "1-212-555-4240", "reference_id": "salesforce_id" }
- [Add Fields (項目を追加)] をクリックします。
- 検索項目を使用して、次の項目を見つけて選択し、[Add (追加)] をクリックします。
ヒント: 検索する項目のキーワードを入力し、表示された項目の中から適切なものを選択します。キーワードをクリアして、次の項目でこのプロセスを繰り返します。すべての項目を選択したら、[Add (追加)] をクリックします。- Email_address
- Family_name
- Given_name
- Phone_number
- Reference_id
- Address_line_1
- Administrative_district_level_1
- Country
- Locality
- Postal_code
- 顧客項目を、フローのステップ 1 で取得した取引先責任者の対応する項目に次のように対応付けます。
- Email_address = Email (メール)
- Family_name = Last Name (姓)
- Given_name = First Name (名)
- Phone_number = Business Phone (会社電話)
- Reference_id = Contact ID (取引先責任者 ID)
- 住所
- Address_line_1 = Mailing Address (住所(郵送先)) > Street (町名・番地)
- Administrative_district_level_1 = Mailing Address (住所(郵送先))> State (都道府県)
- Country = Mailing Address (住所(郵送先)) > Country (国)
- Locality = Mailing Address (住所(郵送先)) > City (市区郡)
- Postal_code = Mailing Address (住所(郵送先)) > Postal Code (郵便番号)
- [Edit Example Response(応答例を編集)] をクリックします。
- 次のコードをコピーして貼り付け、[Save (保存)] をクリックします。この応答は、[Update customer (顧客の更新)] (PUT) エンドポイントが使用されている場合に API Explorer ツールで生成される応答に似ています。
{ "customer": { "id": "JDKYHBWT1D4F8MFH63DBMEN8Y4", "created_at": "2016-03-23T20:21:54.859Z", "updated_at": "2016-03-23T20:21:54.859Z", "given_name": "Jane", "family_name": "Doe", "email_address": "Jane.Doe@example.com", "address": { "address_line_1": "500 Electric Ave", "address_line_2": "Suite 600", "locality": "New York", "administrative_district_level_1": "NY", "postal_code": "10003", "country": "US" }, "phone_number": "1-212-555-4240", "reference_id": "YOUR_REFERENCE_ID", "note": "a customer", "preferences": { "email_unsubscribed": false }, "creation_source": "THIRD_PARTY", "group_ids": [ "545AXB44B4XXWMVQ4W8SBT3HHF" ], "segment_ids": [ "1KB9JE5EGJXCW.REACHABLE" ], "version": 1 } }
既存の NTO Sandbox 組織の接続を使用して If ブランチ内にフローの 4 番目のステップを作成します。
- プラスアイコンをクリックして If ブランチ内にステップを追加します。
-
[Salesforce] をクリックし、[NTO sandbox org (NTO Sandbox 組織)] をクリックします。
メモ: 既存の NTO Sandbox 組織の接続を再利用します。
関連付けられた顧客 ID を使用してトリガー取引先責任者を更新する 4 番目のステップを設定します。
- [Action (アクション)] 項目をクリックして、[Update Record (レコードを更新)] を選択します。
- [Object Type (オブジェクト種別)] 項目に、
Contact
(取引先責任者) と入力します。[Contact ID (取引先責任者 ID)] は必須項目のため、自動的に選択されます。 - [Add Fields (項目を追加)] をクリックします。
- 検索ツールを使用して [Square Customer ID (Square 顧客 ID)] を選択し、[Add (追加)] をクリックします。
- 取引先責任者の項目を、フローの先行するステップで取得した対応する項目に次のように対応付けます。
- Contact ID (取引先責任者 ID) = ステップ 1 の [Contact ID (取引先責任者 ID)]
- Square Customer ID (Square 顧客 ID) = ステップ 2 の [Customers (顧客)] > [Id]
For Each ブロックの外で、対応する顧客がない取引先責任者を処理する 2 番目の If/Else ブロックを作成して設定します。
- フローの一番下の For Each ブロックの外にあるプラスアイコンをクリックしてステップを追加します。
- スクロールダウンして [If/Else Block (If/Else ブロック)] をクリックします。デフォルトで [All conditions must be met (AND) (すべての条件を満たす必要がある (AND))] が選択されています。
- 項目にフローのステップ 2 の [Customers (顧客)] を選択し、演算子に [Is empty (空)] を選択します。この条件を満たした場合は、取引先責任者に対応する顧客がいません。
フローのステップ 3 を複製して If ブランチ内にフローの 5 番目のステップを作成します。
- フローのステップ 3 までスクロールし、ステップの省略記号ボタンをクリックし、[Duplicate Step (ステップを複製)] をクリックします。フローのステップ 4 が作成されます。
- ステップ 4 の [Move Step (ステップを移動)] (4 方向矢印) ボタンをクリックします。[Move Step (ステップを移動)] ウィンドウが開き、フローのステップのリストが表示されます。[Move Step (ステップを移動)] 選択リストはデフォルトで [After (後)] に設定されています。
- 必要に応じて、右矢印を使用して、If/Else ブロックを展開します。
- [Customers is empty (顧客 空)] (ブランチ 1) を展開します。
- [Move inside Customers is empty (Branch 1) (顧客 空 (ブランチ 1) の内部に移動)] をクリックし、[Move (移動)] をクリックします。ステップ 4 が 2 番目の If ブランチに移動し、フローのステップ 5 になります。
適切な取引先責任者の詳細 (関連付けられた取引先責任者 ID など) を使用して顧客を作成する 5 番目のステップを設定します。
- フローのステップ 5 までスクロールダウンします。[Action (アクション)] 項目は [Request (要求)] に設定されたままです。
- [HTTP method (HTTP メソッド)] 項目で、[POST] を選択します。
- [Path (パス)] 項目を、
/v2/customers
に変更します。 - [Edit Example Request (要求例を編集)] をクリックします。
- 次のコードをコピーして貼り付け、[Save (保存)] をクリックします。この要求は、[Create customer (顧客の作成)] (POST) エンドポイントが使用されている場合に API Explorer ツールで生成される要求に似ています。
{ "given_name": "Jane", "family_name": "Doe", "email_address": "Jane.Doe@example.com", "address": { "address_line_1": "500 Electric Ave", "address_line_2": "Suite 600", "locality": "New York", "administrative_district_level_1": "NY", "postal_code": "10003", "country": "US" }, "phone_number": "1-212-555-4240", "reference_id": "salesforce_id" }
- 顧客項目がフローのステップ 1 で取得した取引先責任者の対応する項目に次のようにマップされていることを確認します。
- Email_address = Email (メール)
- Family_name = Last Name (姓)
- Given_name = First Name (名)
- Phone_number = Business Phone (会社電話)
- Reference_id = Contact ID (取引先責任者 ID)
- 住所
- Address_line_1 = Mailing Address (住所(郵送先)) > Street (町名・番地)
- Administrative_district_level_1 = Mailing Address (住所(郵送先))> State (都道府県)
- Country = Mailing Address (住所(郵送先)) > Country (国)
- Locality = Mailing Address (住所(郵送先)) > City (市区郡)
- Postal_code = Mailing Address (住所(郵送先)) > Postal Code (郵便番号)
- [Edit Example Response(応答例を編集)] をクリックします。
- 次のコードをコピーして貼り付け、[Save (保存)] をクリックします。この応答は、[Create customer (顧客の作成)] (POST) エンドポイントが使用されている場合に API Explorer ツールで生成される応答に似ています。
{ "customer": { "id": "JDKYHBWT1D4F8MFH63DBMEN8Y4", "created_at": "2016-03-23T20:21:54.859Z", "updated_at": "2016-03-23T20:21:54.859Z", "given_name": "Jane", "family_name": "Doe", "email_address": "Jane.Doe@example.com", "address": { "address_line_1": "500 Electric Ave", "address_line_2": "Suite 600", "locality": "New York", "administrative_district_level_1": "NY", "postal_code": "10003", "country": "US" }, "phone_number": "1-212-555-4240", "reference_id": "YOUR_REFERENCE_ID", "note": "a customer", "preferences": { "email_unsubscribed": false }, "creation_source": "THIRD_PARTY", "group_ids": [ "545AXB44B4XXWMVQ4W8SBT3HHF" ], "segment_ids": [ "1KB9JE5EGJXCW.REACHABLE" ], "version": 1 } }
フローのステップ 4 を複製して If ブランチ内にフローの 6 番目のステップを作成します。
- フローのステップ 4 までスクロールし、ステップの省略記号ボタンをクリックし、[Duplicate Step (ステップを複製)] をクリックします。フローのステップ 5 が作成されます。
- ステップ 5 の [Move Step (ステップを移動)] (4 方向矢印) ボタンをクリックします。[Move Step (ステップを移動)] ウィンドウが開き、フローのステップのリストが表示されます。[Move Step (ステップを移動)] 選択リストはデフォルトで [After (後)] に設定されています。
- If/Else ブロックを展開します。
- [Customers is empty (顧客 空)] (ブランチ 1) を展開します。
- [6. Action: Request in HTTP (6. アクション: HTTP で要求)] をクリックし、[Move (移動)] をクリックします。ステップ 5 が 2 番目の If ブランチに移動し、フローのステップ 6 になります。
関連付けられた顧客 ID を使用してトリガー取引先責任者を更新する 6 番目のステップを設定します。
- フローのステップ 6 までスクロールダウンします。[Action (アクション)] 項目は [Update record (レコードを更新)] に設定されたままで、[Object Type (オブジェクト種別)] 項目は [Contact (取引先責任者)] に設定されたままです。
- 取引先責任者の項目がフローの先行するステップで取得した対応する項目に次のようにマップされていることを確認します。
- Contact ID (取引先責任者 ID) = ステップ 1 の [Contact ID (取引先責任者 ID)]
- Square Customer ID (Square 顧客 ID) = ステップ 5 の [Customer (顧客)] > [Id]
- フローを保存します。フロー全体は次のようになります。
お疲れさまでした。次の単元では、フローをテストして正常に機能することを確認する方法を学習します。