複数のレコードを変換する
学習の目的
この単元を完了すると、次のことができるようになります。
- 変換要素とループ要素のどちらを使用するかを判断する。
- データテーブルコンポーネントを使用して、複数のレコードを取得して選択する。
- 変換要素を使用して、選択した複数のデータテーブルを使用可能なコレクションに変換する。
- 変換要素を使用して、変換元データから変換先データに項目を対応付ける。
- 数式を使用して、画面コンポーネントの選択内容を変換後のコレクションに対応付ける。
変換要素とループ要素
Flow Builder で複数のレコードを変更するには、各レコードを 1 件ずつ変更することもできますが、その方法では非常に非効率です。幸い、Flow Builder には、コレクション内のすべてのレコードをまとめて変更できる 2 つの要素が用意されています。変換要素とループ要素です。
-
変換要素は、1 つ以上のコンポーネントまたは変数 (単一またはコレクション) の値を自動生成された変数にコピーし、そのコピーの最終的な値を変更します。
-
ループ要素は、コレクション内の複数の値を 1 つずつ反復処理し、それぞれの値を一連の要素に順番に渡してフローを実行します。
変換要素は、説明項目をクリアするなど、レコードのグループに対して同じ変更を行う場合に適しています。コピーされたコレクション内の各値に、同じの変更を簡単に適用できるためです。一方、ループ要素は、ユーザーのグループにメールを送信するなど、レコードのグループに対して一括処理を行う場合に適しています。
ここで、「ループ要素を使えば、レコードのグループを順番に処理できるのだから、ループの中に [Update Records (レコードを更新)] 要素を置いて、複数のレコードを変更できるのでは?」と思うかもしれません。それは可能ではありますが、ベストプラクティスではありません。ループ内で [Update Records (レコードを更新)] 要素を使用すると、SOQL クエリの制限を超えてしまう可能性が高くなるためです。[Update Records (レコードを更新)] 要素は、実行されるたびに 1 回の SOQL クエリとみなされ、フローの構成によっては、わずかなループ回数で制限に達してしまうことがあります。
これまでは、ループ内で割り当て要素を使用し、ループの外で [Update Records (レコードを更新)] 要素を使用して、複数のレコード値を更新していたこともあるでしょう。しかし、この方法も現在では、単独ではベストプラクティスとは見なされていません。一般に、同じ処理を行うループ要素と比べて、変換要素は平均で約 10 倍高速です。また、フローが複雑になるほど、変換要素の方がはるかに高い拡張性を発揮します。その結果、ユーザーにとってより高速で優れた体験を提供できるだけでなく、フローが実行時間制限を超えるリスクも大幅に低減されます。
一般的な目安として、変換要素とループ要素のどちらでも実現できる処理がある場合は、変換要素を使用してください。ループ要素は、変換要素を使用できない場合にのみ使用します。
データテーブルでレコードの選択内容を取得する
単元 1 の例のシナリオである [Choose Steps to Update (更新するステップを選択)] フローに戻りましょう。イネーブルメントチームから、複数のステップの状況を一度に更新できるツールが要求されました。そこで、1 つのプロジェクトから複数のステップを選択し、それらすべてに新しい [Status (状況)] 値を設定できる画面フローを作成します。この手順では、画面要素を作成し、ユーザーがステップを選択できるデータテーブルを追加し、さらに新規状況を選択するための選択リストを用意します。
- [Choose Steps to Update (更新するステップを選択)] フローで、[Get Steps (ステップを取得)] 要素の後に画面要素を追加します。
- [Label (表示ラベル)] に「
Select Steps to Update(更新するステップを選択)」と入力します。
[API Name (API 参照名)] にSelect_Steps_to_Updateと自動入力されます。
- [Label (表示ラベル)] に「
- 画面キャンバスにデータテーブルコンポーネントを追加します。
- [API Name (API 参照名)] に「
Select_Steps」と入力します。
- [Label (表示ラベル)] に「
Steps(ステップ)」と入力します。
- [Source Collection (ソースコレクション)] で [Onboarding Project Steps from Get Steps (Get Steps からのオンボーディングプロジェクトステップ)] を選択します。
- [API Name (API 参照名)] に「
-
[行の設定] をクリックしてセクションを開きます。
- [Row Selection Mode (行選択モード)] が [Multiple (複数)] に設定されていることを確認します。
- [Minimum Selection (最小選択数)] に「
1」と入力します。
- [Row Selection Mode (行選択モード)] が [Multiple (複数)] に設定されていることを確認します。
-
[列の設定] をクリックしてセクションを開きます。
- [Source Field (ソース項目)] で [Name (名前)] を選択します。
- [Edit Screen (画面を編集)] ウィンドウ下部の [Done (完了)] ではなく、[Column Options (列オプション)] の [Done (完了)] をクリックします。

-
[+Add Column (列を追加)] をクリックし、同じ手順で [Status__c] 項目と [Assigned_To__c] 項目の列を追加します。
- [Source Field (ソース項目)] で [Name (名前)] を選択します。
- 画面キャンバスに選択リストコンポーネントを追加します。
- [Label (表示ラベル)] に「
New Status(新規状況)」と入力します。
[API Name (API 参照名)] にNew_Statusと自動入力されます。
-
[Require (必須)] を選択します。
- [Choice (選択肢)] で [New Choice Resource (新規選択肢リソース)] を選択します。
- [Resource Type (リソース種別)] で [Picklist Choice Set (選択リスト選択肢セット)] を選択します。
- [API Name (API 参照名)] に「
StepStatus」と入力します。
- [Object (オブジェクト)] で [Onboarding Project Step (オンボーディングプロジェクトステップ)] を選択します。
- [Data Type (データ型)] で [Picklist (選択リスト)] を選択します。
- [Field (項目)] で、[Status (状況)] を選択します。
-
[Done (完了)] をクリックします。
- [Resource Type (リソース種別)] で [Picklist Choice Set (選択リスト選択肢セット)] を選択します。
- [Label (表示ラベル)] に「
-
[Done (完了)] をクリックして画面キャンバスを閉じます。
- フローを保存します。
- このモジュールではこのフローの 2 つのバージョンが必要なため、フローを保存した後、このフローのコピーを別のフローとして保存します。ボタンバーで
をクリックし、[Save As New Flow (新しいフローとして保存)] を選択します。- [Flow Label (フロー表示ラベル)] に「
Choose Steps to Update with Formula(数式を使用して更新するステップを選択)」と入力します。
[Flow API Name (フロー API 参照名)] にChoose_Steps_to_Update_with_Formulaと自動入力されます。
-
[保存] をクリックします。
- [Flow Label (フロー表示ラベル)] に「
変換要素
フローが実行されると、データテーブルにはユーザーが選択したステップレコードが保存されます。ただし、すべての要素がすべての画面コンポーネントにアクセスできるわけではありません。たとえば、更新要素はデータテーブルコンポーネントにアクセスできません。そのため、このフローでは、データテーブルで選択された内容を、更新要素から参照できるコレクションに変換する必要があります。そのために使用するのが変換要素です。
手順に入る前に、変換要素について確認しておきましょう。前述のとおり、変換要素は、1 つ以上のコンポーネントまたは変数 (単一またはコレクション) の値を自動生成された変数にコピーし、そのコピーに対して最終的な値の変更も同時に行います。変換要素は、ケーキ作りに例えることができます。

本当に欲しい最終成果物 (見た目も味も良いケーキ) を作るために、まずは小麦粉や牛乳、卵といった基本的な材料を集めます。すべての材料を組み合わせる必要がありますが、その過程で材料に手を加えつつ、ケーキへと変化させていきます。たとえば、卵を殻付きのまま入れる人はいません。ケーキが食べられなくなってしまいますから。最初に卵の殻を割って中身だけを使いますし、もし殻が入ってしまったら必ず取り除きます。
ケーキ作りと同様に、変換要素を使用すると、複数のデータポイントを組み合わせ、必要に応じて値を変更して、最終的に実用的なデータコレクションを作成できます。
データをある形式から別の形式へ変換する方法は非常に多いため、変換要素はとても柔軟性があります。そのため、1 つのユースケースに対して複数の解決方法が存在する場合もあります。
[Choose Steps to Update (更新するステップを選択)] フローでは、複数の Onboarding Project Steps (オンボーディングプロジェクトステップ) レコードの状況を更新する方法が 2 つあります。どちらの方法も変換要素と更新要素を使用しますが、設定方法は大きく異なります。

どちらの方法も正当ですが、将来的に、いずれかの方法がフローの要素やリソースと互換性を持たないという状況に遭遇する可能性もあります。両方の方法を確認することで、どのように変換要素の機能を活用できるのかを理解し、さまざまな状況に対応できるようにしておきましょう。それでは、準備を整えてフローを進めましょう。
数式を使用して値を変換する
最初の方法では、変換要素を使用して、コレクションで選択されたステップレコードの状況を設定します。
変換元から変換先への項目の対応付け
- [Select Steps to Update (更新するステップを選択)] 要素の後に、変換要素を追加します。
- [Label (表示ラベル)] に「
Transform Step Statuses(ステップの状況を変換)」と入力します。
[API Name (API 参照名)] にTransform_Step_Statusesと自動入力されます。
- [Source Data (変換元データ)] ボックスで
をクリックします。- [Resource (リソース)] で [Select_Steps] 画面コンポーネントを選択します。
- [Select_Steps] ボックスで、[selectedRows] 行の [>] をクリックして、コレクションで使用可能な項目を表示します。
データテーブルは、[Onboarding Project Step (オンボーディングプロジェクトステップ)] レコードのコレクション変数から表示および選択できるように設定されています。そのため、変換要素の変換元データとしてこのデータテーブルを選択すると、[Onboarding Project Step (オンボーディングプロジェクトステップ)] オブジェクトのすべての項目を使用できます。
- [Resource (リソース)] で [Select_Steps] 画面コンポーネントを選択します。
- [Target Data (変換先データ)] ボックスで
をクリックします。- [Data Type (データ型)] で [Record (レコード)] を選択します。
-
[Allow multiple values (collection) (複数の値を許可 (コレクション))] を選択します。
- [Object (オブジェクト)] で [Onboarding Project Step (オンボーディングプロジェクトステップ)] を選択します。
-
[作成] をクリックします。
- [Data Type (データ型)] で [Record (レコード)] を選択します。
- [Source Data (変換元データ)] 列で [Id (ID)] 項目にマウスを合わせ、[Id (ID)] 行の
をクリックします。
[Target Data (変換先データ)] 列のいくつかの行が強調表示されます。これらの行のデータ型は、選択した [Select_Steps] 行と互換性があります。
- [Target Data (変換先データ)] 列で、[Id (ID)] 行の
をクリックします。
2 つの列の [Id (ID)] 項目を結ぶ線が表示されます。この線を「対応付け」と呼びます。変換元の [Id (ID)] 項目が、変換先の [Id (ID)] 項目に対応付けられました。![変換元の [Id (ID)] 項目と変換先の [Id (ID)] 項目を結ぶ対応付けの線。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/multirecord-elements-and-transforms-in-flows/transform-multiple-records/images/ja-JP/1463cd9b81f5f85b31d0e1b45305ead8_kix.r1trgekjbuka.png)
数式を追加する
選択した各オンボーディングプロジェクトステップには、[New Status (新規状況)] 画面コンポーネントで選択した状況を設定したいと考えています。[New Status (新規状況)] 画面コンポーネントを直接 [Status (状況)] 項目に対応付けることはできませんが、数式を使用すれば、画面コンポーネントの値を項目に挿入できます。
- [Target Data (変換先データ)] 列で [Status__c] 行をクリックします。
新しく [Add or edit formula (数式を追加または編集)] アイコンが表示されます。
-
をクリックし、[Formula (数式)] を選択します。
対応付けパネルが [Add Transformation (変換を追加)] パネルに切り替わります。
- [Search a field… (項目を検索…)] 項目で [Select Steps to Update (更新するステップを選択)] を選択し、次に [New Status (新規状況)] を選択します。
[Formula (数式)] 項目には{!New_Status}が表示されます。
-
[Check Syntax (構文を確認)] をクリックして、数式を検証します。
[Check Syntax (構文を確認)] ボタンの横には、すでに [Valid (有効)] と表示されている場合がありますが、それは以前の数式に基づく結果です。ボタンをクリックしたあとも [Valid (有効)] と表示されていれば、数式は正しく設定されています。
- [Add Transformation (変換を追加)] パネルで
をクリックし、対応付けパネルに戻ります。
- フローを保存します。
変換先データの Status__c が、これまでとは異なる対応付けになっていることに注目してください。[New_Status (新規状況)] 画面コンポーネントが、変換先の [Status__c] 値の変換元として [Source Data (変換元データ)] 列に追加されています。
今回は画面コンポーネントを参照しているため、
ボタンから [Formula (数式)] を選択しました。一方、すべてのレコードの状況を [Closed (完了)] に設定するなど、静的値を設定したい場合は [Value (値)] を選択します。その後、静的値を入力して [Done (完了)] をクリックします。

これで変換要素は完成です。この要素には、選択された各オンボーディングプロジェクトステップにつき 1 レコードを含むコレクションが作成されています。ただし、ID のみを対応付け、Status__c を変数で設定しているため、変換後のコレクション内のレコードには、この 2 項目のみが含まれます。この変換後のコレクションは、ツールボックスの [Record Collection Variables (レコードコレクション変数)] セクションには表示されませんが、ちゃんと存在しますので問題ありません。
Onboarding Project Steps (オンボーディングプロジェクトステップ) レコードを更新する
最後に、選択されたすべての Onboarding Project Steps (オンボーディングプロジェクトステップ) レコードの状況を更新する要素を作成します。
- [Transform Step Statuses (ステップの状況を変換)] 要素の後に、[Update Records (レコードを更新)] 要素を追加します。
- [Label (表示ラベル)] に「
Update Steps(ステップを更新)」と入力します。
[API Name (API 参照名)] にUpdate_Stepsと自動入力されます。
- [How to Find Records to Update and Set Their Values (更新するレコードを検索してその値を設定する方法)] で [Use the IDs and all field values from a record or record collection (レコードまたはレコードコレクションからの ID およびすべての項目値を使用)] が選択されていることを確認します。
- [Record or Record Collection (レコードまたはレコードコレクション)] で [Onboarding Project Steps from Transform Step Statuses ([Transform Step Statuses (ステップの状況を変換)] からのオンボーディングプロジェクトステップ)] を選択します。
- フローを保存します。
おつかれさまでした。このフローはこれで完成ですが、次の単元では、レコードコレクションではなくテキストコレクションを使用して、同じ目的を達成する別バージョンのフローを作成します。
