0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerAutomateワークフローでエラー内容をもとにフロー成功/失敗を制御

Posted at

今回はPowerAutomateのエラーハンドリングについてのTIPSです。

Problem

ワークフロー内に外的要因でエラーとなりやすい箇所がある。
当該エラーの原因はワークフロー内では解決しようがなくエラーとなった場合は無視したい。
しかし他のエラーが起きた場合はきちんとワークフローを失敗させたい。

事例:

ワークフロー内でTeamsコネクターの「チームにメンバーを追加する」アクションを実行している。
アクションでは追加対象者の指定にユーザープリンシパル名を利用するが、フローの入力データの問題で時折無効なユーザープリンシパル名が混入してしまう。
無効な値の混入でエラーとなった場合はこれを無視して後続の処理を行わせたい。
ただしもしそれ以外のエラーの場合は後続処理を行わずワークフローを失敗させたい。

Solution

エラーとなりうるアクションの後に、当該アクションがエラーになった時のみ起動し、エラー内容を判定して「無視」もしくは「失敗」させるアクションを連結する。

先ほどの「事例」をもとに具体的なフローを示すと:

image.png

  • ここで「スコープ」内の「チームにメンバーを追加する」は無効なユーザープリンシパル名が指定されると「NotFound」エラーになる。
  • 後続の「作成 チームメンバー追加エラー」はアクションの設定「Run after」により前段処理がエラーになった時のみ実行される。実行されるとその後に続く「作成 特定の〜」も実行される。
  • 1つ目の「作成」でエラー内容を示す情報を取得し2つ目の「作成」でエラー内容次第で「無視」もしくは「失敗」を制御している。わかりやすくするために2つのアクションに分けているが、1つのアクションにまとめてしまっても機能的に問題はない。

「チームにメンバーを追加する」アクションでエラーが発生すると、当該アクションのbody(...)には次のような "error"プロパティが設定される:

image.png

{
  "error": {
    "code": "NotFound",
    "message": "Failed to find user with id 'XXXX@XXXX' in the tenant",
    "innerError": {
      "date": "2024-09-19T00:43:20",
      "request-id": "7e005119-d24e-4094-8ccd-9b23148ce70e",
      "client-request-id": "7e005119-d24e-4094-8ccd-9b23148ce70e"
    }
  }
}

1つ目の「作成」ではこの"error"プロパティを取り出している。「Run after」の設定で前段処理が失敗した時のみ実行されるようにしてある:

image.png

image.png

2つ目の「作成」では前段処理で取り出したエラー情報のうち"code"プロパティの内容をチェックして、もし'NotFound'だったらnullを返しそれ以外だったらゼロ除算エラーを引き起こすようにしている:

image.png

if(equals(outputs('作成_チームメンバー追加エラー')['code'],'NotFound'),null,div(1,0))

前述の通り1つ目の「作成」と2つ目の「作成」はまとめて1つにしても機能上問題ない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?