FormsとPower AutomateでEntra IDのゲスト招待システム&棚卸システムをつくってみる(その9:棚卸編)

今回が最終回、前回までに作成した処理はこちらです。

左側のスコープには棚卸時期が近いゲストを招待したユーザーに対して、ゲストの期限を尋ねるメールを送信する処理。右側はゲストを延長しないという判断がされた場合に、期限に達したらEntra IDからゲストを削除する処理です。

おや? 「ユーザープロフィールの取得(V2)」でエラーが出ていますね。これは削除対象のゲストユーザーのメールアドレスから、オブジェクトIDを取得する部分ですが、どうやらテストを繰り返していたので既にゲストとして存在しないユーザーの検索をかけてしまったためのようです。

今回は、このようなエラーがクラウドフローの中で発生した場合に、運用チームが通知を受け取るTeamsチャネルに報告をさせる部分を加えて完成にしたいと思います。

まずは、エラーが発生した際にはどのようなJSONが返ってくるのかを確かめるために「作成3」をスコープの下に置きました。スコープの実行条件は「エラーが発生したとき」にしておきます。ちなみに、こういう一時的に中身がみたいようなデバッグ用の「作成」アクションは、あえて名前を変えないようにしてます。

スコープの実行結果を得るには、result関数を使います。

これで取得できるのは、スコープのなかで実行された各アクションの配列です。

name とある3行目、208行目がスコープの中のアクションのひとつです。残念ながらAplly to eachの中で実行されているアクションは表示されないみたいです。

ならば!と、Apply to each自体がエラー担っていた場合に、その中で何がエラーだったのかを捕捉するために、Aplly to each自体をresult関数で中身調査する「作成4」を追加しました。

result('Apply_to_each_2')

「作成4」で取得できたApply to eachのエラーの中身がこちら。Apply to eachは繰り返しなので、各回が配列の1要素になっています。注目するのは218行目のstatus項目で「name」が「ユーザープロフィールの取得(v2)」の部分でstatus「Failed」になっています。これによって、Apply to eachの中身のどの部分がエラーなのかが捕捉できそうです。

ということは、配列の各要素の、そこで、「アレイのフィルター処理」をつかって、以下の値が「Failed」となるものだけを抜き出します。

フィルターにはこのような式を書きました。

これでループ内のエラー部分、つまりEntra IDに存在しなかったユーザーた取得出来ました。だけど、このフィルター処理が成功してしまうと、次に用意していたスコープがスキップされてしまうんですよね・・・。なぜならスコープ自体が処理成功ステータスになってしまうから。

結局これに落ち着きました

いろいろ試行錯誤したものの、いまいちうまく行かないので、結局これで対応することにしました。

うまい方法があったら教えてください