Skip to main content

繰り返しをループ処理する

学習の目的

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

  • 繰り返しの入力内容をループ処理して、単一の統合されたコレクションに追加できるようにする。
  • 1 つのコレクションから、レコードの更新と作成を同時に行えるようにする。
Note

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

前の単元で作成した [Mass Create & Update Contacts (取引先責任者の一括作成と更新)] フローの作業を続けましょう。

メモ

メモ

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

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

レコードを変更してコレクションに追加するためにループ処理を行う

このフローはデータを取得する準備はできていますが、その前にデータをフローで使用できる構造、つまりレコードコレクション変数に整理する必要があります。変換要素は繰り返しのデータを扱えないため、ループ要素と割り当て要素を使用して、繰り返し内のすべてのコンポーネントの値をレコード変数に追加します。その後、同じ割り当て要素を使って、そのレコード変数の内容を新しいレコードコレクション変数に追加できます。

レコード 1 は繰り返しの値からレコード変数にコピーされ、そのレコード変数がコレクション変数に移されます。

繰り返しの値を参照する際は、[Added Items (追加された項目)]、[Prepopulated Items (事前入力された項目)]、[Deleted Items (削除された項目)]、または [All Items (すべての項目)] を選択できます。

  • [Added Items (追加された項目)] には、繰り返しで新しく追加されたレコードのみが含まれ、事前に読み込まれたレコードは含まれません。
  • [Prepopulated Items (事前入力された項目)] には、事前入力されたレコードのみが含まれ、新しく追加されたレコードは含まれません。
  • [Deleted Items (削除された項目)] には、ユーザーが繰り返しから削除したレコードのみが含まれます。
  • [All Items (すべての項目)] には、追加されたレコード、事前入力されたレコード、削除されたレコードのすべてが含まれます。

なぜこれらの項目が分かれているのでしょうか。たとえば、削除要素を使用して [Deleted Items (削除された項目)] に含まれるすべてのレコードを組織のデータベースから削除する場合など、各グループに対して異なる処理を行うことがあるからです。各グループの項目を処理する場合は、それぞれ別のループを使用するようにしてください。

このフローでは削除されたレコードは考慮せず、フローの最後で特別な方法を使用して、新しいレコードの作成と変更されたレコードの更新をまとめて行います。そのため、ここでは [All Items (すべての項目)] オプションを使用します。

  1. [Mass Create & Update Contacts (取引先責任者の一括作成と更新)] フローを開きます。
  2. [Get Details (詳細を取得)] 要素の後にループ要素を追加します。
    • [Label (表示ラベル)] に「LoopRepeater」と入力します。
      [API Name (API 参照名)] に LoopRepeater と自動入力されます。
    • コレクション変数に [Get Details (詳細を取得)] > [ContactRepeater] > [All Items (すべての項目)] を選択します。
  3. コンポーネントからのデータを、フローがレコードとして認識できる構造にまとめるため、レコード変数を作成します。
    • [リソース種別] で [変数] を選択します。
    • [API Name (API 参照名)] に「CurrentContact」と入力します。
    • [Data Type (データ型)] で [Record (レコード)] を選択します。
    • [Object (オブジェクト)] で [Contact (取引先責任者)] を選択します。
    • [Done (完了)] をクリックします。
  4. 各繰り返し項目をレコードとして構造化した後にすべて収集するため、レコードコレクション変数を作成します。
    • [リソース種別] で [変数] を選択します。
    • [API Name (API 参照名)] に「NewAndChangedContacts」と入力します。
    • [Data Type (データ型)] で [Record (レコード)] を選択します。
    • [Allow multiple values (collection) (複数の値を許可 (コレクション))] を選択します。
    • [Object (オブジェクト)] で [Contact (取引先責任者)] を選択します。
    • [Done (完了)] をクリックします。
  5. [For Each (各要素)] パスで割り当て要素を追加します。
    • [Label (表示ラベル)] に「Add Repeater Entry to Collection (コレクションに繰り返しエントリを追加)」と入力します。
      [API Name (API 参照名)] に「Add_Repeater_Entry_to_Collection」と自動入力されます。
    • [Variable (変数)] で [CurrentContact] > [Contact ID (取引先責任者 ID)] を選択します。
      繰り返しには [Id (ID)] 項目が表示されていませんが、コレクションに入れるレコードには ID を含める必要があります。ID がないと、フローは既存レコードとの対応関係を判断できず、既存の取引先責任者であっても新規レコードを作成してしまいます。その結果、繰り返し内の各レコードについて、たとえそのレコードがすでに存在していても、フローは新しいレコードを作成してしまいます。(重複データに注意しましょう。)
    • [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
    • [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [Id (ID)] を選択します。
  6. [Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
    • [Variable (変数)] で [CurrentContact] > [Account ID (取引先 ID)] を選択します。
    • [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
    • [Value (値)] で [varAccountID] を選択します。
  7. [Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
    • [Variable (変数)] で [CurrentContact] > [First Name (名)] を選択します。
    • [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
    • [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [名前 (名)] > [First Name (名)] を選択します。
  8. [Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
    • [Variable (変数)] で [CurrentContact] > [Last Name (姓)] を選択します。
    • [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
    • [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [名前 (名)] > [Last Name (姓)] を選択します。
  9. [Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
    • [Variable (変数)] で [CurrentContact] > [Title (役職)] を選択します。
    • [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
    • [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [Title (役職)] を選択します。
  10. [Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
    • [Variable (変数)] で [CurrentContact] > [Email (メール)] を選択します。
    • [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
    • [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [Email (メール)] > [Value (値)] を選択します。
  11. [Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
    • [Variable (変数)] で [CurrentContact] > [Business Phone (会社電話)] を選択します。
    • [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
    • [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [Business Phone (会社電話)] > [Value (値)] を選択します。
  12. [Add Assignment (割り当てを追加)] をもう一度クリックして、最後の割り当て行を追加します。
    これまでの行で、[CurrentContact] レコード変数で取引先責任者レコードが組み立てられました。最後の行で、[CurrentContact] レコード変数の内容を [NewAndChangedContacts] レコードコレクション変数に追加します。
    • [Variable (変数)] で [NewAndChangedContacts] を選択します。
    • [演算子] では、[追加] を選択します。
    • [Value (値)] で [CurrentContact] > [Entire Resource (リソース全体)] を選択します。
  13. フローを保存します。

前の手順に対応する Flow Builder キャンバスと割り当て要素の設定パネル。

新規および変更された取引先責任者コレクションを更新/挿入する

最後に、ループの後で [Create Records (レコードを作成)] 要素を追加し、新規および変更されたレコードをデータベースに反映します。

今あなたは「このコレクションには新規レコードと変更されたレコードの両方が含まれているのに、 なぜ [Update Records (レコードを更新)] 要素ではなく [Create Records (レコードを作成)] 要素だけを追加するのだろう?」と思ったかもしれません。この最後の [Create Records (レコードを作成)] 要素では、特別な機能を使用して更新/挿入を実行します。更新/挿入とは、その名のとおり、更新挿入を組み合わせた処理です。既に存在するレコードは更新し、まだ存在しないレコードは作成する処理を、同時に実行するデータステートメントです。Salesforce が「これは確実に同一レコードだ」と判断できる一意の識別子項目がコレクション内の各レコードに含まれていれば、[Create Records (レコードを作成)] 要素で更新/挿入を実行できます。

  1. [After Last (最後の項目の後)] パスで [Create Records (レコードを作成)] 要素を追加します。
    • [Label (表示ラベル)] に「Upsert Contacts (取引先責任者を更新/挿入する)」と入力します。
      [API Name (API 参照名)] に「Upsert_Contacts」と自動入力されます。
    • [How to set record field values (レコード項目値の設定方法)] で [From a Record Variable (レコード変数から)] を選択します。
    • [How Many Records to Create (作成するレコード数)] で [Multiple (複数)] を選択します。
    • [Record Collection (レコードコレクション)] で [NewAndChangedContacts] を選択します。
  2. [Update Existing Records (既存のレコードを更新)] 切り替えスイッチを有効にします。
    この切り替えスイッチによって、この要素の更新/挿入機能が有効になります。
    • 「既存レコードを識別するために使用する項目」が [Record ID (レコード ID)] に設定されていることを確認します。
      割り当て要素で、[CurrentContact] レコード変数に取引先責任者 ID を含めていたことを思い出してください。更新/挿入対象のコレクションには取引先責任者レコードの ID が含まれているため、ここでは [Record ID (レコード ID)] を選択します。
  3. フローを保存します。

前述の手順に対応する Flow Builder キャンバス。

これでフローは完成です。必要であれば、このフローを有効な取引先の Lightning ページにカスタムアクションボタンとして追加し、実際にテストすることもできます。詳細については、「画面フローの配布」バッジの単元「フローをレコードのアクションとして追加」を参照してください。

取引先からこのフローを実行すると、その取引先に関連付けられている既存の取引先責任者が表示され、追加の取引先責任者を作成するための詳細を入力できます。

繰り返しに 2 件の取引先責任者が事前入力された [Mass Create & Update Contacts (取引先責任者の一括作成と更新)] フロー。

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

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

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