コレクション変数内のデータを整理する
学習の目的
この単元を完了すると、次のことができるようになります。
- コレクション変数の内容を絞り込む。
- コレクション変数の内容を並べ替える。
- コレクション変数に含める値の数を制限する。
コレクション変数を使用する前に、状況によってはコレクションの内容を変更しておく必要があります。Flow Builder では、要素を使用して、コレクションから不要な値を削除したり、コレクション内の値の順序を変更したり、コレクションを特定の数の値に制限したりできます。これらの処理は、[Collection Filter (コレクション検索条件)] 要素と [Collection Sort (コレクション並べ替え)] 要素を使用して実現できます。これらの要素の概要と役に立つ理由について確認していきましょう。
コレクションの内容を絞り込む
[Collection Filter (コレクション検索条件)] 要素は、[Label (表示ラベル)] に示されているように、コレクションに検索条件を適用し、条件の要件を満たさない値を除外します。ただし、厳密に言うと少し違います。入力した元のコレクション自体は変更されず、[Collection Filter (コレクション検索条件)] 要素によって、条件の要件を満たさない値を含まない新しいコレクションが作成されます。この動作は、元の絞り込み前のコレクションを引き続き使用できるため、便利な場合があります。
![元のレコードコレクションのコピーを [Collection Filter (コレクション検索条件)] 要素が作成することを示すフロー図。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/multirecord-elements-and-transforms-in-flows/organize-data-in-a-collection-variable/images/ja-JP/55e2e334b6fcf73e7f6b45bbd55cc320_kix.x8meczdzv24a.png)
たとえば、新しいサービスのお知らせを送信するためのメールアドレスを含むテキストコレクションがあるとします。このとき、競合他社のドメインを含むメールアドレスには、このメッセージを送信したくない場合があります。このフローには、元々収集したすべてのメールアドレスを含むテキストコレクションと、競合他社のメールアドレスを除外したテキストコレクションの 2 つが存在することになります。
コレクションの内容を並べ替えて制限する
[Collection Sort (コレクション並べ替え)] 要素を使用すると、設定した条件に基づいてコレクション内の順序を変更できます。たとえば、商談レコードを含むコレクションを、金額で降順に並べ替えることができます。
また、[Collection Sort (コレクション並べ替え)] 要素には、もう 1 つ重要な機能があり、コレクションに含める値の数を制限し、その上限を超えた値をすべて削除できます。たとえば、金額で降順に並べ替えた後で上位 10 件の商談のみを残す、といった使い方ができます。それ以外の商談は、コレクションから削除されます。
ここで注意すべき点として、[Collection Filter (コレクション検索条件)] 要素とは異なり、[Collection Sort (コレクション並べ替え)] 要素は新しいコレクションを作成しません。その代わりに、並べ替え対象として選択した元のコレクションそのものを変更します。
![元のレコードコレクションが [Collection Sort (コレクション並べ替え)] 要素によって変更されることを示すフロー図。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/multirecord-elements-and-transforms-in-flows/organize-data-in-a-collection-variable/images/ja-JP/099b41de879211ebde7983f444b7024d_kix.t4buld88dvt0.png)
ここで、「絞り込みや並べ替え、制限といった処理のやり方ならすでに知っています。[Get Records (レコードを取得)] 要素でも同じことができるのではないでしょうか?」と思ったかもしれません。そのとおりです。そして可能な場合は、[Get Records (レコードを取得)] 要素の機能を使用するのがベストプラクティスです。追加の要素を使用するよりも効率的で、処理も高速です。[Collection Filter (コレクション検索条件)] 要素や [Collection Sort (コレクション並べ替え)] 要素を使用するのは、[Get Records (レコードを取得)] 要素が実行される時点ではまだ条件が決まらない場合、たとえば、決定要素や画面入力によって後から条件が決まる場合などです。
フローで絞り込みと並べ替えを行う
ここでは、[Collection Filter (コレクション検索条件)] 要素と [Collection Sort (コレクション並べ替え)] 要素を使用してフローを作成するシナリオを確認します。商品マーケティングチームでは、キャンペーンの管理にエージェントを使用しており、商品ベースのキャンペーンにキャンペーンメンバーをすばやく追加できる機能を求めています。購入額が多い顧客は再購入率が高いため、商品マーケティングチームは、キャンペーンの商品キャンペーン種別に一致する主力商品を含む、成立済み商談の上位 10 件を特定し、それらの商談の取引先責任者をキャンペーンメンバーとして追加するよう、エージェントに依頼しています。
フローを作成して必要なレコードを取得する
自動起動フロー (トリガーなし) を作成します。次に、プロンプトテンプレートからキャンペーン ID を受け取るための変数を追加し、フローで必要となるデータを取得するために複数の [Get Records (レコードを取得)] 要素を追加します。
- 自動起動フロー (トリガーなし) を作成します。
- キャンペーンの ID を受け取る変数を作成します。
- [API Name (API 参照名)] に
recordIdと入力します。
- [データ型] で [テキスト] を選択します。
- [Availability Outside the Flow (フロー外部での可用性)] で [Available for input (入力で使用可能)] を選択します。
エージェントからデータを受け取る必要がある変数では、[Available for Input (入力で使用可能)] 設定を有効にする必要があります。
- [API Name (API 参照名)] に
- フローキャンバスで、[Get records (レコードを取得)] 要素を作成します。
- [Label (表示ラベル)] に「
Get Campaign Details(キャンペーンの詳細を取得)」と入力します。
[API Name (API 参照名)] にGet_Campaign_Detailsと自動入力されます。
- [Object (オブジェクト)] で [Campaign (キャンペーン)] を選択します。
- [Condition Requirements (条件の要件)] で [All Conditions Are Met (AND) (すべての条件に一致 (AND))] を選択します。
- [Field (項目)] で [Campaign ID (キャンペーン ID)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [recordId] を選択します。
- 残りの項目はデフォルトのままにします。
- [Label (表示ラベル)] に「
- [Get Campaign Details (キャンペーンの詳細を取得)] 要素の後に、別の [Get Records (レコードを取得)] 要素を追加します。
- [Label (表示ラベル)] に「
Get Opps(商談を取得)」と入力します。
[API Name (API 参照名)] にGet_Oppsと自動入力されます。
- [オブジェクト] で [商談] を選択します。
- [Condition Requirements (条件の要件)] で [All Conditions Are Met (AND) (すべての条件に一致 (AND))] を選択します。
- [Field (項目)] で [Stage (フェーズ)] を選択します。
- [Operator (演算子)] で [Does Not Equal (次の文字列と一致しない)] を選択します。
- [Value (値)] で [Closed Lost (不成立)] を選択します。
- [How Many Records to Store (保存するレコード数)] で、[All records (すべてのレコード)] を選択します。
- 残りの項目はデフォルトのままにします。
- [Label (表示ラベル)] に「
- フローを保存します。
- [Flow Label (フロー表示ラベル)] に「
Create Top 10 Campaign Members(上位 10 件のキャンペーンメンバーを作成)」と入力します。
[Flow API Name (フロー API 参照名)] にCreate_Top_10_Campaign_Membersと自動入力されます。
- [Flow Label (フロー表示ラベル)] に「
決定要素で商品キャンペーン種別を確認する
このフローは、キャンペーンの商品キャンペーン種別に応じて異なる動作をする必要があるため、主要な商品カテゴリごとに分岐する決定要素を作成します。
- [Get Opps (商談を取得)] 要素の後に決定要素を追加します。
- [Label (表示ラベル)] に「
What Product Campaign Type?(商品キャンペーン種別はどれですか?)」と入力します。
[API Name (API 参照名)] にWhat_Product_Campaign_Typeと自動入力されます。
- [Label (表示ラベル)] に「
- [Outcome Details (結果の詳細)] を設定します。
- [Label (表示ラベル)] に「
Generators(発電機)」と入力します。
- [Outcome API Name (結果 API 参照名)] に「
Generators(発電機)」と入力します。
- [結果を実行する条件の要件] に [All Conditions Are Met (AND) (すべての条件に一致 (AND))] を選択します。
- [Resource (リソース)] で [Campaign from Get Campaign Details ([Get Campaign Details (キャンペーンの詳細を取得)] からのキャンペーン)] を選択し、次に [Product Campaign Type (商品キャンペーン種別)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [Generators (発電機)] を選択します。
- [Label (表示ラベル)] に「
- 次の内容で新しい結果を作成します。
- [Label (表示ラベル)] に「
Bots(ボット)」と入力します。
- [Outcome API Name (結果の API 参照名)] に「
Bots(ボット)」と入力します。
- [結果を実行する条件の要件] に [All Conditions Are Met (AND) (すべての条件に一致 (AND))] を選択します。
- [Resource (リソース)] で [Campaign from Get Campaign Details ([Get Campaign Details (キャンペーンの詳細を取得)] からのキャンペーン)] を選択し、次に [Product Campaign Type (商品キャンペーン種別)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [Bots (ボット)] を選択します。
- [Label (表示ラベル)] に「
- [Outcome Order (結果の順序)] で [Default Outcome (デフォルトの結果)] を選択します。
- [Label (表示ラベル)] に「
Other(その他)」と入力します。
- [Label (表示ラベル)] に「
- フローを保存します。
コレクションを絞り込んで並べ替える
商品ごとに分岐したパスができましたので、まずメイン商品が発電機である商談のみを含むコレクションを生成するために、[Collection Filter (コレクション検索条件)] 要素を作成します。発電機の商談では、[Main Product Category (主要商品カテゴリ)] 項目の値が [GC] になっています。
- [Generators (発電機)] パスに [Collection Filter (コレクション検索条件)] 要素を追加します。
- [Label (表示ラベル)] に「
Filter Generators(発電機の絞り込み)」と入力します。
[API Name (API 参照名)] にFilter_Generatorsと自動入力されます。
- [Collection (コレクション)] で [Opportunities from Get Opps ([Get Opps (商談を取得)] からの商談)] を選択します。
- [Condition Requirements (条件の要件)] で [All Conditions Are Met (AND) (すべての条件に一致 (AND))] を選択します。
- 最初の検索条件条件の要件で次のように設定します。
- [Field (項目)] で [Main Product Category (主要商品カテゴリ)] を選択します。
- [Operator (演算子)] で [Equals (次の文字列と一致する)] を選択します。
- [Value (値)] で [GC] を選択します。
- [Field (項目)] で [Main Product Category (主要商品カテゴリ)] を選択します。
- [Label (表示ラベル)] に「
次に、新しく作成された発電機の商談コレクションから、金額が最も高い上位 10 件の商談だけに絞り込むため、[Collection Sort (コレクション並べ替え)] 要素を追加します。
- [Generators (発電機)] パスで、[Collection Filter (コレクション検索条件)] 要素の後に [Collection Sort (コレクション並べ替え)] 要素を追加します。
- [Label (表示ラベル)] に「
Top 10 Generator Opps(発電機の上位 10 件の商談)」と入力します。
[API Name (API 参照名)] にTop_10_Generator_Oppsと自動入力されます。
- [Collection Variable (コレクション変数)] で [Opportunities from Filter Generators ([Filter Generators (発電機の絞り込み)] からの商談)] を選択します。
[Collection Filter (コレクション検索条件)] 要素は新しいコレクション変数を作成するため、 [Filter Generators (発電機の絞り込み)] 要素で行ったフィルタリング結果を基に処理を続けるには、そのコレクション変数を選択します。
- [Sort By (並べ替え)] で [Amount (金額)] を選択します。
- [並び替え順] で [降順] を選択します。
- [How Many Items to Keep After Sorting (並べ替え後に保持する項目数)] で [Set the maximum number of items (項目の最大数を設定)] を選択します。
- 表示される項目に
10と入力します。
- [Label (表示ラベル)] に「
- フローを保存します。
キャンペーンメンバーを変換して作成する
これで必要なデータが揃いました。状況が [Closed Lost (不成立)] ではなく、[Main Product Category (主要商品カテゴリ)] が GC である商談を金額順に並べ替えた、上位 10 件の商談コレクションです。次は、それらの商談に関連付けられている取引先責任者を取り出して、キャンペーンメンバーに変換します。最後に、作成したキャンペーンメンバーコレクションを基に、[Create Records (レコード作成)] 要素を使用してキャンペーンメンバーのレコードを作成します。
- [Generators (発電機)] パスで、[Collection Sort (コレクション並べ替え)] 要素の後に変換要素を追加します。
- [Label (表示ラベル)] に「
Transform Generator Contacts to CMs(発電機の取引先責任者を CM に変換)」と入力します。
[API Name (API 参照名)] にTransform_Generator_Contacts_to_CMsと自動入力されます。
- [Source Data (変換元データ)] ボックスで
をクリックします。- [Resource (変換元)] で [Opportunities from Filter_Generators (Filter_Generators からの商談)] レコードコレクション変数を選択します。
[Collection Sort (コレクション並べ替え)] 要素は新しいコレクションを作成しないため、引き続き [Collection Filter (コレクション検索条件)] 要素によって生成されたコレクションを参照します。
- [Resource (変換元)] で [Opportunities from Filter_Generators (Filter_Generators からの商談)] レコードコレクション変数を選択します。
- [Target Data (変換先データ)] ボックスで
をクリックします。- [Data Type (データ型)] で [Record (レコード)] を選択します。
-
[Allow multiple values (collection) (複数の値を許可 (コレクション))] を選択します。
- [Object (オブジェクト)] で [Campaign Member (キャンペーンメンバー)] を選択します。
-
[作成] をクリックします。
- [Data Type (データ型)] で [Record (レコード)] を選択します。
- [Label (表示ラベル)] に「
- 変換元データの ContactId を、変換先データの ContactId に対応付けます。
- CampaignId には数式を割り当てます。この数式では、初期のキャンペーンの ID を CampaignId に設定します。
- [Target Data (変換先データ)] 列で [CampaignId] をクリックします。
-
をクリックし、[Formula (数式)] をクリックします。
- [Search a field… (項目を検索…)] 項目で [recordId] 変数を選択します。
[Formula (数式)] 項目に{!recordId}と入力されます。
-
[Check Syntax (構文を確認)] をクリックして、数式を検証します。
- [Target Data (変換先データ)] 列で [CampaignId] をクリックします。
-
をクリックして [Transform (変換)] パネルを閉じます。
- [Generators (発電機)] パスで、変換要素の後に [Create Records (レコード作成)] 要素を追加します。
- [Label (表示ラベル)] に「
Create Generator CMs(発電機のキャンペーンメンバーを作成)」と入力します。
[API Name (API 参照名)] にCreate_Generator_CMsと自動入力されます。
- [How to set record field values (レコード項目値の設定方法)] で [From a Record Variable (レコード変数から)] を選択します。
- [How Many Records to Create (作成するレコード数)] で [Multiple (複数)] を選択します。
- [Record Collection (レコードコレクション)] で [Campaign Members from Transform Generator Contacts to CMs ([Transform Generator Contacts to CMs (発電機の取引先責任者を CM に変換)] からのキャンペーンメンバー)] を選択します。
- [Label (表示ラベル)] に「
- フローを保存します。

おつかれさまでした。ハンズオン Challenge で [Bots (ボット)] パスに同様の要素を作成して、このフローを完成させます。
最後に、変換の最も重要なルールを覚えておいてください。それは、可能な限りループ要素ではなく変換要素を使用するということです。ループや追加の変換機能については、今後の Trailhead バッジで引き続き学習できます。
