他開発言語経験者が陥りそうな箇所だと思ったので、メモというか備忘録というか(;´Д`)
Power Automate の IF関数
他の開発言語と同様に「条件に合致するか否か」で処理を分岐する関数です。
if(<expression>, <valueIfTrue>, <valueIfFalse>)
アクションの分岐ではなく、例えば SharePoint のリスト項目を作成する際に「Aだったら〇〇、それ以外なら××」みたいな”アクション中の動作を条件で切り替える”ための関数です。
NGパターン1:条件における式
例えば「配列の要素(アレイの中身)が1個より多い場合」という条件で分岐したい、としましょう。C# や Java の経験があると、下記のような記載をしたくなるかと思います。
if( 1 < length(<配列>), <Trueの処理>, <Falseの処理>)
はい、上記はフローでエラーになります。
見えづらいかもしれませんが、アクションの項目が赤文字になってますよね。
参考までに、Automate で配列の要素数を取得したい場合は length関数 を利用します。なので、要素数を求める関数が間違っているワケではありません。
Power Automate のエラーメッセージは具体的にドコが悪いか?の詳細が解説されない場合が多いです。なので、いったいナニが何だかってなりますよね・・・。
正しくは下記のように記述します。
if( greater(length(<配列>),1), <Trueの処理>, <Falseの処理>)
記事投稿時点では、所謂「式が持つ値」による判定ができないようです。冒頭で紹介したDocsにも記載ないので”おそらく”です・・・。IF関数の条件に指定できるのは、True・Falseの2値を返却できる関数などに限定されるように見受けられますね。
なお、”n以上”や”以下”に関しては 論理比較関数 を利用して記述します。
NGパターン2:False時の式 省略
他開発言語経験者であれば同意いただけると思うのですが「条件がTrueの時だけ〇〇の処理をして、Falseの時は何もしなくてよい」という場合、Falseの処理を省略しますよね?
if( greater(length(<配列>),1), <Trueの処理> )
上記のような感じで、他の開発言語はFalseの処理を記載しなくても問題ないモノが多いです。そして、Automate も関数を上記のように記述した時点ではエラーになりません。しかし・・・。
実行時にエラーになります(;´Д`)
エラーメッセージ抜粋はこんな感じ。
'テンプレート言語関数 'if' には次の 3 つのパラメーターが必要です: 最初のパラメーターとしてテストする条件、2 番目のパラメーターとして条件が true の場合に返される値、3 番目のパラメーターとして条件が false の場合に返される値。
とっても、わかりづらいですね・・・。Falseの時は何もしなくて良い場合であったとしても、ちゃんと省略せずに記載する必要があるよ、って言ってるみたいです。こちらも、公式の Docs には記載されていません。(とはいえ、False時が省略できる、とも書いてないのでグレーと言われれば・・・)
まとめ
- Power Automate でも IF関数で条件分岐が可能
- アクションの分岐ではない点に注意
- IF関数の条件式は「1<比較対象」のような式を書くとエラーになる
- 論理比較関数などを利用しましょう
- Falseの条件は省略できない
- 実行するまでエラーにならないので注意
なお、画面イメージは「試験的な機能」をオンにしています。記事投稿時点の状況なので、今後のVerUpで変更になる可能性があります。ご留意ください。
(´ω`)。○○(あえて記載する必要もないかな、と思いつつ)
まさか、Falseの場合が省略できないなんて思いもしませんでした。当方と同じ箇所で躓く方が1名でも減りますように・・・。
それでは、皆さま、素晴らしい Power Platform Life を!