繰り返しをループ処理する
学習の目的
この単元を完了すると、次のことができるようになります。
- 繰り返しの入力内容をループ処理して、単一の統合されたコレクションに追加できるようにする。
- 1 つのコレクションから、レコードの更新と作成を同時に行えるようにする。
前の単元で作成した [Mass Create & Update Contacts (取引先責任者の一括作成と更新)] フローの作業を続けましょう。
レコードを変更してコレクションに追加するためにループ処理を行う
このフローはデータを取得する準備はできていますが、その前にデータをフローで使用できる構造、つまりレコードコレクション変数に整理する必要があります。変換要素は繰り返しのデータを扱えないため、ループ要素と割り当て要素を使用して、繰り返し内のすべてのコンポーネントの値をレコード変数に追加します。その後、同じ割り当て要素を使って、そのレコード変数の内容を新しいレコードコレクション変数に追加できます。

繰り返しの値を参照する際は、[Added Items (追加された項目)]、[Prepopulated Items (事前入力された項目)]、[Deleted Items (削除された項目)]、または [All Items (すべての項目)] を選択できます。
-
[Added Items (追加された項目)] には、繰り返しで新しく追加されたレコードのみが含まれ、事前に読み込まれたレコードは含まれません。
-
[Prepopulated Items (事前入力された項目)] には、事前入力されたレコードのみが含まれ、新しく追加されたレコードは含まれません。
-
[Deleted Items (削除された項目)] には、ユーザーが繰り返しから削除したレコードのみが含まれます。
-
[All Items (すべての項目)] には、追加されたレコード、事前入力されたレコード、削除されたレコードのすべてが含まれます。
なぜこれらの項目が分かれているのでしょうか。たとえば、削除要素を使用して [Deleted Items (削除された項目)] に含まれるすべてのレコードを組織のデータベースから削除する場合など、各グループに対して異なる処理を行うことがあるからです。各グループの項目を処理する場合は、それぞれ別のループを使用するようにしてください。
このフローでは削除されたレコードは考慮せず、フローの最後で特別な方法を使用して、新しいレコードの作成と変更されたレコードの更新をまとめて行います。そのため、ここでは [All Items (すべての項目)] オプションを使用します。
- [Mass Create & Update Contacts (取引先責任者の一括作成と更新)] フローを開きます。
- [Get Details (詳細を取得)] 要素の後にループ要素を追加します。
- [Label (表示ラベル)] に「
LoopRepeater」と入力します。
[API Name (API 参照名)] にLoopRepeaterと自動入力されます。
- コレクション変数に [Get Details (詳細を取得)] > [ContactRepeater] > [All Items (すべての項目)] を選択します。
- [Label (表示ラベル)] に「
- コンポーネントからのデータを、フローがレコードとして認識できる構造にまとめるため、レコード変数を作成します。
- [リソース種別] で [変数] を選択します。
- [API Name (API 参照名)] に「
CurrentContact」と入力します。
- [Data Type (データ型)] で [Record (レコード)] を選択します。
- [Object (オブジェクト)] で [Contact (取引先責任者)] を選択します。
-
[Done (完了)] をクリックします。
- [リソース種別] で [変数] を選択します。
- 各繰り返し項目をレコードとして構造化した後にすべて収集するため、レコードコレクション変数を作成します。
- [リソース種別] で [変数] を選択します。
- [API Name (API 参照名)] に「
NewAndChangedContacts」と入力します。
- [Data Type (データ型)] で [Record (レコード)] を選択します。
-
[Allow multiple values (collection) (複数の値を許可 (コレクション))] を選択します。
- [Object (オブジェクト)] で [Contact (取引先責任者)] を選択します。
-
[Done (完了)] をクリックします。
- [リソース種別] で [変数] を選択します。
- [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)] を選択します。
- [Label (表示ラベル)] に「
-
[Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
- [Variable (変数)] で [CurrentContact] > [Account ID (取引先 ID)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [varAccountID] を選択します。
- [Variable (変数)] で [CurrentContact] > [Account ID (取引先 ID)] を選択します。
-
[Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
- [Variable (変数)] で [CurrentContact] > [First Name (名)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [名前 (名)] > [First Name (名)] を選択します。
- [Variable (変数)] で [CurrentContact] > [First Name (名)] を選択します。
-
[Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
- [Variable (変数)] で [CurrentContact] > [Last Name (姓)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [名前 (名)] > [Last Name (姓)] を選択します。
- [Variable (変数)] で [CurrentContact] > [Last Name (姓)] を選択します。
-
[Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
- [Variable (変数)] で [CurrentContact] > [Title (役職)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [Title (役職)] を選択します。
- [Variable (変数)] で [CurrentContact] > [Title (役職)] を選択します。
-
[Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
- [Variable (変数)] で [CurrentContact] > [Email (メール)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [Email (メール)] > [Value (値)] を選択します。
- [Variable (変数)] で [CurrentContact] > [Email (メール)] を選択します。
-
[Add Assignment (割り当てを追加)] をクリックして、割り当て行をもう 1 行追加します。
- [Variable (変数)] で [CurrentContact] > [Business Phone (会社電話)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [Current Item from Loop LoopRepeater (ループ LoopRepeater の現在の項目)] > [Business Phone (会社電話)] > [Value (値)] を選択します。
- [Variable (変数)] で [CurrentContact] > [Business Phone (会社電話)] を選択します。
-
[Add Assignment (割り当てを追加)] をもう一度クリックして、最後の割り当て行を追加します。
これまでの行で、[CurrentContact] レコード変数で取引先責任者レコードが組み立てられました。最後の行で、[CurrentContact] レコード変数の内容を [NewAndChangedContacts] レコードコレクション変数に追加します。- [Variable (変数)] で [NewAndChangedContacts] を選択します。
- [演算子] では、[追加] を選択します。
- [Value (値)] で [CurrentContact] > [Entire Resource (リソース全体)] を選択します。
- [Variable (変数)] で [NewAndChangedContacts] を選択します。
- フローを保存します。

新規および変更された取引先責任者コレクションを更新/挿入する
最後に、ループの後で [Create Records (レコードを作成)] 要素を追加し、新規および変更されたレコードをデータベースに反映します。
今あなたは「このコレクションには新規レコードと変更されたレコードの両方が含まれているのに、 なぜ [Update Records (レコードを更新)] 要素ではなく [Create Records (レコードを作成)] 要素だけを追加するのだろう?」と思ったかもしれません。この最後の [Create Records (レコードを作成)] 要素では、特別な機能を使用して更新/挿入を実行します。更新/挿入とは、その名のとおり、更新と挿入を組み合わせた処理です。既に存在するレコードは更新し、まだ存在しないレコードは作成する処理を、同時に実行するデータステートメントです。Salesforce が「これは確実に同一レコードだ」と判断できる一意の識別子項目がコレクション内の各レコードに含まれていれば、[Create Records (レコードを作成)] 要素で更新/挿入を実行できます。
- [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] を選択します。
- [Label (表示ラベル)] に「
- [Update Existing Records (既存のレコードを更新)] 切り替えスイッチを有効にします。
この切り替えスイッチによって、この要素の更新/挿入機能が有効になります。- 「既存レコードを識別するために使用する項目」が [Record ID (レコード ID)] に設定されていることを確認します。
割り当て要素で、[CurrentContact] レコード変数に取引先責任者 ID を含めていたことを思い出してください。更新/挿入対象のコレクションには取引先責任者レコードの ID が含まれているため、ここでは [Record ID (レコード ID)] を選択します。
- 「既存レコードを識別するために使用する項目」が [Record ID (レコード ID)] に設定されていることを確認します。
- フローを保存します。

これでフローは完成です。必要であれば、このフローを有効な取引先の Lightning ページにカスタムアクションボタンとして追加し、実際にテストすることもできます。詳細については、「画面フローの配布」バッジの単元「フローをレコードのアクションとして追加」を参照してください。
取引先からこのフローを実行すると、その取引先に関連付けられている既存の取引先責任者が表示され、追加の取引先責任者を作成するための詳細を入力できます。
![繰り返しに 2 件の取引先責任者が事前入力された [Mass Create & Update Contacts (取引先責任者の一括作成と更新)] フロー。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/loops-in-flow-builder/loop-through-a-repeater/images/ja-JP/dbd95a2058adc417567da92503c178e0_kix.hf6sa94vzkrx.png)
