今回はLightningフローについて実際に僕が陥ったミスついて述べたいと思います。
判定条件の「設置済み」について
フローを扱う際に決定要素の分岐条件はビジネスロジックを生成するにあたり使用されることが多いかと思います。
条件の設定として、「次の文字列と一致する」「次の文字列と一致しない」などの選択肢がありますが、なんとなく日本語から想像ができるかと思います。
その中でひとつ誤解を産みやすいものとして「設定済み」という選択肢があります。
「設定済み」は文面通り受け取ると、Not Null(Is Not Blank)だと思われがちですが実は違うんです。
Salesforceのドキュメントをよく見てみると、このように記載されていました。
[リソース] の値がレコード変数の項目であり、フローでその項目に少なくとも 1 回値が入力されている。
そうなんです!
「設定済み」が適用されるのはレコード変数に対してとなります。
「設置済み」についてフロー動作を確認する
実際に言葉だけだと分かりづらいため、決定要素の「設定済み」の動作を確認するためにフローで検証してみました。
まずは、レコード変更フローでレコードが作成される前のトリガにしてフローを作成します。
今回は2つのパターンで確認します。
1つめは、レコード変数を定義してレコード変数の項目に値を割り当てた時のその前後の設定済み状態を調べます。
設定済みと判定された場合に以下のテキスト型カスタム項目に記録します。
- レコード変数設定前→項目の割り当てを行う前に判定し、設定済みがYesであれば「設定済み」を書き込み
- レコード変数設定後→項目の割り当てを行う後に判定し、設定済みがYesであれば「設定済み」を書き込み
2つめは、レコード変数フローで使用されるトリガレコード($Record)の項目に対して値を割り当てた時のその前後の設定済み状態を調べます。
こちらは設定済みと判定された場合に以下のテキスト型カスタム項目に記録します。
- トリガレコード設定前→項目の割り当てを行う前に判定し、設定済みがYesであれば「設定済み」を書き込み
- トリガレコード設定後→項目の割り当てを行う後に判定し、設定済みがYesであれば「設定済み」を書き込み
これで、レコード作成時にフローが動作した時にどのような状態となっているかを確認してみます。
この通りレコード変数に対しては「設定済み」の判定が機能するのがわかりましたが、$Record変数に対しては項目の設定有無に関わらず「設定済み」と判断されてしまうことになります。
まとめ
フロー演算子の「設定済み」についてまとめると以下のようになります。
- 演算子の「設定済み」はNot Nullではなく、レコード変数の項目に対してフロー内で値が設定されていたかをチェックするもの
- 設定済みは$Record グローバル変数に対しては全て「設定済み」として扱われる(有用な判断ができないため注意!)
僕は「設定済み」がNot Nullだと誤解していました。
そのため、分岐条件を全部書き換えるハメに…。
ちなみに、Not Nullで条件分岐したい場合はフロー演算子に「null」という選択肢があるので、値をFalseにすることで判定が可能です。