【Power Automate】初心者がつまずく「式の書き方」|OData × WDL の使い分け

Power AutomateのODataとWDLの使い分けを示す図解。取得前に絞るODataと取得後に処理するWDLの対比、扱う4箇所(複数の項目の取得・アレイのフィルター処理・条件・Switch) Power Automate

この記事でわかること

Power Automateを触っていると、式の書き方が場面ごとにバラバラで混乱します。

  • フィルターで「等しい」を書くのに、eq のときと equals() のときがある
  • 同じ「1」でも、引用符で囲む('1')のときと囲まない(1)のときがある

これは、Power AutomateにはODataWDLという2つの別言語が混在していて、しかも「書く場所」によって使う言語が変わるからです。この記事では、実際に業務フロー(SharePointの名簿からPlannerにタスクを配るもの)を組みながら整理した、4つの代表的なアクションでの書き分けルールをまとめます。

  • 式を書く場所(代表4アクション)
  • 複数の項目の取得のフィルタークエリ(OData)の書き方
  • アレイのフィルター処理(WDL)の書き方
  • 条件・Switchでの書き方の違い

辞書のように、必要なところだけ読んでもらってもOKです。

式を書く場所

混乱したらまずこの表に戻ってきてください。

場所言語「等しい」の書き方
複数の項目の取得(フィルタークエリ)ODataeq
アレイのフィルター処理WDLequals()
条件WDLequals() など
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)))
// いずれかのフィルター結果に該当する要素があれば真
条件アクションでCondition expressionを設定している画面

「配列の中身が1件以上あるか」を判定したいときは length() を組み合わせるのが私のやり方です。基本モードのプルダウンだけでは組みにくい条件は、迷わずfxに切り替えるようにしています。

Switch(切り替え)アクションの式の書き方

Switchアクションでは、同じアクションの中でも欄によって書き方が変わります。

①「オン」=分岐の元になる値 → fxで動的に書く

int(items('For_each')?['SectionNo'])
// 今ループ中の項目のSectionNo列を、整数にして取り出す
Switchのオンにfx式を設定している画面

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

Caseの等しい欄に固定値を入力している画面
Switchの複数Caseとデフォルトが並んでいる画面

課番号の1、2、3…といった毎回変わらない固定値は、fxも引用符も要らず、素の数字をそのまま打ちます。「オンは動的にfxで取り出す」「ケースは固定値をベタ打ちする」という役割の違いを意識すると、迷わなくなりました。

まとめ

今回のポイントです。

  • 式を書く代表的な箇所4つ:複数の項目の取得(OData)/アレイのフィルター処理・条件(WDL)/Switch(オンはfx・ケースはベタ打ち)
  • 「等しい」の書き方は場所によって変わる:eq(OData)か equals()(WDL)か
  • 文字列は引用符で囲み、数値は囲まない。この基本ルールはOData・WDL共通

式でつまずいたときに、この記事をまた開いてもらえたらうれしいです。

Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。

コメント

タイトルとURLをコピーしました