こちらの相談を受けたときの要件は「複数選択リストの選択した値の数で顧客のスコアを計算したい」でした。
複数選択リストの値の数が少ない場合は、選択値分のIF文で「1」を足していく数式で良いのですが、選択値の数が多かったので、このIF文を使った方法では適しませんでした。
また、このIF文の方法ですと選択値を追加、修正した際に数式の修正も必要になってしまいます。
今回は選択値の数をあまり気にせず、値の追加、修正での数式の修正が不要となる方法をご紹介いたします。
※テキスト項目の文字数の最大が255文字ですので、選択リストの値のAPI参照名をすべて1文字にしてもこの方法での選択値のカウントの上限は「128」になると思います。
サンプルの要件
リードの複数選択リスト「得意料理」の選択された値の数をカウントする
選択した複数選択リストの値をテキスト化
こちらの
記事でも紹介されているとおり、複数選択リストに対して使用できる関数は多くありません。
複数選択リストで選択された値すべてをテキスト化する関数がないため、他の項目へコピーする方法で対応します。
1.選択した複数選択リストの値を格納するテキスト項目を複数選択リストと同じオブジェクトに作成します。
2.「複数選択リストの値を入力、変更したとき」に1.で作成したテキスト項目に値が挿入される自動化プロセスを設定します。
ワークフロールールやプロセスビルダーでも設定可能ですが、廃止予定ですので、今回はフローの設定画面で紹介します。
レコードトリガフローで作成します。
開始設定について
・
オブジェクト:リード(複数選択リストのあるオブジェクト)
・
フローをトリガする条件:レコードが作成または更新された
・
エントリ条件を設定:
[条件の要件] カスタム条件ロジックに一致
[条件ロジック] 1 OR (2 AND 3)
| 項目 | 演算子 | 値 |
1 | Specialties__c (複数選択リスト項目) | 変更済み | True |
2 | Specialties__c (複数選択リスト項目) | null | False |
3 | MultiSelectPicklist_Text__c (1.で作成した値を格納するテキスト項目) | null | True |
※1は値を変更したとき、2と3が新規作成時に値を選択した場合の条件設定です。
・
フローを最適化:高速項目更新
次に「トリガレコードを更新」をクリックして複数選択リストで選択された値を挿入する設定をします。
・
レコードを更新する条件の要件:なしー常にレコードを更新
・
項目値をレコードに設定:
項目 | 値 |
MultiSelectPicklist_Text__c (1.で作成した値を格納するテキスト項目) | $Record > 得意料理 (複数選択リスト項目) |
最後にフローを[保存]します。
選択数をカウントする数式項目の作成
1.数式の戻り値のデータ型は「数値」にし、以下の数式で数式項目を作成します。
IF(ISBLANK(値を格納するテキスト項目) ,0,LEN(値を格納するテキスト項目) - LEN(SUBSTITUTE(値を格納するテキスト項目, ";", "") )+1) |
この手法はExcelでも使用する、セル内に特定の文字列がいくつあるか調べるときの数式と同じで、今回は複数選択リストの選択値の区切りで使用される
セミコロン(;)をカウントすることで、選択された値の数を算出しています。
【結果確認】
リードを新規作成してみます。得意料理は「ハンバーグ」と「カレー」を選択します。
テキスト項目に選択した値が挿入され、選択数がカウントされました。
テキスト項目に挿入される値は選択値の「API参照名」です。
値の文字数が多い場合や、選択値の数が多くテキスト項目の上限255文字を超えてしまう場合は、API参照名を短縮することで上限に収まるかもしれませんが、この項目を他のプロセス等で使用している場合は注意が必要です。
次に得意料理にオムライスを追加してみると選択数が「3」へ変わりました。
次はすべての値を削除してみます。選択数が「0」になりました。
最後に
私は機能や設定を新たに追加するときは、「稼働後に想定される変更」について考慮されているか検討するようにしています。
こちらの
記事のようなカスタム表示ラベルを使用するなど一手間、一工夫することでメンテナンスや修正がしやすくなります。
未来の自分、または別のシステム管理者のために、みなさんも機能を追加するときは意識してみてはいかがでしょうか。