はじめに
Power Automateでエラーハンドリングを行うやり方としては以下のテンプレートのようにスコープと実行条件こ構成を用いてTry-Catch-Finallyを設定するのが一般的ですね。
今回はこちらを少し改修してエラー時に送られるメールやチャットにエラーに関する情報を記載してエラー対応に少しでも早く取り掛かれるようにするやり方をまとめます。
エラーに関する情報を取得する
こんな感じのサンプルフローを利用します。
「ユーザー プロフィールの取得 (V2)」では適当な値を設定してエラーが発生するようにしています。
また、失敗させるアクションの他に成功させるアクションとスキップさせるアクションもいれています。
実行履歴へのリンクを取得する
テンプレートでも利用されていますが、実行履歴のリンクは以下のような式で作成することができますね。
https://make.powerautomate.com/environments/@{workflow()?['tags']?['environmentName']}/flows/@{workflow()?['name']}/runs/@{workflow()?['run']?['name']}
テンプレートですとこんな式ですね。
@{concat('https://unitedkingdom.flow.microsoft.com/manage/environments/', workflow()?['tags']['environmentName'], '/flows/', workflow()?['name'], '/runs/', workflow()?['run']['name'])}
workflow()
関数は対象のフローの実行情報を取得する関数です。
エラー情報を取得する
Power Automateの実行履歴を開くことでエラーメッセージなどを確認できますが、その前にエラーメッセージやどのアクションでエラーが発生したのか?がぱっとわかるようになっておくと便利かと思います。
エラー情報を取得するような関数は提供されていませんが、"Try"スコープの結果を取得すればエラー情報も取得することができますね。
"Try"スコープの結果を取得するには result()
関数を利用します。
以下のように result()
関数を利用することで"Try"スコープの結果を取得することができます。
@{result('Try')}
しかし、これだけでは失敗したアクションの結果だけでなく"Try"スコープの中にあるアクションすべてのアクションの結果が得られてしまうので、成功したアクションの結果やスキップされたアクションの結果まで取得してしまいます。
従って「アレイのフィルター処理」で失敗した結果だけにフィルターする必要があります。
失敗したかどうかは status
を確認すればわかります。
From
@{result('Try')}
Filter Query
@{equals(item()?['status'],'Failed')}
これでエラー情報を取得できたわけですが、ぱっとみたいときにJSONだけ送られても正直困りますよね。
なのでぱっと見で確認したいであろう情報を取得する式を追加で記載しておきます。
対象アクション
@{body('エラー内容')?[0]?['name']}
statusCode(エラーコード)
@{body('エラー内容')?[0]?['outputs']?['statusCode']}
エラー内容
@{body('エラー内容')?[0]?['outputs']?['body']?['error']?['message']}
実行履歴をエラーで終了させる
テンプレートには入ってないですが、実行履歴上、正常終了ではなく異常終了としたいかと思います。
その場合は「終了」アクションを利用して、"Status"を"Faild"でフローを終了させます。
"Code"及び"Message"は上で取得したものを設定すればいいですね。
おわりに
Power AutomateのTry-Catch-Finallyに関する記事はたくさんありますが、エラー情報を取得するような記事はあまりなさそうだったので簡単にまとめました。
ご質問などあればお気軽にコメントくださいー