入力値を制限できる選択リストはSalesforceの便利な機能の1つですが、フローの中で使用する際はPicklistValueInfoというオブジェクトから取得する必要があります。
本記事では、選択リストの情報がどのように格納されているか、フローの中でどのように使用するかご紹介します。
フローの中で選択リスト項目を変数に割り当てるとどうなるのか?
フローの中で「割り当て」要素で、選択リスト型の項目を変数値に設定すると、どうなるかご存じですか?
結論、該当項目で選択したリストの値ではなく、選択したリストのAPIが変数に設定されます。
以下の場合、選択リストの値ではなくAPIが割当てられる
そのため、レコードの選択リスト項目で指定した値をフローの中で使う場合は、選択リスト値の情報が格納されているPicklistValueInfoを活用する必要があります。
PicklistValueInfoとは
次にPicklistValueInfoについてご説明します。
PicklistValueInfoは、直訳すると「選択リスト値情報」ですね。その名の通り、Salesforce内で選択リストの情報を格納しているオブジェクトです。
例えば、取引先オブジェクトに「業界」という選択リスト型の項目があり、そのリスト値の1つに「IT」という値があるとします。この場合、「IT」という1つの選択リスト値に対して1つのレコードが存在します。
そのためフローの中で選択リストの値を取得する際は、どのオブジェクトのどの項目のどの値なのか指定する必要があります。
続いてPicklistValueInfoのレコードを取得するために必要なデータを2つご紹介します。
- エンティティパーティクル
エンティティパーティクルは項目の定義に関するメタデータを格納しているオブジェクトです。
1つの項目につき1レコードが保存されているので、エンティティパーティクルから全オブジェクトにおける項目特有のID値を取得できます。フローでは、PicklistValueInfoのレコードを絞り込むために使います。 - エンティティ定義
エンティティ定義はオブジェクトなどの定義に関するメタデータが格納されているオブジェクトです。
1つのオブジェクトに対し、1レコードが保存されています。エンティティ定義からオブジェクト特有のID値を取得することで、エンティティパーティクルのレコードをオブジェクトごとに絞り込むことができます。
実際にフローを作ってみた
ここまで記載した内容を踏まえてフローを作りました。
取引先オブジェクトの選択リスト型の項目Aで選択した値を、他の項目に割り当てます。
(通常は数式項目の方が適していますが、今回はフローで実装します。)
全体の流れは以下のようになります。(検索条件が複数ある場合はすべてANDです)
- レコードで選択した選択リスト型項目Aの値を変数Pに設定(選択リスト値のAPIが選択リストに格納される)
- エンティティ定義から、取引先オブジェクトを示すレコードを取得
a. 検索条件①:QualifiedApiName = “取引先オブジェクトのAPI” - エンティティパーティクルから、項目Aを示すレコードを取得
a. 検索条件①:QualifiedApiName = “項目AのAPI”
b. 検索条件②:EntityDefinitionId = Get.エンティティ定義.DurableId - PicklistValueInfoから、項目Aで選択した選択リスト値を取得
a. 検索条件①:EntityParticleId = Get.エンティティパーティクル..DurableId
b. 検索条件②:Value = “変数P” - テキスト項目Bに“Get.PicklistValueInfo.Label”を割り当てる
以下が実際に作成した画面です。
最後に
いかがだったでしょうか。本記事では、選択リストの値をフローで使用する方法をご紹介しました。
Salesforceの開発は、選択リストのようにユーザーには見えない裏側のデータ構造への理解が必要な場合があります。
Salesforceの開発で悩んだときは、インターネットで他の方が既に質問していることが多いので、どんどん検索するようにしましょう。
本記事が、Salesforceの開発業務をしている方々の参考になれば幸いです。
Salesforce導入・活用支援のご案内
サンブリッジが提供するSalesforce導入・活用支援サービスは、お客様の現状の業務用件や目指すゴールをヒアリングし、システム設計から実装までを行います。
導入後のトレーニングまでを含むきめ細やかなサービスを一貫して実施することにより、Salesforceの活用向上と導入の効果を最大化します。