Power Automateでフローを作って動かすと、次に気になるのが「止まったときに気づけるか」です。この記事では、既に動いているフローを作り直さずに、Try/Catchの形でエラー通知を追加する手順をまとめます。
この記事でできること
- 動いているフローに手を加えず、エラー通知だけを後から足せる
- フローが失敗したときだけTeamsのチャネルに通知が飛ぶ
- 通知が届いた時点で、どのアクションが何で失敗したかが分かる
Power Automateに「Try/Catch」という名前のアクションはありません。スコープを2つ並べ、片方に本体を入れ、もう片方を失敗時だけ動かすことでTry/Catchの形を作ります。
完成イメージ
フローが失敗すると、Teamsのチャネルに次の4点が並んだメッセージが届きます。
- フロー名
- 発生時刻(日本時間)
- 失敗したアクション名とエラー内容
- 実行履歴へのリンク

全体の実装構成
追加するアクションは4つです。
| アクション | リネーム後の名前 | 役割 |
|---|---|---|
| スコープ | TryMain | 本体をまるごと囲む |
| スコープ | CatchNotify | TryMain が失敗したときだけ動く |
| アレイのフィルター処理 | FilterFailed | 失敗したアクションだけを抜き出す |
| チャットまたはチャネルでメッセージを投稿する | PostErrorTeams | 通知本文を送る |
フローの編集画面では次のような並びになります。
Recurrence(トリガー)
InitMonth(変数を初期化する) ← Tryの外に残す
InitDay(変数を初期化する) ← Tryの外に残す
InitvarMentions(変数を初期化する) ← Tryの外に残す
TryMain(スコープ)
└ 取得アクション・案件ループなど本体まるごと
CatchNotify(スコープ)※失敗時のみ実行
├ FilterFailed(アレイのフィルター処理)
└ PostErrorTeams(Teams投稿)

⚠️トリガーや変数の初期化はスコープの中に入れられない仕様なので外に出します。
実装手順
Step1|本体をスコープで囲む
トリガーの直後に「スコープ」アクションを追加し、TryMain にリネームします。
空のスコープを置いたら、既存のアクションをドラッグで中へ移動します。アクション同士の参照は名前で繋がっているため、順序を保ったまま移せば式は壊れません。
ただ、変数の初期化アクションは、トップレベルにしか置けない仕様なので、TryMain には取得アクションと本体のループだけを入れました。変数の初期化は実質失敗しないアクションなので、外に残しても「致命的な失敗を捕まえる」という目的は満たせます。
Step2|通知用のスコープを並べて置く
TryMain の後に、もう1つ「スコープ」を追加し CatchNotify にリネームします。
⚠️ TryMain の中ではなく、外・下に置きます。
Step3|失敗したときだけ動くように設定する
ここがTry/Catchの心臓部です。
CatchNotify の「設定」を開き、次のように設定します。
| チェック項目 | 設定 |
|---|---|
| 成功しました | OFF |
| タイムアウトした | ON |
| スキップ済みである | OFF |
| 失敗しました | ON |
「成功しました」のチェックを外して、「失敗しました」と「タイムアウトした」のチェックを入れるとフローがエラーを出した時だけ通知が飛びます。
画像だと分かりにくいですが、設定が反映されるとTryMain から CatchNotify へ伸びる矢印が点線に変わります。

Step4|失敗したアクションだけを抜き出す
CatchNotify の中に「アレイのフィルター処理」を追加し、FilterFailed にリネームします。
TryMain の中にあるアクションの実行結果は、result(‘TryMain’) で配列として取り出せます。この配列から status が Failed のものだけを残せば、失敗したアクションが分かります。
開始(From)欄:fx から次の式を入力します。
result('TryMain')
⚠️ result() は動的コンテンツの一覧に出てきません。fx(式)のタブから手入力します。
条件欄:「詳細モードで編集する」に切り替えて次の式を入力します。
@equals(item()?['status'], 'Failed')
⚠️ 左辺の ?[‘status’] を書き忘れて item() だけにすると、アクションの結果オブジェクト全体と ‘Failed’ を比べることになり、結果が常に0件になります。

Step5|通知本文に4つの情報を差し込む
FilterFailed の下に「チャットまたはチャネルでメッセージを投稿する」を追加します。投稿者はフローボット、投稿先はチャネルを選び、自分の環境のチームとチャネルを指定します。
本文に差し込む4点の式は次のとおりです。
発生時刻(日本時間):
convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy/MM/dd HH:mm:ss')
失敗したアクション名:
first(body('FilterFailed'))?['name']
エラー内容:
coalesce(
first(body('FilterFailed'))?['outputs']?['body']?['error']?['message'],
first(body('FilterFailed'))?['outputs']?['body']?['message'],
first(body('FilterFailed'))?['error']?['message'],
first(body('FilterFailed'))?['code'],
'エラー詳細なし'
)
最初、エラー内容を first(body(‘FilterFailed’))?[‘error’]?[‘message’] だけで組みましたが、テストするとこの欄だけ空欄で届きました。実行履歴を追うと、SharePointコネクタのエラーメッセージは first(body(‘FilterFailed’))?[‘outputs’]?[‘body’]?[‘message’]の側に入っていました。

コネクタによってエラーメッセージの入る場所が違うようだったので、coalesce() で候補を順に並べ、最初に見つかった値を使う形にしました。最後に ‘エラー詳細なし’ を置いているため、エラーが取れなくても空欄にはなりません。
実行履歴へのリンク:
concat('https://make.powerautomate.com/environments/',
workflow()?['tags']?['environmentName'], '/flows/',
workflow()?['name'], '/runs/', workflow()?['run']?['name'])
⚠️ この式はソリューション外のフロー用です。ソリューション内のフローはURLのパスが変わります。
Step6|わざと失敗させて通知を確認する
エラー通知は、実際に失敗させてみないと動作を確認できません。私は取得アクションのフィルタークエリを一時的に壊してテストしました。
- 取得アクションのフィルタークエリで、列名を存在しない名前(私は末尾に文字を足しました)に一時変更する
- 保存して公開し、手動でテストを実行する
TryMainが失敗し、CatchNotifyが動いて通知が届くことを確認する- フィルタークエリを正しい値に戻し、保存・公開まで済ませる
1回目は、失敗したアクション名・実行履歴のリンク・発生時刻は正しく表示され、エラー内容だけが空欄でした。Step5の coalesce に書き換えて2回目を実行すると、「列 ‘TriggerTypeXX’ が存在しません。〜」と表示することができました。
ハマりポイントまとめ
| No | 起きたこと | 対応 |
|---|---|---|
| 1 | 「変数を初期化する」がスコープの中に移動できない | トップレベルにしか置けない仕様。初期化アクションはTryの外に残す |
| 2 | 正常終了した日も通知が飛ぶ | 設定で「成功しました」のチェックを外す |
| 3 | result() が動的コンテンツに出てこない | fx(式)タブから手入力する |
| 4 | フィルターの結果が常に0件になる | 左辺を item() ではなく item()?[‘status’] にする |
| 5 | エラー内容だけ空欄で届く | coalesce() で ?[‘outputs’]?[‘body’] 側も候補に入れる |
まとめ
今回のポイントです。
- Try/Catchはスコープ2つで作る。本体を TryMain で囲み、直後に並列で CatchNotify を置く
- CatchNotify の「設定」で、「タイムアウトした」・「失敗しました」をON、「成功しました」・「スキップ済みである」をOFFにする。条件付き実行の設定になると矢印が点線に変わる
- テストは列名をわざと壊して行い、確認が終わったら必ず元に戻す
フローは作ってから時間が経つほど見なくなります。止まったことに気づけないまま放置される状態を避けたい人は、Try/Catch のスコープを参考にしてみてください。
Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。
あわせて読みたい
この記事で扱ったフロー本体の作り方は、次の記事にまとめています。先に読むと全体像がつかみやすくなります。

Plannerを使ったタスク配布の実装も、同じTry/Catchの枠を移植して使っています。



コメント