ADVERTISEMENT

【Power Automate】子フローの戻り値で困った時の入力値と条件分岐の直し方

【Power Automate】子フローの戻り値で困った時の入力値と条件分岐の直し方
🛡️ 超解決

Power Automateで親フローから子フローを呼び出し、戻り値を使って条件分岐や後続処理を行おうとしたときに、期待した値が返ってこない、あるいは条件分岐が正しく動作しないというトラブルはよくあります。特に子フローを複数作成している場合や、戻り値の型や構造を意識せずに実装した場合に発生しやすくなります。この記事では、子フローの戻り値に関する問題の原因を切り分け、適切な入力値の設定と条件分岐の直し方を具体的に解説します。実際の操作手順や失敗パターンも取り上げますので、原因がわからずに手詰まりになっている方はぜひ参考にしてください。

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

  • 最初に見る場所: 子フローのトリガー設定(フローが呼び出されたとき)と戻り値の出力設定、および親フローでの変数のデータ型。
  • 切り分けの軸: 子フロー側の戻り値が正しく出力されているか、親フロー側でその戻り値を正しく受け取れているか、条件分岐の比較方法が適切か。
  • 注意点: 戻り値がテーブルやオブジェクトの場合、親フローではスキーマ定義(JSON形式)が必要なこと。また、動的な値の扱いで「apply to each」が自動挿入される仕組みを理解しておく必要があります。

ADVERTISEMENT

子フローの戻り値が期待通りに動作しない原因とは

子フローの戻り値に関するトラブルの多くは、以下の3つの要因に集約されます。それぞれの原因を理解しておくと、問題の切り分けが格段に速くなります。

データ型の不一致

子フローから返す値の型(文字列、数値、ブール、配列など)と、親フローの条件式で期待する型が合っていないケースです。たとえば子フローで数字を返しているのに、親フローで文字列として比較したり、ブール値(True/False)を文字列の「True」と比較したりすると正しく判定されません。Power Automateでは型の自動変換が一部行われますが、確実ではありません。

戻り値の出力設定の不足

子フローの「フローが呼び出されたとき」トリガーで、戻り値として出力する項目を設定していない、あるいは出力したい変数を間違って設定している場合です。トリガーの設定画面にある「出力を追加」から、戻り値の名前と型、およびその値を指定する必要があります。この設定が不完全だと、親フローに値が渡されません。

動的コンテンツの選択ミス

親フローの条件アクションで、子フローの戻り値を動的コンテンツから選ぶ際に、間違った項目を選択していることがあります。特に戻り値の名前が複数ある場合や、子フロー内で複数の出力を定義している場合に発生しやすく、結果として意図しない値で条件判定が行われます。

子フローの戻り値を正しく設定する手順

まずは子フロー側で戻り値を出力できる状態にします。以下の手順に従って設定を見直してください。この手順はPower Automateの公式ドキュメントに基づいています。

  1. 子フローを編集モードで開き、最初のトリガー「フローが呼び出されたとき」をクリックします。
  2. トリガーの下部にある「出力を追加」ボタンをクリックします。ここで戻り値の名前、型、そして値を設定します。
  3. 名前には任意の識別子(例:ResultStatus、ErrorMessageなど)を入力します。型は返したいデータに合わせて「文字列」「ブール値」「整数」「浮動小数点数」「オブジェクト」などから選択します。
  4. 値の欄には、子フロー内で使用している変数や式を指定します。たとえばテキスト変数「status」を返すのであれば、動的コンテンツから「status」を選びます。
  5. 必要に応じて「出力を追加」を繰り返し、複数の戻り値を定義できます。ただし親フロー側でもそれぞれに対応した変数が必要になるため、必要最小限にとどめることをおすすめします。

設定後は必ず子フローを保存してテスト実行し、戻り値が正しく出力されているかを確認しましょう。テスト実行では、親フローを介さずに直接子フローを実行する方法(トリガーの「テスト」ボタン)を利用すると効率的です。

親フローで子フローの戻り値を受け取り条件分岐する手順

次に親フロー側で子フローの戻り値を使用する設定を確認します。特に条件分岐(Condition)アクションでの使い方を中心に説明します。

  1. 親フローで子フローを呼び出すアクション(「サブフローの実行」または「フローの実行」)を追加し、子フローを選択します。必要に応じて子フローの入力パラメーターを指定します。
  2. 子フロー実行アクションの後に、条件分岐(Condition)アクションを追加します。
  3. 条件の左側の値として、動的コンテンツから「子フロー名 の結果」など、子フロー実行アクションの出力を選びます。出力が複数ある場合は、さらにその下の階層から目的の戻り値を選択します。
  4. 演算子は適切なものを選びます。たとえば戻り値が文字列であれば「次の値に等しい」、数値であれば「次の値より大きい」などを選択します。
  5. 右側の値には比較したい固定値または別の動的コンテンツを入力します。このとき、データ型が一致していることを確認します。文字列であれば引用符は不要です(自動で扱われます)。

条件分岐が正しく動作しない場合は、親フローを保存してテスト実行し、各アクションの入力と出力を確認してください。特に子フロー実行アクションの出力に期待した値が含まれているか、条件アクションの左辺と右辺の型が一致しているかを重点的に見ます。

状況別:戻り値の型と条件分岐の比較方法

戻り値の型によって、条件式で使用する演算子や値の指定方法が変わります。以下の表に主なパターンをまとめました。実際のフローに合わせて該当箇所を確認してください。

戻り値の型 子フロー設定例 親フローの条件例 注意点
文字列 型:文字列、値:変数status @equals(outputs(‘子フロー実行’)?[‘status’], ‘完了’) 大文字小文字は区別されます。空文字の扱いに注意。
ブール値 型:ブール値、値:変数is_success @equals(outputs(‘子フロー実行’)?[‘is_success’], true) 文字列の「true」ではなく、ブール値の true / false を使います。動的コンテンツで選択すると自動で正しい形式になります。
整数 型:整数、値:変数count @greater(outputs(‘子フロー実行’)?[‘count’], 0) 小数(浮動小数点数)との混同に注意。比較演算子は数値専用のものを使用します。
配列 型:配列、値:変数items @length(outputs(‘子フロー実行’)?[‘items’]) 配列の要素数で条件分岐する場合はlength関数を使います。空配列の判定も同様です。

上の表の式はPower Automateの式言語を使用していますが、実際には動的コンテンツピッカーから選択しても同じ式が生成されます。式を手書きする必要はありませんが、仕組みを理解しておくとトラブルシュートに役立ちます。

よくある失敗パターンとその対策

実際に現場で発生した失敗例をいくつか紹介します。似たような状況に当てはまる場合は、すぐに修正に取り掛かりましょう。

失敗パターン1:戻り値を設定していない

子フローのトリガーに「出力を追加」が一つもない状態で親フローから呼び出しても、戻り値は空になります。親フローの条件式で子フローの出力を参照すると、「利用可能な出力がありません」と表示されるでしょう。対策は、先述の手順に従って出力を追加することです。

失敗パターン2:型がブール値なのに条件式で文字列比較している

子フローでブール値(true/false)を返しているのに、親フローの条件式で「次の値に等しい」を使って値に「True」(先頭大文字、文字列)と入力してしまうケースがあります。この場合、型が合わないため条件は常に偽になります。正しくは動的コンテンツからブール値のtrueを選ぶか、式エディタで「true」(小文字、引用符なし)と直接入力します。

失敗パターン3:配列の戻り値をそのまま条件に使った

子フローから配列を返し、親フローでその配列が空かどうかを判定したいときに、条件式の左側に配列そのものを設定し、演算子「次の値に等しい」で空配列「[]」と比較する方がいます。しかしPower Automateの条件アクションでは配列同士の直接比較は正しく動作しません。代わりにlength関数で配列の長さを取得し、それが0と等しいかどうかを判定する必要があります。

管理者に確認すべき設定と注意点

会社の環境でPower Automateを使用している場合、以下の点について管理者に確認する必要があるかもしれません。フローが正常に動作しない原因が、個人の設定ではなく組織のポリシーによることもあります。

  • 子フローが所属するソリューションの設定:ソリューション内のフローは、環境間の移動時に戻り値の参照が切れることがあります。ソリューションをインポートした際に、親子フロー間の接続が正しく構成されているか確認しましょう。
  • データ損失防止(DLP)ポリシー:特定のコネクタの使用が制限されていると、子フローの実行自体がブロックされる可能性があります。管理者にDLPポリシーの一覧を確認してもらい、必要なコネクタが許可されているか調べる必要があります。
  • フロー所有者と共有設定:親フローから子フローを実行するには、親フローの所有者が子フローに対して適切なアクセス権(実行権限)を持っている必要があります。特に個人用フロー(自分専用)とチームフロー(共有)の違いに注意しましょう。

よくある質問(FAQ)

子フローの戻り値に関して、読者からよく寄せられる質問をまとめました。トラブルシュートのヒントとして活用してください。

Q. 子フローの戻り値が空で返ってくるのはなぜですか?

A. 原因として、子フローのトリガーに出力が追加されていない、出力の値が空の変数を参照している、子フローがエラーで途中終了しているなどが考えられます。まずは子フロー単体でテスト実行し、戻り値が正しく出力されるか確認しましょう。

Q. 条件分岐で「apply to each」が自動で挿入されて困る

A. 戻り値が配列型の場合、動的コンテンツからその配列の要素を条件の左側に指定しようとすると、Power Automateが自動的に「apply to each」ループを挿入することがあります。これは配列の各要素に対して条件を適用するためです。単一の値として配列全体を使いたい場合は、動的コンテンツではなく式を使ってください。たとえば「outputs(‘子フロー実行’)?[‘myArray’]」のように記述すると、ループが挿入されません。

Q. 戻り値の型を後から変更しても大丈夫ですか?

A. 子フローの戻り値の型を変更した場合、親フロー側でその戻り値を参照しているアクションに影響が出ます。特に条件式の中で動的コンテンツが削除されたり、エラーが発生したりすることがあります。変更後は必ず親フローの該当アクションを確認し、必要に応じて再設定してください。

まとめ

子フローの戻り値に関する問題は、データ型の不一致、出力設定の欠如、動的コンテンツの選択ミスが主な原因です。原因を切り分けるには、子フロー単体のテスト、親フローでの動的コンテンツの確認、条件式に使われている値の型チェックを順に行うとよいでしょう。特に配列やオブジェクトを戻り値とする場合は、length関数やスキーマ定義を正しく扱う必要があります。本記事で紹介した手順と事例を参考に、フローの動作を正常に戻してください。もし問題が解決しない場合は、組織の管理者に連絡してDLPポリシーやアクセス権の設定を確認してもらうことも検討しましょう。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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

ADVERTISEMENT