Power Automateのエラーハンドリング完全ガイド【中編】result関数でエラー詳細を自動取得

Power Automate

みなさん、こんにちは!業務ハックLabのようです。

前編では、「実行条件の構成」と「スコープ」を使ったTry-Catchパターンの基本を解説しました!

まだ読んでない方は、ぜひ前編から読んでみてください

前編はこちら

前編で作った仕組みだと、「エラーが起きました」という通知は送れるようになりました。

でも、実際の運用では、これだけだと不十分なんですよね…

(通知が来ても「で、どこで何が起きたの?」ってなる)

今回の中編では、エラーの詳細情報を自動的に取得して通知する方法を解説していきます!

これができると、エラーが起きた時に「どのアクションで」「なぜ」失敗したのかが、すぐに分かるようになります。

(デバッグ効率が爆上がりします!)

では、早速いってみましょう!


【応用編】エラーの詳細を通知するテクニック

エラー通知に必要な情報とは

まず、エラー通知には、どんな情報を含めるべきでしょうか?

僕が運用していて「これは絶対に必要!」と思う情報は、以下の通りです:

  1. フローの名前 – どのフローでエラーが起きたか
  2. 実行したユーザー – 誰が実行した時にエラーになったか
  3. 実行日時 – いつエラーが起きたか
  4. 実行履歴への直リンク – クリック一発でエラー画面に飛べるURL
  5. エラーが起きたアクション名 – どのアクションで失敗したか
  6. エラーメッセージ – 具体的な原因は何か

この中で、特に4番と5番と6番が重要です!

実行履歴への直リンクがあれば、通知を見た瞬間にすぐエラー詳細を確認できます。

エラーが起きたアクション名とメッセージがあれば、実行履歴を開く前に原因の見当がつきます。

(これ、めちゃくちゃ便利なんですよ!)

では、これらの情報をどうやって取得するか、順番に解説していきますね。

workflow()関数で基本情報を取得する

まず、フロー名や実行履歴のURLを取得する方法です。

ここで使うのがworkflow()関数です!

workflow()関数とは?

workflow()関数は、現在実行中のフローに関する情報を返してくれる便利な関数です。

返ってくる情報には、以下のようなものがあります:

  • フローのID
  • フローの名前
  • 環境名
  • 実行ID
  • 実行開始時刻
  • トリガーの種類

などなど。

実装手順

では、実際にCatchスコープの中で、この情報を取得してみましょう。

  1. Catchスコープの中に「作成」アクションを追加する
  2. アクション名を「workflow情報取得」などに変更する
  3. 入力欄に以下の式を入力する:
workflow()

はい、これだけです!(シンプル!)

このworkflow()関数は、JSONオブジェクトを返します。

でも、このままだとJSONの塊なので、使いにくいんですよね…

そこで、次のステップで「JSONの解析」を使って、使いやすい形にします。

JSON解析で情報を取り出す

  1. 「JSONの解析」アクションを追加する
  2. 「コンテンツ」に、先ほどの「workflow情報取得」の出力を選択する
  3. 「スキーマ」に以下をコピー&ペーストする:
{
    "type": "object",
    "properties": {
        "id": {
            "type": "string"
        },
        "name": {
            "type": "string"
        },
        "type": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "tags": {
            "type": "object",
            "properties": {
                "flowDisplayName": {
                    "type": "string"
                },
                "environmentName": {
                    "type": "string"
                },
                "logicAppName": {
                    "type": "string"
                }
            }
        },
        "run": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        }
    }
}

これで、フロー名や環境名などが、個別に取り出せるようになりました!

実行履歴への直リンクを作成する

次に、実行履歴への直リンクを作ります。

これがあると、通知を受け取った人が、すぐにエラー詳細画面に飛べます!

(ワンクリックで飛べるの、本当に便利)

  1. もう1つ「作成」アクションを追加する
  2. アクション名を「実行履歴URL」などに変更する
  3. 入力欄に以下の式を入力する:
<a href="https://make.powerautomate.com/environments/@{body('JSON_の解析')?['tags']?['environmentName']}/flows/@{body('JSON_の解析')?['tags']?['logicAppName']}/runs/@{body('JSON_の解析')?['run']?['name']}">クリックして確認</a>

(長いですが、コピペでOKです!)

これで、実行履歴への直リンクが生成されます。

はい、基本情報の取得はこれで完了です!

result()関数でエラーの詳細を取得する

さあ、ここからが本番です!

(ここが一番面白いところ!)

前編で作ったTryスコープの中で、どのアクションが失敗したのか、そしてエラーメッセージは何かを取得していきます。

result()関数とは?

result()関数は、スコープ内のすべてのアクションの実行結果を返してくれる関数です。

これ、実は公式ドキュメントにもあまり目立たない「隠れた便利機能」なんです!

(知ってる人と知らない人で、デバッグ効率が全然変わってくる)

result()関数の使い方は:

result('スコープ名')

こんな感じです。

スコープ名を指定すると、そのスコープ内のアクションの結果を配列で返してくれます。

返ってくる情報には:

  • アクション名
  • ステータス(Succeeded, Failed, Skippedなど)
  • 開始時刻・終了時刻
  • 入力データ
  • 出力データ
  • エラーメッセージ(失敗した場合)

これらが全部含まれています!

(めちゃくちゃ詳細な情報が取れるんです)

実装手順

では、実際にCatchスコープの中で、Tryスコープのエラー情報を取得してみましょう。

  1. Catchスコープの中に「作成」アクションを追加する
  2. アクション名を「Try結果取得」などに変更する
  3. 入力欄に以下の式を入力する:
result('Try')

重要な注意点:

スコープ名にスペースが含まれている場合、自動的にアンダースコア(_)に置き換えられます

例えば、スコープ名が「Try Scope」だったら、result('Try_Scope')のように書きます。

(これ、ハマりポイントなので要注意!)

だから、スコープ名は最初からスペースなしで「Try」「Catch」のように付けるのがおすすめです。

エラーが起きたアクションだけを抽出する

result()関数は、Tryスコープ内のすべてのアクションの結果を返します。

でも、私たちが知りたいのは「失敗したアクション」だけですよね?

そこで、「アレイのフィルター処理」を使って、失敗したアクションだけを抜き出します。

  1. 「アレイのフィルター処理」アクションを追加する
  2. 「開始」に、先ほどの「Try結果取得」の出力を選択する
  3. フィルター条件を設定する:
    • 左側: item()?['status']
    • 条件: 次の値に等しい
    • 右側: Failed

これで、Tryスコープ内で失敗したアクションだけが、配列として返ってきます!

エラーメッセージを取り出す

最後に、失敗したアクションのエラーメッセージを取り出します。

フィルター配列の結果は、こんな構造になっています:

[
  {
    "name": "アクション名",
    "status": "Failed",
    "code": "エラーコード",
    "error": {
      "message": "エラーメッセージの詳細"
    }
  }
]

エラーメッセージは、error.messageの部分に入っています。

これを取り出すには、以下のように書きます:

body('フィルター配列')?[0]?['error']?['message']

(配列の最初の要素[0]を取って、その中のerror.messageを取得する)

こうすると、失敗したアクション名とエラーメッセージが、見やすい形で取得できます!

全部まとめて通知を作る

はい、ここまでで必要な情報が全部揃いました!

最後に、これらを使ってTeams通知やメール通知を作ります。

通知の本文例:

⚠️ **エラー発生!フローが失敗しました**

**フロー名:** @{body('JSON解析')?['tags']?['flowDisplayName']}

**実行日時:** @{utcNow()}

**実行履歴URL:**
@{outputs('実行履歴URL')}

**エラー詳細:**
@{outputs('作成_-_エラー詳細')}

至急ご確認ください。

こんな感じで、必要な情報が全部入った通知を作ることができます!

これなら、通知を見ただけで、ある程度の状況が把握できますよね。

(URLをクリックすれば、すぐに詳細画面に飛べるし!)


まとめ:エラーの詳細情報で、デバッグ効率を10倍に!

はい、如何でしたでしょうか?

今回(中編)では、Power Automateのエラーハンドリングの応用編として、以下の内容を解説しました:

  1. workflow()関数でフロー情報を取得
    • フロー名、環境名、実行IDなどの基本情報
    • 実行履歴への直リンクURLの生成
  2. result()関数でエラーの詳細を取得
    • スコープ内の全アクションの実行結果を配列で取得
    • フィルター配列で失敗したアクションだけを抽出
    • エラーメッセージをピンポイントで特定
  3. 詳細な通知の作成
    • 必要な情報を全て含む通知テンプレート
    • ワンクリックでエラー画面に飛べる仕組み

これで、エラーが起きた時に「どこで何が起きたか」が、すぐに分かるようになりました!

(デバッグ時間が劇的に短縮されますよ)

次回予告

次回の後編では、運用していく上で絶対に知っておくべき重要ポイントを解説します!

  • 終了アクションで正しいステータスを記録する方法
  • その他、運用で失敗しないためのポイント

まずやってみよう!

まずは、前編で作ったTry-Catchパターンに、今回紹介したworkflow()result()を追加してみてください。

最初は、シンプルにエラーメッセージと実行履歴URLだけ通知に含めるだけでも、十分に価値があります!

(エラー原因がすぐ分かるって、本当にストレスフリー!)

それでは皆さん、良い業務ハックライフを~

コメント