1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【フロー】画面フローで親オブジェクトの項目に連動する選択リストを表示する

Last updated at Posted at 2024-07-08

Salesforceの画面フローにおいて、親オブジェクトの項目に連動する選択リストを設定する方法を考えてみます。

考える具体例

取引先オブジェクトのレベルという選択リスト項目の値によって、商談オブジェクトのレベルという選択リスト項目の選択可能な値を制御します。
ここで、それぞれの項目は下記のように定義します。

オブジェクト 表示ラベル API参照名 選択リスト値
取引先 レベル Level__c A,B,C,D,E
商談 レベル Level__c A,B,C,D,E

また、連動の関係は下記のように設定します。

取引先.レベル 商談.レベルの選択可能値
A A,B,C,D,E
B B,C,D,E
C C,D,E
D D,E
E E

選択リスト値を連動させる考え方

上記のような連動を行う場合は、それぞれの選択肢に対して数値を割り振り、選択可能値を数値の範囲を満たす条件によって設定する方法が使えます。
例えば、下記のように数値を割り当てることを考えます。

レベル 数値
A 1
B 2
C 3
D 4
E 5

このような設定を行うと、選択可能値は下記の条件を満たす選択肢となることがわかります。

取引先.レベルの数値 <= 商談.レベルの数値

実装方法

画面フローを構築する際に、選択リスト値を取得するロジックを使用しますので、下記の記事を参考にして作成しておきます。

フローの種類を選択する

フローの種類は 「画面フロー」 を選択します。

Flow_ScreenFilteringPicklist_フロー種別の選択.png

入力変数を定義する

入力変数として下記を準備します。

  • recordId : 商談レコードを入力する商談オブジェクトのレコード型の入力で使用可能な変数

Flow_ScreenFilteringPicklist_入力変数_recordId.png

内部変数を定義する

内部変数として下記を準備します。

  • LevelPicklistValueInfo : 商談オブジェクトのレベル項目の中で選択可能値を含む変数

Flow_ScreenFilteringPicklist_内部変数_LevelPicklistValueInfo.png

取引先を取得する

レコードの取得要素を使用して、入力変数から取引先(Account)を取得します。
ここでは下記のような設定とします。

  • API参照名 : Get_Account
  • オブジェクト : 取引先
  • 絞り込み条件 : すべての条件に一致(AND)
    • Id 次の文字列と一致する {!recordId.AccountId}
  • 保存するレコード数 : 最初のレコードのみ

Flow_ScreenFilteringPicklist_レコード取得_Get_Account.png

商談オブジェクトのレベル項目の選択リスト値を取得する

サブフローを使用して商談オブジェクトのレベル項目の選択リスト値を取得します。
ここでは下記のような設定とします。

  • API参照名 : Get_LevelPicklistValueInfo
  • 入力値 :
    • FieldApiName : Level__c
    • SObjectApiName : Opportunity

Flow_ScreenFilteringPicklist_サブフロー_Get_LevelPicklistValueInfo.png

選択リスト値をループする

取得したオブジェクト権限(ObjectPermissions)をループします。
ここでは下記のような設定とします。

  • API参照名 : Loop_LevelPicklistValueInfo
  • コレクション変数 : {!Get_LevelPicklistValueInfo.PicklistValueInfoList}

Flow_ScreenFilteringPicklist_ループ_Loop_LevelPicklistValueInfo.png

数式リソースを作成する

レベル項目を数値化するために、下記の数式リソースを作成します。

  • Formula_AccountLevel : 取引先のレベル項目を数値に変換するための数式リソース
CASE( TEXT( {!Get_Account.Level__c} ) ,
  "A" , 1 ,
  "B" , 2 ,
  "C" , 3 ,
  "D" , 4 ,
  "E" , 5 ,
  0
)
  • Formula_OpportunityLevel : 商談のレベル項目を数値に変換するための数式リソース
CASE( {!Loop_LevelPicklistValueInfo.Value} ,
  "A" , 1 ,
  "B" , 2 ,
  "C" , 3 ,
  "D" , 4 ,
  "E" , 5 ,
  0
)

Flow_ScreenFilteringPicklist_数式リソース_Formula_AccountLevel.png
Flow_ScreenFilteringPicklist_数式リソース_Formula_OpportunityLevel.png

ループの中で選択リスト値の数値による判定を行う

ループの中で取引先のレベル項目の数値と商談のレベル項目の数値を比較します。
ここでは下記のような設定とします。

  • API参照名 : Decide_ValueOfPicklist
  • 結果 - 1 : 選択可能
    • API参照名 : Decide_ValueOfPicklist_Available
    • 条件 : すべての条件に一致(AND)
      • {!Formula_AccountLevel} 以下 {!Formula_OpportunityLevel}
  • デフォルトの結果 : 選択不可

Flow_ScreenFilteringPicklist_決定_Decide_ValueOfPicklist.png

選択リストを追加する

選択可能な場合にループの中の選択リスト値情報を変数に追加します。
ここでは下記のような設定とします。

  • API参照名 : Assign_AddPicklistValueInfo
  • 変数値を設定 :
    • {!LevelPicklistValueInfo} 追加 {!Loop_LevelPicklistValueInfo}

Flow_ScreenFilteringPicklist_割り当て_Assign_AddPicklistValueInfo.png

コレクション選択肢セットを作成する

選択可能な選択リスト値が抽出されたコレクション変数からコレクション選択肢セットを作成します。
ここでは下記のような設定とします。

  • API参照名 : LevelPicklistValueSet
  • コレクション : {!LevelPicklistValueInfo}
  • 選択肢表示ラベル : Label
  • データ型 : テキスト
  • 選択肢の値 : Value

Flow_ScreenFilteringPicklist_コレクション選択肢セット_LevelPicklistValueSet.png

画面を配置する

選択リストを配置する画面を設定します。
ここでは下記のような設定とします。

  • API参照名 : Screen_SelectLevel

Flow_ScreenFilteringPicklist_画面_Screen_SelectLevel.png

画面に選択リストを配置する

配置した画面に選択リストコンポーネントを配置します。
ここでは下記のような設定とします。

  • API参照名 : Level
  • データ型 : テキスト
  • コンポーネントの種類 : 選択リスト
  • 選択肢 : {!LevelPicklistValueSet}

Flow_ScreenFilteringPicklist_画面要素_Level.png

選択された値で商談のレベル項目を更新する

画面で選択された値で商談の項目を更新します。
ここでは下記のような設定とします。

  • API参照名 : Update_Opportunity
  • オブジェクト : 商談
  • 絞り込み条件 : すべての条件に一致(AND)
    • Id 次の文字列と一致する {!recordId.Id}
  • 更新項目 :
    • Level__c : {!Level}

Flow_ScreenFilteringPicklist_レコード更新_Update_Opportunity.png

フローの完成

完成したフローの形は下記のような形になります。

Flow_ScreenFilteringPicklist_フロー全体像.png

フローの保存

フローを保存します。

Flow_ScreenFilteringPicklist_フロー保存.png

実行してみる

適当な取引先のレベル項目を変更して、フローを実行します。
ここでは取引先のレベル項目を"C"に変更した場合のイメージを載せておきます。

Flow_ScreenFilteringPicklist_フロー実行.png

本記事では言及していませんが、画面に表示される選択リスト値の順序は保証されませんので、順序を整列したい場合はコレクションの並び替えを利用するなどの工夫が必要になります。

まとめ

本記事は下記の機能を実際に使うことを想定して作成しました。

他のポイントとしては、連動関係を単純なIF関数による条件分岐ではなく、数値に置き換えた形で実装する方法にあるかと思っています。
本記事では条件を数値の範囲条件に置き換えて考えましたが、数値へ置き換えて条件分岐を簡素な作りにする数値遊びは他にも多くあるため、追々紹介できたらと思います。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?