ADVERTISEMENT

【Power Automate】条件分岐でつまずく時の入力値と条件分岐の直し方

【Power Automate】条件分岐でつまずく時の入力値と条件分岐の直し方
🛡️ 超解決

Power Automateで条件分岐を使う際、値が想定通りに動作せず悩むことは多いです。特に、入力値の形式や条件式の記述が原因で、期待しない結果になるケースが目立ちます。本記事では、条件分岐でつまずく原因を切り分け、正しい入力値と条件分岐の修正方法を解説します。具体的な手順や失敗パターンを踏まえ、スムーズにフローを完成させるための実践的な知識を得てください。

【要点】この記事で確認すること

  • 最初に見る場所: 条件アクションの「式」エディタで入力内容を確認する
  • 切り分けの軸: 入力値のデータ型(文字列か数値か)、空値かどうか、大文字小文字の一致
  • 注意点: 会社の環境によってはDLPポリシーで特定のコネクタが制限されている場合があるため、管理者に確認する

ADVERTISEMENT

なぜ条件分岐はうまく動かないのか

Power Automateの条件分岐でつまずく主な原因は、入力値のデータ型と条件式の記述方法にあります。多くの方は、画面上で選択した動的コンテンツがそのまま使えると考えがちですが、実際にはデータ型の不一致や空値の扱いが原因で条件が真にならないケースが頻発します。また、式エディタで手動入力した際の引用符の有無や関数の使い方も、大きな落とし穴です。以下で具体的な原因を掘り下げます。

入力値の型が原因となるケース

Power Automateでは、動的コンテンツから取得した値はすべて文字列型として扱われる場合と、元のデータ型(数値や日付)を保つ場合があります。例えば、SharePointのリストから取得した数値項目は、デフォルトでは文字列として扱われることが多いです。そのため、数値の比較を行う際に、@greaterOrEquals(variables('count'), 10)と書いているつもりでも、変数が文字列型だと比較が正しく行われません。このような場合、int()関数を使って明示的に型変換する必要があります。また、空の値を判定する際には、空文字列とnullの違いに注意してください。empty()関数を使うと両方をまとめて判定できるため、安全です。

条件式の記述ミス

条件式の記述ミスとしては、引用符の付け忘れや関数のスペルミスが典型的です。特に、文字列リテラルは必ずシングルクォーテーションで囲む必要があります。また、動的コンテンツを式の中で使うときは、triggerOutputs()?['body/status']のような構文で参照しますが、パスに誤りがあると値が取得できません。さらに、条件アクションの「値」フィールドに直接式を書く場合と、「式」エディタを使う場合で動作が異なることもあるため、一貫して式エディタを使うことをお勧めします。

条件式の正しい書き方とよくある間違い

条件式の正しい書き方を身につけるには、実際の比較例を見るのが効果的です。以下の表に、よくある状況別の正しい書き方と間違った書き方をまとめました。

状況 正しい書き方 間違った書き方 解説
文字列の比較 @equals(triggerOutputs()?['body/status'],'完了') @equals(triggerOutputs()?['body/status'],完了) 文字列はシングルクォーテーションで囲む必要があります。
数値の比較 @greaterOrEquals(variables('count'),10) @greaterOrEquals(variables('count'),'10') 数値は引用符不要で、数値リテラルとして記述します。
空値チェック @empty(variables('name')) @equals(variables('name'),'') empty()関数はnullと空文字列の両方を判定できます。
大文字小文字の区別をなくす @equals(toLower(variables('city')),'tokyo') @equals(variables('city'),'tokyo') toLower()またはtoUpper()で統一して比較します。
複数条件のAND/OR @and(equals(a,b),greater(c,d)) @equals(a,b) && @greater(c,d) Power Automateではand()or()関数を使います。

失敗パターンと修正方法

値が空の場合の対処

条件分岐で値が空のときに思った通りの分岐にならないケースは非常に多いです。例えば、フォームの入力項目が空欄だった場合、動的コンテンツはnullや空文字列として渡されます。こうした場合、empty()関数を使って空であることを確認し、その後の処理を分岐させると安全です。また、空の値を他の値と比較しようとするとエラーになることがあるため、事前に空チェックを行うことを習慣にしてください。具体的な修正手順は次の項目で説明します。

数値と文字列の不一致

数値として比較したいのに、値が文字列として扱われているために条件が偽になることがあります。この問題は、int()関数やfloat()関数で明示的に数値に変換することで解決します。例えば、SharePointから取得した「金額」フィールドが文字列の場合、@greater(int(variables('amount')), 1000)のように変換してから比較します。また、動的コンテンツのデータ型を事前に把握するために、テスト実行時の出力ログを確認することも重要です。

日本語や特殊文字を含む場合

日本語の文字列を条件式に使う場合、文字コードや全角半角の違いで比較が失敗することがあります。例えば、「東京」と「とうきょう」では当然異なるため、厳密な一致が必要な場合はデータの正規化を検討します。また、特殊文字(改行やタブ)が含まれていると、見た目は同じでも比較に失敗することがあります。そうした場合は、trim()関数やreplace()関数を使って前処理を行うとよいでしょう。管理者に依頼して、あらかじめデータの整形ルールを決めておくのも有効です。

条件分岐をデバッグする具体的な手順

条件分岐の問題を解決するには、計画的なデバッグ手順が欠かせません。以下の手順に沿って、一つずつ原因を切り分けてください。

  1. フローのテスト実行を行う: フローエディタの上部にある「テスト」ボタンからテスト実行を選択し、実際のデータを使ってフローを動かします。このとき、手動トリガーを使うか、過去の実行データを使って再実行すると効率的です。
  2. 実行ログで各アクションの入出力を確認する: テスト実行後、実行履歴から該当のフローを開き、条件アクションの前後のアクションで「入力」と「出力」を確認します。特に、動的コンテンツが正しく展開されているか、値の型は何かをチェックします。
  3. デバッグ用のアクションを追加する: 条件アクションの直前に、変数を初期化して値を格納し、その後に「メールを送る」や「ファイルに書き込む」アクションを仮で追加して、実際の値を出力します。これにより、期待通りに値が渡っているかを可視化できます。
  4. 式エディタで条件式を検証する: 条件アクションの設定画面で「式」タブを開き、@empty(variables('test'))のような短い式を直接入力して、その場で評価結果を確認します。Power Automateではリアルタイムに式の結果をプレビュー表示できないため、信頼できる関数を使ってテストする必要があります。
  5. 条件分岐を段階的に分割する: 複雑な条件は、複数の条件アクションに分割して一つずつテストします。例えば、複数のAND条件がある場合は、まず最初の条件だけを設定して動作確認し、徐々に条件を追加していきます。これにより、どの条件で問題が発生しているかを特定しやすくなります。
  6. エラーが発生した場合はエラーメッセージを解読する: 実行ログに表示されるエラーメッセージには、データ型が一致しない、式が無効などの情報が含まれています。そのメッセージを手がかりに、該当する関数や値を修正します。特に「InvalidTemplate」エラーは式の構文ミスを示すことが多いです。

管理者に確認すべきポイント

条件分岐が会社の環境でうまく動作しない場合、個人のスキルだけで解決できないケースもあります。以下のような点は、管理者に相談することをお勧めします。

  • Data Loss Prevention(DLP)ポリシー: 会社のPower Platform環境では、DLPポリシーにより特定のコネクタやアクションが制限されている場合があります。条件分岐で使用しているコネクタが許可されているか確認してください。例えば、SharePointやOutlookのコネクタがブロックされていると、動的コンテンツの取得自体が失敗します。
  • カスタムコネクタやプレミアムコネクタの利用可否: 標準以外のコネクタを使う場合は、ライセンス契約やセキュリティポリシーの制約があることがあります。管理者に利用可能なコネクタの一覧を確認し、必要に応じて申請を行います。
  • 環境の切り替え(開発環境と本番環境): 多くの企業では、開発用と本番用で異なるPower Automate環境が用意されています。開発環境で正常に動作した条件分岐が本番環境で動かない場合、環境間の設定差(DLPポリシーやコネクタの許可設定)が原因かもしれません。管理者に環境の差分を確認してもらってください。
  • 式エディタで使用できる関数の制限: 一部の高度な関数(union()intersection()など)は、特定のライセンスが必要な場合があります。使用しようとしている関数が組織で利用可能か、管理者に問い合わせてください。

よくある質問

ここでは、条件分岐に関して読者からよく寄せられる質問とその回答をまとめました。

Q1: 条件式で大文字小文字を区別しない方法はありますか?
A1: toLower()関数またはtoUpper()関数を使って比較する値のケースを統一してください。例えば、@equals(toLower(variables('name')), toLower('Taro'))と記述します。

Q2: 条件アクションで「はい」と「いいえ」の分岐がうまく動作しません。どうすればよいですか?
A2: 条件式の真偽値が期待通りかを確認してください。デバッグ用に変数を出力し、条件の結果をログに残すと原因が特定しやすくなります。また、条件式の結果が「true」か「false」になるように、単純な比較から始めてみてください。

Q3: 値が空のときに条件を真にするにはどうすればいいですか?
A3: empty()関数を使うと、nullと空文字列の両方を真と判定できます。例えば、@empty(variables('field'))と記述します。空文字列のみを判定したい場合は@equals(variables('field'), '')を使いますが、nullの場合は偽になるため注意が必要です。

Q4: 動的コンテンツを条件式で使うとエラーになります。動的コンテンツの正しい参照方法を教えてください。
A4: 動的コンテンツは、式エディタ内でtriggerOutputs()?['body/propertyName']のように記述します。あるいは、条件アクションの設定画面で動的コンテンツの一覧からクリックして挿入することもできます。その際、自動的に適切な構文が生成されますが、手動で編集する場合は引用符やパスの誤りに注意してください。

Q5: 複数の条件を組み合わせるときの書き方を教えてください。
A5: AND条件にはand()関数、OR条件にはor()関数を使います。例えば、@and(equals(a,b), greater(c,d))のようにネストさせます。3つ以上の条件も同様にネスト可能です。&&||のような演算子は使えないので注意してください。

まとめ

Power Automateの条件分岐でつまずく原因は、入力値のデータ型や空値、大文字小文字の違い、条件式の記述ミスに集約されます。これらの問題は、empty()int()toLower()などの適切な関数を用いることで解決できます。また、デバッグ手順を計画的に実行し、実行ログや変数出力を活用することで、問題点を効率的に特定できます。管理者への確認事項も忘れずにチェックし、環境依存の問題を事前に排除してください。本記事で紹介した方法を実践することで、複雑な条件分岐もスムーズに構築できるようになるはずです。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT