この記事でわかること
Power Automateを触っていると、式の書き方が場面ごとにバラバラで混乱します。
- フィルターで「等しい」を書くのに、eq のときと equals() のときがある
- 同じ「1」でも、引用符で囲む(
'1')のときと囲まない(1)のときがある
これは、Power AutomateにはODataとWDLという2つの別言語が混在していて、しかも「書く場所」によって使う言語が変わるからです。この記事では、実際に業務フロー(SharePointの名簿からPlannerにタスクを配るもの)を組みながら整理した、4つの代表的なアクションでの書き分けルールをまとめます。
- 式を書く場所(代表4アクション)
- 複数の項目の取得のフィルタークエリ(OData)の書き方
- アレイのフィルター処理(WDL)の書き方
- 条件・Switchでの書き方の違い
辞書のように、必要なところだけ読んでもらってもOKです。
式を書く場所
混乱したらまずこの表に戻ってきてください。
| 場所 | 言語 | 「等しい」の書き方 |
|---|---|---|
| 複数の項目の取得(フィルタークエリ) | OData | eq |
| アレイのフィルター処理 | WDL | equals() |
| 条件 | WDL | equals() など |
| Switch(オン/ケース) | WDL/固定値 | int(...) またはベタ打ち |
ポイントは、「取得する前」に絞るか「取得した後」に絞るかです。取得前(サーバー側)はOData、取得後(フロー内部)はWDLになります。
複数の項目の取得のフィルタークエリ|OData
OData(Open Data Protocol)は、SharePointなどのサーバーに「この条件のものだけ取ってきて」と指示する問い合わせの書き方です。「複数の項目の取得」アクションのフィルタークエリ欄に書きます。
TriggerType eq '固定日型' and IsActive eq 1
// TriggerTypeが「固定日型」かつIsActiveが1の項目だけ取得

ポイントは4つです。
- SharePointリストの内部名は、シングルクォーテーション(’)で囲まない
- 演算子は eq(equal)・
ne(not equal)のように英字2文字 - 文字列はシングルクォーテーションで囲む(
'固定日型')、数値は囲まない(1)。(IsActiveは、SharePointリストの「はい/いいえ」列) - 複数条件は
and/orを小文字でつなぐ
取得する時点でサーバー側に絞らせるので、全部取ってきてから絞るより軽いのが特長です。
アレイのフィルター処理|WDL
「アレイのフィルター処理」は、取得し終わった配列をフロー側で絞るアクションです。ここはOData欄と同じ「等しい」でも、書き方がまったく変わります。(ここでのRuleMonth, RuleDayは、SharePointリストの「数値列」。intMonth, intDayは、フロー内でint()関数で設定した「整数」タイプの変数です。)
and(equals(item()?['RuleMonth'], variables('intMonth')),
equals(item()?['RuleDay'], variables('intDay')))
// 月と日の両方が一致する要素だけ残す

⚠️ 注意:複数条件をまとめて書くときは、アクションを**「詳細モードで編集する」**に切り替える必要があります。基本モードのままだと and(…) がうまく効かないことがあるので、複数条件のときは詳細モードに切り替えます。
私はここで、ODataの eq の感覚のまま equals を書こうとして通らず、しばらく詰まりました。OData欄に equals()を書いても、WDLの欄に eq を書いても通らないので、「今どっちを書いているか」を意識するだけでミスが減ります。
条件アクションの式の書き方
条件アクションもWDLの仲間です。基本モードのUI操作で組める場合はそれで十分ですが、length() のような関数を使いたいときはfx(詳細モード)に切り替えて手打ちします。
or(greaterOrEquals(length(body('FilterExactDate')), 1),
and(greaterOrEquals(length(body('FilterMonthlyBase')), 1),
equals(length(body('FilterMonthException')), 0)))
// いずれかのフィルター結果に該当する要素があれば真

「配列の中身が1件以上あるか」を判定したいときは length() を組み合わせるのが私のやり方です。基本モードのプルダウンだけでは組みにくい条件は、迷わずfxに切り替えるようにしています。
Switch(切り替え)アクションの式の書き方
Switchアクションでは、同じアクションの中でも欄によって書き方が変わります。
①「オン」=分岐の元になる値 → fxで動的に書く
int(items('For_each')?['SectionNo'])
// 今ループ中の項目のSectionNo列を、整数にして取り出す

②「ケース」=分岐先の固定値 → ベタ打ち


課番号の1、2、3…といった毎回変わらない固定値は、fxも引用符も要らず、素の数字をそのまま打ちます。「オンは動的にfxで取り出す」「ケースは固定値をベタ打ちする」という役割の違いを意識すると、迷わなくなりました。
まとめ
今回のポイントです。
- 式を書く代表的な箇所4つ:複数の項目の取得(OData)/アレイのフィルター処理・条件(WDL)/Switch(オンはfx・ケースはベタ打ち)
- 「等しい」の書き方は場所によって変わる:eq(OData)か equals()(WDL)か
- 文字列は引用符で囲み、数値は囲まない。この基本ルールはOData・WDL共通
式でつまずいたときに、この記事をまた開いてもらえたらうれしいです。
Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。


コメント