実装したいこと
スクリーンフローの選択肢を動的に作成したい。
会計年度が2022年度 2022/04~2023/03の時は
2022/03
2022/04
2022/05
2022/06
2022/07
2022/08
2022/09
2022/10
2022/11
2022/12
2023/01
2023/02
2023/03
を表示します。
また2023年度 2023/04~2024/03の時は
2023/03
2023/04
2023/05
2023/06
2023/07
2023/08
2023/09
2023/10
2023/11
2023/12
2024/01
2024/02
2024/03
を表示します。
解決策
独自の選択肢リストをつくるには コレクション選択肢セットとレコードコレクション変数を使います。
ここが分かりませんでした、ずっとApexで定義されたコレクション変数を使おうとしていましたが、全くうまくいきません。
ここではレコードコレクション変数を使います。実際にはオブジェクトにレコードは保存しないので、使うオブジェクトはダミー扱いなので何を利用しても問題はないと思います。
まずは、04から03までの12個のレコードを作りたいと思います。これはテキスト型のコレクション変数を利用します。
また、この04なら今日の日付を確認して2023/01~2023/03の間であれば2022/04をセットする変数を作ります。
テキスト型のコレクションでループを回すのでこの数式ではこのループの変数を使います。
年度を求める数式
IF(AND( TODAY() >= DATE(YEAR(TODAY()),1,1) ,TODAY() <= DATE(YEAR(TODAY()),3,20) ),
IF({!textCollectionLoop} >= "04",TEXT(YEAR(TODAY())-1) + "/" + {!textCollectionLoop} ,TEXT(YEAR(TODAY())) + "/" + {!textCollectionLoop} ),
IF({!textCollectionLoop} >= "04",TEXT(YEAR(TODAY())) + "/" + {!textCollectionLoop} ,TEXT(YEAR(TODAY())+1) + "/" + {!textCollectionLoop} )
)
確実に並び順を保証するためにコレクション変数を並び替えます。そのための順番を計算する変数も作ります。
今回はこれらの月以外に2つほど文字の選択肢も追加したいので04月を03番目として計算します。
ここではオブジェクトのテキスト型のフィールドを使います。数値型では並び替えたときにエラーになります。
CASE({!textCollectionLoop},
"04","03",
"05","04",
"06","05",
"07","06",
"08","07",
"09","08",
"10","09",
"11","10",
"12","11",
"01","12",
"02","13",
"14")
レコードコレクション変数に追加する前にはオブジェクトの変数に値をセットします。
今回はループの中で使うので追加でなく次の文字と一致するを使います。