こんにちは、アンダーソンです。
使えると便利な画面フロー。でも結構難しい気がしてなかなか手が出せないって方も
多いのではないでしょうか。
今回は画面フローで選んでもらった値を元にレコードを作成したり更新したりする方法をまとめました。
Contents
ゴール
まずはゴールです。
画面フローはこんな感じです。

実際のフローはこんな感じ。

選択した値が複数の場合でもそれを一つづつ分割して、その値を元に
データに更新をかけていくって感じです。
ではやってみましょう。
画面フローでの選択肢
画面フローにおける選択肢系のものは何種類かあるのでまとめておきます。
リソース系
・選択肢
・レコード選択肢セット
・選択リスト選択肢セット
画面コンポーネント
・チェックボックスグループ
・ラジオボタン
・選択リスト
・複数選択リスト
・連動選択リスト
です。今回は、リソース系の違いの解説と、
チェックボックスグループの実装を実際にやっていきます。
画面コンポーネントのうち、ラジオボタン、選択リスト、連動選択リストはそれぞれにAPI参照名が振られており、かつアウトプットが単一なのでそこまで処理は難しくないのですが、チェックボックスグループと複数選択リストは複数アウトプットされる事があるので、その事を考えた実装にしないといけません。
てゆーかぱっと見では正直わかりにくいですよね。ぶっちゃけどう違うのか、もう少しわかりやすい日本語なかったのかと思います笑
とにかく、まずリソース系の違いをみていきましょう。
リソース系
選択肢
その名の通り選択肢です。
公式の説明では
『ラジオボタンコンポーネントや複数選択リストコンポーネントなどの画面コンポーネントで使用する選択肢を作成します。』
です。ふむふむ。では実際に作ってみます。

リッチテキストとかもできるんで見た目を綺麗にしたい場合は使える。
でも一つの選択肢につき一つの値なので、選択肢分リソースを作成する必要がある。
選択リストにあるのを使うなら使う事ないような気がする。
レコード選択肢セット
選択肢のセットです。
選択肢のセットって選択肢ではないのかと思いますよね。そうです、選択肢です。
これは条件に合致したレコードを取得してそれを選択肢としてできるリソースです。
例えば商談の取引先に紐づく取引先責任者って複数いるんで、その取引先責任者を選択して何か処理をしたい。みたいな時に使います。では実際に作ってみましょう。

レコードを取得と同じ感じで使える。
レコード自体を選択リストみたいに使って選択したものに対して何か処理するとかできる。
表示ラベルにNameとか指定しておくとわかりやすい。
選択肢の値は選択した時に裏で持つ値の事。
選択リスト選択肢セット
はい、選択肢ですね。今度は選択リストの選択肢セットです。
こちらはオブジェクトの選択リスト項目もしくは複数選択リスト項目から選択肢を作成する事ができるリソースです。
簡単そうですね。実際に作ってみましょう。

オブジェクト指定して、項目指定して並び順決めるだけの簡単仕様。
すでにある選択リストを表示させるならこれで十分。
チェックボックスグループに入れる
では先ほど作成した三つの選択肢をチェックボックスグループに入れてみましょう。
画面フローを作成して、チェックボックスグループを持ってきて、API名を決めます。
選択肢を選択で先ほど作成したものを指定します。



選択肢のところに先ほど作成したリソースを埋め込めばOK。
ちなみに選択肢に関しては猫と犬を作成したので、二つ当てはめました。
選択肢に複数のリソースを埋め込むとデフォルト値を選べるようになります。

選択した値を分割していく
画面フローで選択した値は、下記のように『; 』区切りで保存されます。
なのでこれを分割していく必要があります。

まず分割していく方法ですが、数式リソースを二つ用意します。
一つは、ID1; ID2; ID3 となっているものを左から『; 』の分とっていく数式。
もう一つは上でとった分を消し込んで、選択した値に書き直し、ID2; ID3; の状態にする数式です。
まず一つ目(var_SelectedContactに選択した値を入れてます)
IF(ISBLANK( {!var_SelectedContact}),
null,
IF(NOT(CONTAINS( {!var_SelectedContact}, '; ')),
{!var_SelectedContact},
LEFT( {!var_SelectedContact}, FIND(';', {!var_SelectedContact})-1)
)
)
次に二つ目
IF( NOT (
CONTAINS( {!var_SelectedContact} , '; ')), null,
RIGHT( {!var_SelectedContact} , LEN( {!var_SelectedContact} ) - FIND( ';', {!var_SelectedContact} ) -1 )
)
これを決定部分で一つ目の数式がNullかどうかを判断します。

次にレコードに対して割り当て。
一つ目の数式はID1; ID2; ID3のID1が取れるので、レコードのIdにセットします。

複数ある想定なので、コレクションに追加します。

最後に『var_SelectedContact』この中は現状ではID1; ID2; ID3この形式なので、
二つ目の数式でID2; ID3この形にして、『var_SelectedContact』に入れ直します。

で、もう一回決定にいき。。といった感じで、『var_SelectedContact』の中に値がある限りループされます。
『var_SelectedContact』が空になれば、一つ目の数式はNullになるので、決定では全て追加にいきレコードを更新で追加していたコレクション変数を更新してあげるだけでOKです。
まとめ
まとめてる人がほとんどいなくて、ちょっと驚きながらやってみたので備忘録こみの
ブログです。フローのまとめは画像多めになりますが、参考になれば幸いです。