Skip to main content
3 月 5 日~ 6 日にサンフランシスコで開催される TDX (Salesforce+ でも配信) で「Developer Conference for the AI Agent Era (AI エージェント時代に向けた開発者向けカンファレンス)」にぜひご参加ください。お申し込みはこちら

予想時間

フロー内のフローを実行する

学習の目的

この単元を完了すると、次のことができるようになります。

  • サブフロー要素を使用して、作業を最小限にする。
  • 別のフロー内で実行されるフローを作成する。
  • データを親フローに戻す変数を参照先フローに設定する。
メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

メモ

このバッジは、Flow Builder のスキルを習得するための過程の一部です。「Flow Builder を使用したフローの作成」トレイルでは、初めから終わりまで Flow Builder について学習します。このトレイルで推奨されるバッジの順序に従えば、プロセスの自動化に関する確固たるスキルが身に付き、Flow Builder のエキスパートになります。

怠惰の功名

信じられないかもしれませんが、システム管理者にとって特に重要な資質の 1 つが面倒くさがり屋であることです。

読み間違いではありません。Salesforce 組織で 4 種類のフローに影響する変更を行わなければならない場合、4 つのフローを更新するのと、1 つだけ更新するのとどちらがよいですか? 手品か何かのように聞こえるかもしれませんが、面倒くさいと思えばこそ、不要な作業のような厄介事を簡単に片付けられないかと思案します。

たとえば、Flo の組織には、Chatter に同じメッセージを投稿するフローが 4 つあります。その Chatter 投稿の内容が変更されるたびに、Flo は 4 つのすべてのフローの重複する要素を更新しています。Flo は重複作業の多さにうんざりしています。ここで、私たちがまだ使っていない要素が役に立ちそうです。サブフロー要素です。 

フロー (親フロー) でサブフロー要素を使用すると、別のフロー (子フロー) を参照して、現在の (親) フロー内でその (子) フローを実行できます。4 つのすべてのフローではなく、たった 1 つを変更すればよいことを知り、Flo の期待が膨らみます。さらに、変更するフローが少なければ、見落としや設定ミスが生じる可能性も減少します。

Flo があなたに Chatter 投稿専用のフローを作成するよう依頼しました。新しい子フローを配置して、4 種類のフローの重複要素をまとめて置換できるようにします。さらに、Chatter 投稿に何らかの変更があった場合に、4 つのすべてのフローではなく、子フローを 1 つ更新すれば済むようにします。

洒落た長椅子に横たわり、ヤシの葉で扇いでもらいながら、フローについて考えている Flo Smith。

入力変数と出力変数

子フローの変数は特別です。変数の作成時に、[Available for input (入力で使用可能)][出力で使用可能] という設定があることに気が付きましたか? 変数はこれらの設定を使用して、入力を親フローから子フローに送り、出力を子フローから親フローに送り返すことができます。

[Available for input (入力で使用可能)] と [出力で使用可能] という 2 つのオプションがある [New Resource (新規リソース)] ウィンドウの [フロー外部での可用性]。

ところで、なぜデータを子フローとやり取りするのでしょうか? Flo の例では、子フローが親フローのトリガーレコードの Chatter に投稿するため、子フローにそのトリガーレコードの ID が必要です。子フローが親フローのトリガーレコードにアクセスすることはできないため、親フローがその情報を子フローに送る必要があります。さらに、子フローが作成した Chatter 投稿の ID を親フローが知る必要がある場合は、子フローがその ID を親フローに送り返す必要があります。

変数を子フローの入力または出力で使用可能と定義します。

  • 親フローからデータを受け取るためには、子フローに入力で使用可能な変数が必要です。
  • 子フローの終了時に親フローにデータを送り返すためには、子フローに出力で使用可能な変数が必要です。
  • いずれの方向にもデータを送る必要がない場合は、入力変数も出力変数も必要ありません。

上記の説明に対応するダイアグラム

サブフロー要素を作成する

フローを別のフロー内で実行する場合、まず親フローと子フローを作成します。次に、親フローにサブフロー要素を追加します。

子フローを作成する

  1. フローを作成し、[自動起動フロー] 種別を選択します。
  2. テキスト変数を作成します。
    • API 参照名: userMentionID
    • 入力で使用可能: オン
  1. 別のテキスト変数を作成します。
    • API 参照名: postTargetID
    • 入力で使用可能: オン
  1. テキスト変数をもう 1 つ作成します。
    • API 参照名: chatterPostID
    • 出力で使用可能: オン
  1. テキストテンプレートを作成します。
    • API 参照名: chatterBody
    • 本文: @[{!userMentionID}], please review this record. (@[{!userMentionID}] 様、このレコードを確認してください。)
    • 本文のエディターで、[View as Rich Text (リッチテキストとして表示)] を [View as Plain Text (プレーンテキストとして表示)] に変更します。
  1. アクション要素を追加します。
    • アクション: Chatter に投稿
    • Label (表示ラベル): Chatter Mention Post (Chatter メンション投稿)
    • API 参照名: Chatter_Mention_Post
    • Message (メッセージ): chatterBody
    • 対象名または ID: postTargetID
    • [Show advanced options (詳細オプションを表示)] で [Manually assign variables (手動で変数を割り当て)] を選択します。
    • フィード項目 ID: chatterPostID
  1. フローを保存します。[Flow Label (フローの表示ラベル)] に Post to Chatter (Chatter に投稿) と入力します。
  2. フローを有効にします。

サブフロー要素がある親フローを作成する

  1. レコードトリガーフローを作成します。
    • Object (オブジェクト): Case (ケース)
    • フローをトリガーする条件: レコードが作成または更新された
    • Condition Requirements (条件の要件): [All Conditions Are Met (AND) (すべての条件に一致 (AND))]
    • 条件: [優先度] [Equals (次の文字列と一致する)] [高]
    • 更新されたレコードでフローを実行するタイミング: 条件の要件に一致するようにレコードを更新したときのみ
    • フローを最適化: アクションと関連レコード
  1. サブフロー要素を追加します。
    • [Post to Chatter (Chatter に投稿)] フローを選択します。
    • Label (表示ラベル): Post to Chatter (Chatter に投稿)
    • API 参照名: Post_to_Chatter
    • [postTargetID] 項目を有効にして、[Triggering Case (トリガーケース)] > [Case ID (ケース ID)] を選択します。
      [Subflow (サブフロー)] パネルの [userMentionID] 項目での [Triggering Case (トリガーケース)] > [Owner ID (所有者 ID)] の選択。
    • [userMentionID] 項目を有効にして、[Triggering Case (トリガーケース)] > [Owner ID (所有者 ID)] を選択します。
      必ず下にスクロールして [Owner ID (所有者)] を選択し、[Owner ID (Group) (所有者 ID (グループ))] や [Owner ID (User) (所有者 ID (ユーザー))] を選択しないように注意してください。
メモ

参照先フローに入力で使用可能と設定されている変数がない場合は、[Set Input Values (入力値を設定)] セクションが表示されません。

  1. フローを保存します。[Flow Label (フローの表示ラベル)] に、Case Priority is High (ケース優先度が高) と入力します。

今後、レコード作成のニーズが変化したときに、Flo は子フローを 1 つ更新するだけで済みます。面倒くさいと感じたために、作業が楽になりました!

考慮事項

サブフローを操作するときは、次の点に留意します。

  • サブフロー要素が参照できるのは、自動起動フローと画面フローのみです。
  • 画面フローでは、別の画面フローのみを参照できます。
  • 無効なフローを参照する場合は、「フローの管理」権限があるユーザーに対してのみフローが実行されます。
  • 子フローに複数のバージョンがある場合、親フローは子フローの有効なバージョンを実行します。子フローに有効なバージョンがない場合、親フローは最新のバージョンを実行します。

リソース

ハンズオン Challenge

+500 ポイント

準備を始めましょう

この 単元 は各自のハンズオン組織で実行します。[起動] をクリックして開始するか、組織の名前をクリックして別の組織を選びます。

あなたの Challenge

商談商品フローを簡素化して拡張する
単元 1 の商談商品の作成フローでは、繰り返される要素を、別のフロー (子フロー) を複数回参照するサブフロー要素に置き換えました。また、親フローに別の商品パスを追加しました。事前作業: 単元 1 (フローに複数のパスを定義する) の Challenge をまだ完了していない場合は、先に完了してください。そうしなければ、この Challenge を完了できません。
  • 自動起動フローを作成します
  • テキスト変数を作成します。
    • API 参照名: ProductKW
    • Available for input (入力で使用可能): オン

  • 別のテキスト変数を作成します。
    • API 参照名: OpportunityID
    • Available for input (入力で使用可能): オン

  • 別のテキスト変数を作成します。
    • API 参照名: PricebookID
    • Available for input (入力で使用可能): オン

  • [Get Records (レコードを取得)] 要素を追加します。
    • Label (表示ラベル): Get Product (商品を取得)
    • API 参照名: Get_Product
    • Object (オブジェクト): Product (商品)
    • Condition Requirements (条件の要件): All Conditions Are Met (AND) (すべての条件に一致 (AND))
      • Field (項目): Name
      • Operator (演算子): Contains (次の文字列を含む)
      • Value (値): ProductKW
    • 他の設定はすべてデフォルト値を維持

  • Get Product 要素の後に [Get Records (レコードを取得)] 要素を追加します。
    • Label (表示ラベル): Get PBE (PBE を取得)
    • API 参照名: Get_PBE
    • Object (オブジェクト): Price Book Entry (価格表エントリ)
    • Condition Requirements (条件の要件): All Conditions Are Met (AND) (すべての条件に一致 (AND))
    • 条件の要件を追加します。
      • Field (項目): Pricebook2Id
      • Operator (演算子): Equals (次の文字列と一致する)
      • Value (値): PricebookID
    • もう 1 つ条件の要件を追加します。
      • Field (項目): Product2Id
      • Operator (演算子): Equals (次の文字列と一致する)
      • Value (値): Product from Get_Product (Get_Product 商品) > Id (商品 ID)
    • 他の設定はすべてデフォルト値を維持

  • Get PBE 要素の後に [Create Records (レコードを作成)] 要素を追加します。
    • Label (表示ラベル): Create Opp Name (商談商品を作成)
    • API 参照名: Create_Opp_Product
    • How to set record field values (レコードの項目値の設定方法): Manually (手動)
    • Object (オブジェクト): Opportunity Product (商談商品)
    • 項目値を設定します。
      • Field (項目): Opportunity ID (商談 ID)、Value (値):OpportunityID
      • Field (項目): Price Book Entry ID (価格表エントリ ID)、Value (値): Price Book Entry from Get PBE (Get PBE 価格表エントリ) > Price Book Entry ID (価格表エントリ ID)
      • Field (項目): Quantity (数量)、Value (値): 1
      • Field (項目): Total Price (合計金額)、Value (値): Price Book Entry from Get PBE (Get PBE 価格表エントリ) > List Price (リスト価格)

  • フローを保存して有効化します。
    • Label (表示ラベル): Subflow-Create Generator Opp Product (サブフロー - 発電機商談商品を作成)
    • API 参照名: Subflow_Create_Generator_Opp_Product

  • Add Generator Product to Named Opps フローの新規バージョンを作成します (フローを開き、[Save As New Version (新規バージョンとして保存)] をクリックします。)
  • 次の要素を削除します。
    • Create 1500 Opp Product
    • Create 2000 Opp Product
    • Get 1500 PBE
    • Get 2000 PBE
    • Get 1500 Product
    • Get 2000 Product

  • 1500kW パスで、サブフロー要素を追加します。
    • [Subflow-Create Generator Opp Product (サブフロー - 発電機商談商品を作成)] を選択する
    • Label (表示ラベル): Create 1500 Opp Product (1500 商談商品を作成)
    • API 参照名: Create_1500_Opp_Product
    • [OpportunityId] 項目を含め、[Triggering Opportunity (トリガー商談)] > [Opportunity ID (商談 ID)] を選択する
    • [PricebookID] 項目を含め、[Price Book from Get Pricebook (Get Pricebook 価格表)] > [Price Book ID (価格表 ID)] を選択する
    • [ProductKW] 項目を含め、1500 と入力する

  • 2000kW パスで、サブフロー要素を作成します。
    • [Subflow-Create Generator Opp Product (サブフロー - 発電機商談商品を作成)] を選択する
    • Label (表示ラベル): Create 2000 Opp Product (2000 商談商品を作成)
    • API 参照名: Create_2000_Opp_Product
    • [OpportunityId] 項目を含め、[Triggering Opportunity (トリガー商談)] > [Opportunity ID (商談 ID)] を選択する
    • [PricebookID] 項目を含め、[Price Book from Get Pricebook (Get Pricebook 価格表)] > [Price Book ID (価格表 ID)] を選択する
    • [ProductKW] 項目を含め、2000 と入力する

  • Check Opp Name 決定要素で、新しい結果を追加します。
    • Label (表示ラベル): 1000kW
    • API 参照名: X1000kW
    • Condition Requirements (条件の要件): All Conditions Are Met (AND) (すべての条件に一致 (AND))
    • Resource (リソース): Triggering Opportunity (トリガー商談) > Name (商談名)
    • Operator (演算子): Contains (次の文字列を含む)
    • Value (値): 1000

  • 1000kW パスで、サブフロー要素を作成します。
    • [Subflow-Create Generator Opp Product (サブフロー - 発電機商談商品を作成)] を選択する
    • Label (表示ラベル): Create 1000 Opp Product (1000 商談商品を作成)
    • API 参照名: Create_1000_Opp_Product
    • [OpportunityId] 項目を含め、[Triggering Opportunity (トリガー商談)] > [Opportunity ID (商談 ID)] を選択する
    • [PricebookID] 項目を含め、[Price Book from Get Pricebook (Get Pricebook 価格表)] > [Price Book ID (価格表 ID)] を選択する
    • [ProductKW] 項目を含め、1000 と入力する

  • フローを保存して有効化します。
Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む