フローを設計する
学習の目的
この単元を完了すると、次のことができるようになります。
- フローの設計の準備をする。
- Salesforce で新規作成または更新された商品を NetSuite の在庫品目やアセンブリ品目と自動的に同期するフローを設定する。
フローの設計の準備をする
「MuleSoft Composer の基本」で説明したように、フローはシステムとデータを統合するために組み合わせて設定する一連のステップです。フローを設計する前に、フローで実行する必要があるタスクを、フローコンポーネント形式にした適切なステップにマップする必要があります。一連の流れを紙に描き出すと、どのようなフローになるか把握しやすくなります。
以下は、前の単元で説明した NTO のユースケースのマッピングの一例です。
タスク | フローコンポーネント |
---|---|
新規作成または更新された商品を見つける。 |
商品の新規作成または更新時に Sales Cloud から実行されるトリガー |
関連付けられている価格表を取得する。 |
Sales Cloud でトリガー商品に関連付けられているものと価格表 ID が同じ価格表をすべて取得するアクションステップ |
関連付けられている価格表エントリを取得する。 |
Sales Cloud でトリガー商品に関連付けられているものと価格表 ID と商品 ID が同じ価格表エントリをすべて取得するアクションステップ |
価格表エントリごとに反復処理する。 |
価格表エントリのリストを入力リストとして使用する For Eachブロック。フローの後続のステップは、この For Each ブロック内で実行されます。 |
対応する在庫品目 (ある場合) を取得する。 |
NetSuite で、トリガー商品のものと商品 ID が同じ在庫品目をすべて取得するアクションステップ |
トリガー商品に対応する在庫品目があるかどうかを判断する。 |
在庫品目のリストが空 (つまり、NetSuite に在庫品目が存在しない) かどうかを評価する If/Else ブロック |
対応する在庫品目が存在しない場合 |
If ブロック内:
|
対応する在庫品目が存在する場合 |
If/Else ブロックの Else ブランチ内: NetSuite で、適切な商品の詳細を使用して在庫品目を更新する。 |
対応する在庫品目を取得する。 |
NetSuite で、トリガー商品のものと商品 ID が同じ在庫品目をすべて取得するアクションステップ |
関連付けられたアセンブリ品目を作成する。 |
NetSuite で、在庫品目を含むアセンブリ品目を作成するアクションステップ。アセンブリ品目が、在庫品目に関連付けられているものと同じ関連子会社の内部 ID を使用していることを確認します。 |
MuleSoft Composer ではデフォルトで作業が検証され、手順の各ステップにアプリケーション内コンテキストヘルプが表示されます。たとえば、システムに接続を追加すると、MuleSoft Composer で接続がテストされるため、正常に機能することを確認したうえで次のステップに進むことができます。また、フローを作成しやすくするために、各ステップに必須項目への入力を求めるプロンプトが表示されます。
フローの作成のベストプラクティスは、数ステップごとにテストを繰り返しながらフローを完成させることです。
フローを設計する
Salesforce で新規作成または更新された商品を NetSuite の在庫品目やアセンブリ品目と同期するインテグレーションフローを設計する準備が整いました。
次の手順に従ってフローを設計します。
NTO 組織から MuleSoft Composer を起動します。
- ユーザー名とパスワードを使用して NTO 組織にログインします。
- アプリケーションランチャーに
Composer
と入力して [MuleSoft Composer] を選択します。
新しいフローを作成します。
- [Create New Flow (新規フローの作成)] をクリックします。
- デフォルトのフロー名の横にある鉛筆アイコンをクリックします。
- フローに
Sync Salesforce Products to NetSuite Inventory and Assembly Items
(Salesforce の商品を NetSuite の在庫品目やアセンブリ品目と同期) と名前を付けて、[Save (保存)] をクリックします。
NTO 組織を使用してフローのトリガーを作成します。
- [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 に「ID URL サービスにアクセス」「API を使用してユーザーデータを管理」「いつでも要求を実行」権限を付与します。MuleSoft Composer で接続が自動的にテストされます。エラーメッセージが表示されていない場合は接続が確立され、フローの最初のステップ (トリガー) が表示されます。
NTO 組織で商品が作成または更新されるたびにフローを開始するトリガーを設定します。
- [Choose an event that starts this flow (このフローを開始するイベントを選択)] 項目をクリックして、[New or updated record (レコードの新規作成または更新)] を選択します。
- [Object Type (オブジェクト種別)] 項目に、
Product
(商品) と入力します。 - [Sample Output (サンプル出力)] セクションを見ると、NTO 組織の商品の項目と関連付けられているサンプル値が表示されています。この情報から、正しい組織に接続されていることと、フローの今後のステップで使用可能なデータの構造がわかります。
- [Save (保存)] をクリックしてフローを保存します。
Sales Cloud でトリガー商品に関連付けられているものと価格表 ID が同じ価格表をすべて取得する、フローの 2 つ目のステップを作成します。
- プラスアイコンをクリックしてステップを追加します。
- [Salesforce] をクリックして、[NTO sandbox org (NTO Sandbox 組織)] をクリックします。
Sales Cloud でトリガー商品に関連付けられているものと価格表 ID が同じ価格表をすべて取得する 2 つ目のステップを設定します。
- [Action (アクション)] 項目をクリックして、[Get records (レコードを取得)] を選択します。
- [Object Type (オブジェクト種別)] 項目に、
Price Book
(価格表) と入力します。 - [Conditions to filter the objects (オブジェクトを絞り込む条件)] 選択リストで、[All conditions must be met (AND) (すべての条件を満たす必要がある (AND))] を選択します。
- 項目に [Price Book ID (価格表 ID)]、演算子に [Equals (次の値と一致する)] を選択して、単元 1 で取得した標準価格表の価格表 ID を指定します。このフローの例では 01s1U000005mSpYQAU です。
Sales Cloud でトリガー商品に関連付けられているものと価格表 ID と商品 ID が同じ価格表エントリをすべて取得する、フローの 3 つ目のステップを作成します。
- プラスアイコンをクリックしてステップを追加します。
- [Salesforce] をクリックして、[NTO sandbox org (NTO Sandbox 組織)] をクリックします。
Sales Cloud でトリガー商品に関連付けられているものと価格表 ID と商品 ID が同じ価格表エントリをすべて取得する 3 つ目のステップを設定します。
- [Action (アクション)] 項目をクリックして、[Get records (レコードを取得)] を選択します。
- [Object Type (オブジェクト種別)] 項目に、
Price Book Entry
(価格表エントリ) と入力します。 - [Conditions to filter the objects (オブジェクトを絞り込む条件)] 選択リストで、[All conditions must be met (AND) (すべての条件を満たす必要がある (AND))] を選択します。
- 項目に [Pricebook2Id]、演算子に [Equals (次の値と一致する)] を選択して、単元 1 で取得した標準価格表の価格表 ID を入力します。このフローの例では 01s1U000005mSpYQAU です。
- [Add a condition (条件を追加)] をクリックします。
- 項目に [Product2Id]、演算子に [Equals (次の値と一致する)] を選択し、フローのステップ 1 の商品 ID を指定します。
フローのステップ 3 の価格表エントリのリストから取得した価格表エントリごとに反復処理する For Each ブロックを作成して設定します。フローの後続のステップは、この For Each ブロック内で実行されます。
- プラスアイコンをクリックしてステップを追加します。
- スクロールダウンして [For Each] を選択します。
- [Input list (入力リスト)] 項目で、フローのステップ 3 の [List of Price Book Entry (価格表エントリのリスト)] を選択します。
NetSuite でトリガー商品のものと商品 ID が同じ在庫品目をすべて取得する、フローの 4 つ目のステップを作成します。
- プラスアイコンをクリックしてステップを追加します。
- [NetSuite] をクリックします。
-
[Add new NetSuite connection (新しい NetSuite 接続を追加)] をクリックします。
メモ: 今回初めて接続する場合はこのオプションが表示されません。次のステップに進みます。 - NetSuite の接続パラメーター値が記載されたテキストファイルを参照して、必須の値を入力し、接続表示名を
NTO NetSuite
にして、[Create (作成)] をクリックします。MuleSoft Composer で接続が自動的にテストされます。エラーメッセージが表示されていない場合は接続が確立され、フローの 4 つ目のステップが表示されます。
NetSuite でトリガー商品のものと商品 ID が同じ在庫品目をすべて取得する 4 つ目のステップを設定します。
- [Action (アクション)] 項目をクリックして、[Get Records (レコードを取得)] を選択します。
- [Record Type (レコードタイプ)] 項目に、
INVENTORY_ITEM
と入力します。 - [Conditions to filter the objects (オブジェクトを絞り込む条件)] 選択リストで、[All conditions must be met (AND) (すべての条件を満たす必要がある (AND))] を選択します。
- 項目に [Salesforce Product ID (Salesforce 商品 ID)]、演算子に [Is (次の値と等しい)] を選択し、フローのステップ 1 の商品 ID を指定します。
トリガー商品に対応する在庫品目があるかどうかを判断する If/Else ブロックを作成して設定します。
- プラスアイコンをクリックしてステップを追加します。
- スクロールダウンして [If/Else Block (If/Else ブロック)] をクリックします。デフォルトで [All conditions must be met (AND) (すべての条件を満たす必要がある (AND))] が選択されています。
- 項目にフローのステップ 4 の [List of INVENTORY_ITEM (INVENTORY_ITEM のリスト)]、演算子に [Is empty (空)] を選択します。この条件を満たした場合は、商品に対応する在庫品目がないことになります。その場合は、If ブランチの後続の 2 つのステップ (NetSuite での在庫品目の作成、Salesforce での商品の更新) が実行されます。
NetSuite で関連付けられた商品 ID を使用して在庫品目を作成する、フローの 4 つ目のステップを If/Else ブロックの If ブランチ内に作成します。
- プラスアイコンをクリックして If ブランチにステップを追加します。
- [NetSuite] をクリックして、[NTO NetSuite] をクリックします。
NetSuite で関連付けられた商品 ID を使用して在庫品目を作成する 5 つ目のステップを If ブランチ内に設定します。
- [Action (アクション)] 項目をクリックして、[Create Record (レコードを作成)] を選択します。
- [Type of Record (レコードタイプ)] 項目に、
INVENTORY_ITEM
と入力します。 - [Add Fields (項目を追加)] をクリックします。
- 検索項目を使用して、次の項目を見つけて選択し、[Add (追加)] をクリックします。
ヒント: 検索する項目のキーワードを入力し、表示された項目の中から適切なものを選択します。キーワードをクリアして、次の項目でこのプロセスを繰り返します。すべての項目を選択したら、[Add (追加)] をクリックします。
この結果、[Record Ref List (レコード参照リスト)] という別の項目が自動的に追加されます。[Record Ref List (レコード参照リスト)] を次の価格表エントリのリストにマップします。- Display Name (表示名)
- Item Id (品目 ID)
- Purchase Description (購入説明)
- Record (レコード) > Custom Field List (カスタム項目リスト) > Salesforce Product ID (Salesforce 商品 ID)
- Record (レコード) > Subsidiary List (関連子会社リスト) > Record Ref List (レコード参照リスト) > InternalId
- Record (レコード) > Tax Schedule (税額表) > InternalId
- INVENTORY_ITEM 項目を、フローの先行するステップでキャプチャした対応する項目に次のようにマップします。
- Display Name (表示名) = ステップ 1 の [Product Name (商品名)]
- Item Id (品目 ID) = ステップ 1 の [Product Code (商品コード)]
- Purchase Description (購入説明) = ステップ 1 の [Product Description (商品説明)]
- Record (レコード) > Custom Field List (カスタム項目リスト) > Salesforce Product ID (Salesforce 商品 ID) = ステップ 1 の [Product ID (商品 ID)]
- Record (レコード) > Subsidiary List (関連子会社リスト) > Record Ref (レコード参照) = ステップ 3 の [List of Price Book Entry (価格表エントリのリスト)]
- Record (レコード) > Subsidiary List (関連子会社リスト) > Record Ref (レコード参照) > InternalId =
1
。この値は Honeycomb Mfg 関連子会社を表します。 - Record (レコード) > Tax Schedule (税額表) > InternalId =
1
。この値は S1 税額表を表します。
Sales Cloud で関連付けられた在庫品目の内部 ID を使用してトリガー商品を更新する、フローの 6 つ目のステップを If/Else ブロックの If ブランチ内に作成します。
- プラスアイコンをクリックして If ブランチ内にステップを追加します。
- [Salesforce] をクリックして、[NTO sandbox org (NTO Sandbox 組織)] をクリックします。
Sales Cloud で関連付けられた在庫品目の内部 ID を使用してトリガー商品を更新する 6 つ目のステップを If ブランチ内に設定します。
- [Action (アクション)] 項目をクリックして、[Update record (レコードを更新)] を選択します。
- [Object Type (オブジェクト種別)] 項目に、
Product
(商品) と入力します。[Product ID (商品 ID)] は必須項目のため、自動的に選択されます。 - [Add Fields (項目を追加)] をクリックします。
- 検索ツールを使用して [NetSuite Item ID (NetSuite 品目 ID)] を選択し、[Add (追加)] をクリックします。
- 商品項目を、フローの先行するステップでキャプチャした対応する項目に次のようにマップします。
- Product ID (商品 ID) = ステップ 1 の [Product ID (商品 ID)]
- NetSuite Item ID (NetSuite 品目 ID) = ステップ 5 の [InternalId]
トリガー商品に対応する在庫品目を更新する Else ブランチを If/Else ブロック内に作成します。
- If/Else ブロックの下部にある [Add Else (Else を追加)] をクリックします。
NetSuite で適切な商品の詳細を使用して在庫品目を更新する 7 つ目のステップを If/Else ブロックの Else ブランチ内に作成します。
- プラスアイコンをクリックして Else ブランチ内にステップを追加します。
- [NetSuite] をクリックして、[NTO NetSuite] をクリックします。
NetSuite で適切な商品の詳細を使用して在庫品目を更新する 7 つ目のステップを設定します。
- [Action (アクション)] 項目をクリックして、[Update Record (レコードを更新)] を選択します。
- [Type of Record (レコードタイプ)] 項目に、
INVENTORY_ITEM
と入力します。 - [ID Type (ID 種別)] 項目で、
[INTERNAL (内部)]
を選択します。[Record Id (レコード ID)] は必須項目のため、自動的に選択されます。 - [Add Fields (項目を追加)] をクリックします。
- 検索項目を使用して、次の項目を見つけて選択し、[Add (追加)] をクリックします。
- Display Name (表示名)
- Purchase Description (購入説明)
- INVENTORY_ITEM 項目を、フローの先行するステップでキャプチャした対応する項目に次のようにマップします。
- Record Id (レコード ID) = ステップ 1 の [NetSuite Item ID (NetSuite 品目 ID)]
- Display Name (表示名) = ステップ 1 の [Product Name (商品名)]
- Purchase Description (購入説明) = ステップ 1 の [Product Description (商品説明)]
NetSuite でトリガー商品のものと商品 ID が同じ在庫品目をすべて取得する、フローの 8 つ目のステップを作成します。このステップは If/Else ブロック外にありますが、その外側の For Each ブロック内に存在します。
- プラスアイコンをクリックしてステップを追加します。
- [NetSuite] をクリックして、[NTO NetSuite] をクリックします。
NetSuite でトリガー商品のものと商品 ID が同じ在庫品目をすべて取得する 8 つ目のステップを設定します。この情報を使用して、次のアセンブリ品目に入力します。
- [Action (アクション)] 項目をクリックして、[Get Records (レコードを取得)] を選択します。
- [Record Type (レコードタイプ)] 項目に、
INVENTORY_ITEM
と入力します。 - [Conditions to filter the objects (オブジェクトを絞り込む条件)] 選択リストで、[All conditions must be met (AND) (すべての条件を満たす必要がある (AND))] を選択します。
- 項目に [Salesforce Product ID (Salesforce 商品 ID)]、演算子に [Is (次の値と等しい)] を選択し、フローのステップ 1 の商品 ID を指定します。
NetSuite で適切な商品と在庫品目の詳細を使用して、関連付けられた在庫品目を含む新しいアセンブリ品目を作成する、フローの 9 つ目のステップを作成します。
- プラスアイコンをクリックして If ブランチにステップを追加します。
- [NetSuite] をクリックして、[NTO NetSuite] をクリックします。
NetSuite で適切な商品と在庫品目の詳細を使用して、関連付けられた在庫品目を含む新しいアセンブリ品目を作成する 9 つ目のステップを作成して設定します。アセンブリ品目が、在庫品目に関連付けられているものと同じ関連子会社の内部 ID を使用していることを確認します。
- [Action (アクション)] 項目をクリックして、[Create Record (レコードを作成)] を選択します。
- [Type of Record (レコードタイプ)] 項目に、
ASSEMBLY_ITEM
と入力します。 - [Add Fields (項目を追加)] をクリックします。
- 検索項目を使用して、次の項目を見つけて選択し、[Add (追加)] をクリックします。
その結果、[Item Member List (品目メンバーリスト)] と 2 つの [Pricing List (価格設定リスト)] の計 3 つの項目が自動的に追加されます。この 3 つの項目を次の関連する項目にマップします。- Description (説明)
- Display Name (表示名)
- Item Id (品目 ID)
- Use Component Yield (部品の歩留まりの使用)
- Record (レコード) > Member List (メンバーリスト) > Item Member (品目メンバー) > Bom Quantity (BOM 数量)
- Record (レコード) > Member List (メンバーリスト) > Item Member (品目メンバー) > Item (品目) > InternalId
- Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Currency (通貨) > InternalID
- Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Price Level (価格レベル)
- InternalID
- Name (名前)
- Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Price Level (価格リスト)
- Quantity (数量)
- Value (値)
- Record (レコード) > Subsidiary List (関連子会社リスト) > Record Ref List (レコード参照リスト) > InternalId
- Record (レコード) > Tax Schedule (税額表) > InternalId
- ASSEMBLY_ITEM 項目を、フローの先行するステップでキャプチャした対応する項目に次のようにマップします。
メモ: 項目を複数の値にマップする必要がある場合は、その項目をクリックして、[Custom Expression (カスタム式)] をクリックします。カスタム式エディターが開きます。このカスタム式エディターを使用して、フローの先行するステップから取り込む動的な項目値とユーザーが入力する静的なテキストを組み合わせた項目を設定します。- Description (説明) = ステップ 1 の [Product Description (商品説明)]
assembly item
(アセンブリ品目) (アセンブリの前にスペースを挿入) - Display Name (表示名) = ステップ 1 の [Product Name (商品名)] ステップ 1 の [Last Modified Date (最終更新日)] ([Last Modified Date (最終更新日)] の前にスペースを挿入)
- Item Id (品目 ID) = ステップ 1 の [Product Code (商品コード)] ステップ 1 の [Last Modified Date (最終更新日)] ([Last Modified Date (最終更新日)] の前にスペースを挿入)
- Use Component Yield (部品の歩留まりの使用) =
true
。この項目は、製造過程における原材料の損失に対する BOM 数量を自動的に計算するために使用します。 - Record (レコード) > Member List (メンバーリスト) > Item Member (品目メンバー) > Item Member List (品目メンバーリスト) = ステップ 8 の [List of INVENTORY_ITEM (INVENTORY_ITEM のリスト)]
- Record (レコード) > Member List (メンバーリスト) > Item Member (品目メンバー) > Bom Quantity (BOM 数量) =
10
- Record (レコード) > Member List (メンバーリスト) > Item Member (品目メンバー) > Item (品目) > InternalId = ステップ 8 の [Record (レコード)] > [InternalId]
- Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Pricing List (価格設定リスト) = ステップ 3 の [List of Price Book Entry (価格表エントリのリスト)]
- Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Currency (通貨) > InternalID =
1
。この値は米ドルを表します。 - Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Price Level (価格レベル):
- InternalID =
1
。この値は米ドルサブリストのリスト価格レベルを表します。 - Name (名前) =
List Price
(リスト価格)。この値は米ドルサブリストのリスト価格レベルの名前です。
- InternalID =
- Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Price Level (価格レベル) > Price (価格) > Price List (価格レベル) = ステップ 3 の [List of Price Book Entry (価格表エントリのリスト)]
- Record (レコード) > Pricing Matrix (価格設定マトリックス) > Pricing (価格設定) > Price List (価格リスト):
- Quantity (数量) =
0
。この値は米ドルサブリストの数量 0 列を表します。 - Value (値) = ステップ 3 の [List Price (リスト価格)]
- Quantity (数量) =
- Record (レコード) > Subsidiary List (関連子会社リスト) > Record Ref (レコード参照) = ステップ 3 の [List of Price Book Entry (価格表エントリのリスト)]
- Record (レコード) > Subsidiary List (関連子会社リスト) > Record Ref (レコード参照) > InternalId =
1
。この値は Honeycomb Mfg 関連子会社を表します。フローのステップ 5 で在庫品目の作成に使用したものと同じです。 - Record (レコード) > Tax Schedule (税額表) > InternalId =
1
。この値は S1 税額表を表します。
- Description (説明) = ステップ 1 の [Product Description (商品説明)]
- フローを保存します。フロー全体は次のようになります。
順調です! 次の単元では、フローをテストして正常に機能することを確認する方法を学習します。