欲しいアプリは自分で作る!

Power Platform や Azure などを利用して作成した業務アプリや趣味アプリなどをご紹介します。

Power Automate で処理に失敗した際にどのアクションで失敗したかを即時にメール通知する方法

メールを送信するアクションが失敗することは想定しておりませんので、あしからず。



どうも、じゅんじゅんです。


弊社で利用している Power Automate のフローは、これまではあえて「処理に失敗しても数日以内に気付ければよい」または「処理に失敗しても業務は回せる」というレベルのもののみ作成してきました。

ただ、最近では活用の幅も広がり、処理に失敗した際はなるべく即座に気付きたいというものがいくつか出てきたんですね。
ということで、今回は処理に失敗した場合にメール通知させる仕組みをご紹介します。

せっかくなので、ついでにフローのどのアクションで失敗したかの情報もメールの本文に掲載してみようと思います。


今回使用するテスト フロー

今回は適当にこんなフローを用いて解説していきます。

自分のユーザー情報を取得して、とあるグループに自分を追加するだけの、何の実用性のないフローですw
しかも、わざと存在しないグループIDを指定し、エラーになるようにしています。

f:id:jn-kodama:20201031143350p:plain


処理失敗を検知するベース手法

今回はこちらの方法を基準に、色々と応用していこうと思います。 docs.microsoft.com

この方法、ざっくり言うと、異常を検知したいアクションを "スコープ" で包み、そのスコープの実行結果をもとに異常判定を行うというものです。

早速、側を作ってしまいましょう。
まずは "スコープ" の追加。新しいステップの追加で「スコープ」と検索すれば出てきますので、後はその中に既存のアクションをドラッグ&ドロップするだけです。 f:id:jn-kodama:20201031160450p:plain


さて、本題となる "スコープ内の各アクションの実行結果" ですが、上記の情報を読む限りどうやら

result('Scope')[0]['status']

という式を使って判定していることが分かります。
これは、'Scope' の result(=実行結果)の0番目の情報の 'status' という項目を抽出しているということになります。

ここを、ちょっと紐解いてみましょう。


スコープの実行結果の中身を見てみる

スコープに限らず、アクションの実行結果は result(アクション名) と式を設定することで、JSON 形式で取得することができます。

で、スコープが他のアクションと異なる点は、result(スコープ名) とすることでスコープに含まれるすべてのアクションの実行結果を配列で取得できる点です。

今回のテストフローだと、こんなイメージです。
※ 実際にはもっと沢山項目があります。
※ 実行結果によって JSON スキーマが異なります。

f:id:jn-kodama:20201031164140p:plain


さて、この後条件判定をするにあたり、実際に Succeed の場合と Failed の場合の JSON の中身を見てみたいと思います。
上述の通り、スコープの実行結果は配列で渡されるので、Apply to each を利用して配列の要素ごとに JSON の中身を見ていきます。

手動で Apply to each を追加し、「以前の手順から出力を選択」に式で

result('スコープ')

を追加します。 f:id:jn-kodama:20201031164904p:plain

続いて、Apply to each 内に「JSON の解析」を追加し、コンテンツに「現在のアイテム」を、スキーマにはひとまず「{ }」のみを記載しておきます。 f:id:jn-kodama:20201031165042p:plain

で、このままだとスコープ内で処理が失敗しそこで終了してしまうので、スコープ内の処理が失敗してもその後の Apply to each が処理されるよう、Apply to each 側の実行条件を変更します。 f:id:jn-kodama:20201031165302p:plain

すべての実行タイミングにチェックを入れ、完了。 f:id:jn-kodama:20201031165401p:plain

フローを保存し、テスト実行してみます。 f:id:jn-kodama:20201031170305p:plain f:id:jn-kodama:20201031170530p:plain f:id:jn-kodama:20201031170442p:plain

実行結果は、結果の内容に関わらず "status" で取得できること、また Failed の場合は "message" で失敗理由が取れることが分かります。

これらを踏まえて、処理が失敗した場合にメール通知する仕組みをパパっと作ります。


作成方法

先程の実行結果の Failed の出力結果をコピーし、 f:id:jn-kodama:20201031171521p:plain

フローの編集画面の「JSON の解析」のスキーマの "サンプルから生成" に貼り付けます。 f:id:jn-kodama:20201031171722p:plain

こうなります。
このスキーマは結果が Failed の時に通用するもので、 Succeeded の時とはスキーマが異なりますが、実行結果である "status" は構造が同じなため取得できますので、Failed のスキーマを利用することにします。 f:id:jn-kodama:20201031171742p:plain

続いて「条件」を追加し、値の選択に JSON の解析の "status" を、右辺に Failed と入力します。
※参考記事には OR で Aborted も入れるよう指示がありますので、お好みでどうぞ。 f:id:jn-kodama:20201031172302p:plain

条件が "はい" の場合に、メールを送信します。
「メールの送信」アクションを追加し、以下のように設定します。
失敗したアクション名は "name" で、失敗理由は "message" で取得できます。 f:id:jn-kodama:20201031172517p:plain


実行してみて、以下のようなメールが届けば成功です。
以下のように、メールの本文に該当フローの詳細画面の URL を貼り付けておくと親切かもしれません。 f:id:jn-kodama:20201031174051p:plain


おわりに

実はこんなことをしなくても、正常終了した際にメール通知するようにすれば、「あれ、メールが来てないから失敗したんだな」と気付くこともできます。 ただ、実行頻度の高いフローだと逆にメールがノイズになりかねないので、こんな方法もあるよというご紹介でした。

また、失敗箇所はフローの実行結果を見れば分かりますので、わざわざメールでエラー箇所を通知する必要はないかもしれませんが、少しでも初動対応を早めたい方は是非ご利用ください。


欲しいツールは欲しい人が作る時代へ。

何かのご参考になれば幸いです。


参考文献

docs.microsoft.com

www.kwbtblog.com

blogs.msmvps.com

sharepains.com