2022年2月19日 (土)

[Power Automate] フローのタイムアウトと承認期間が長いフローの構築

長期間の承認フロー

Power Automate にはフローの実行継続期間があり、フロー開始されてから30日となっています。

Duration and retention limits

2022-02-19_22-39-26

承認フローのようなフロー完了までに長期間にかかるようなものは、この制限に引っかかってしまうことがあります。そこでマイクロソフトは承認の情報を Microsoft Dataverse に格納することを勧めています。下記の記事は2019年のもので現在ステータスがアーカイブになっていますが参考にはなります。

Long-lived approvals and flows on Common Data Service

かいつまむと 承認 コネクターの 「承認の作成」アクションを使うことで、フローを作成した環境に既定で用意されている Microsoft Dataverse に承認が格納されるとのこと。これをうまく使えば長期実行できるよ、という話です。

そこでたどり着くのが Power Automate Community の「Build long-running Approval Flows」というブログ記事です。これを一通り試せば、おおよそどんなことをすべきかわかるかなと思ったのですが、如何せん、記事が書かれたのが2019年で Dataverse にもなっていない頃です。今のフローで作成してようとすると結構躓きどころが多い。

ということで、2022年2月現在でフローを作り直すとどうなるかをここに書き記しておきます。フローは2つを組み合わせていきます。大まかなイメージは次の通り。

2段階フロー

1つ目のフロー

こは次のように作成します。ポイントは「承認」コネクターの「承認を作成」を使うことですね。

2022-02-19_22-11-15

2つ目のフロー

これには Dataverse のコネクターを使っています。これはプレミアム コネクターであるため有料プランなどが必要ですね。そのためインターネット上にはこのコネクターを使わずにうまくタイムアウトを処理するロジックを構築している例が複数見つかるので、気になる方は探してみてください。

2022-02-19_22-16-50

最初に追加しているのが Dataverse の「行が追加、変更または削除された場合」トリガーです。「種類の変更」は "更新" を指定し、テーブルは Approvals を指定します。

2022-02-19_23-32-37

次に「IDで行を取得する」アクションを追加します。これは承認を依頼したユーザーを特定するために使用しています。

2022-02-19_23-33-59

条件分岐は「行が追加、変更、または削除された場合」トリガーの「Result」を使って、承認されたかどうかを判定します。

2022-02-19_23-35-41

最後は承認または却下された時にメールを送信しています。送信先は「IDで行を取得する」で取得した申請者の「既定電子メール」を指定しています。「Title」は「行が追加、変更、または削除された場合」トリガーからの取得したものです。

2022-02-19_23-37-35

以上の2つのフローを保存したら動作検証しましょう。

検証結果

1つめのフローをテスト実行することで、Microsoft Teams の承認アプリに承認依頼が送られます。これで1つめのフローが実行されたことがわかります。

2022-02-19_10-27-14

これを承認することで無事にメールに結果が届きます。これで2つめのフローも実行されたことがわかります。

おまけ

このフローを構築することでわかったのが、承認コネクターで「承認を作成」することで Approvals という Dataverse のテーブルに承認が追加されることです。実際にビルトインのソリューションである「Microsoft Flow Approvals Core Solution」を見てみると Approval (複数形は Approvals, スキーマ名は msdyn_flow_approval ) テーブルにデータが追加されていることがわかります。

2022-02-19_20-22-02

2022-02-19_20-24-09

コメント