業務の隙間を埋める技術メモ。

「それ、作れるか?」より 「それ、作って大丈夫か?」を考えたい。 業務で“ちゃんと使える”かどうかを、 実際に手を動かして確かめたログを残しています。

Power automateで汎用承認フローを作ってみる

Power Automateで汎用承認フローを作ってみようと思います。

Power Automateは、手軽に承認フローを作れるのが売りのひとつです。ただし「フローを作るツール」であるがゆえに、普通に作ると柔軟性に欠けがちです。

たとえば、

  • 承認者が部署ごとに異なる

  • 金額によって承認階層が変わる

  • 運用開始後に承認ルールが頻繁に変わる

といったケースでは、その都度フロー自体を修正する必要が出てきます。

そこで今回は、承認階層や承認先をパラメータ化し、フローを作り直さなくても様々な承認形態に対応できる「汎用承認フロー」を作ってみました。

あくまで「やってみた」記録ですが、同じような悩みを持っている人のヒントになればと思います。


全体設計の考え方

今回のポイントはとてもシンプルで、

承認フローを Power Automate で定義しない

という割り切りです。

Power Automateはあくまで実行エンジンとし、
「誰が・どの順番で・どんな条件で承認するか」はすべてデータで定義します。

そのために、以下の4つのテーブルを用意しました。

このうち、特に重要なのが「フロー定義マスタ」と「タスク定義マスタ」です。


テーブル設計

フロー定義マスタ

「どんな承認フローが存在するか」を定義するテーブルです。

項目名 内容
フローID 承認フローを識別するID
フロー名 稟議、経費精算など
有効フラグ 使用中かどうか

ここでは、承認者や条件は一切持たせません。
あくまで「フローの箱」だけを定義します。


タスク定義マスタ(汎用化の肝)

承認の流れをすべて定義するテーブルです。

項目名 内容
フローID 対象となるフロー
承認順 1次承認、2次承認…
承認者種別 直属上司/部署長/個人指定
承認者ID ユーザーIDまたは部署ID
金額下限 この金額以上で有効
金額上限 この金額未満で有効

ここで、

  • 承認の順番

  • 誰が承認するか

  • どの条件で有効になるか

をすべてデータとして表現します。

これにより、

  • 5万円以上は部長承認

  • 10万円以上は役員承認

  • 部署ごとに承認者が違う

といった要件も、フローを修正せずにマスタ変更だけで対応できます。


申請トランザクション

ユーザーが実際に申請するデータです。

項目名 内容
申請ID トランザクションID
フローID 使用する承認フロー
申請者 申請ユーザー
金額 承認条件判定用
ステータス 申請中/承認中/完了

Power Appsなどから、このテーブルにレコードが作成される想定です。


承認履歴

承認のログを残すためのテーブルです。

項目名 内容
申請ID 対象申請
承認順 何次承認か
承認者 実際の承認者
結果 承認/却下
実行日時 承認日時

あとから「なぜこの申請が通ったのか」を説明できるようにするため、
業務利用では必須だと感じました。


Power Automate 側の実装

フローは1本だけ作ります。

トリガー


処理の流れ(概要)

  1. 申請トランザクションからフローIDと金額を取得

  2. タスク定義マスタを検索

    • フローIDが一致

    • 金額条件に合致

  3. 承認順で並び替え

  4. Apply to each で承認処理を順番に実行

  5. 承認結果を承認履歴に保存

  6. 最終承認後、申請ステータスを「完了」に更新

承認自体は、標準の
「承認の開始と待機」アクションをそのまま使っています。


実際に使ってみての所感

良かった点

  • フロー修正がほぼ不要

  • 承認条件の変更がマスタ修正だけで済む

  • 運用開始後の変更に強い

特に「とりあえず回しながら調整したい」業務では、
かなり扱いやすい構成だと感じました。


ハマった点・反省点

  • Apply to each のネストが深くなると可読性が下がる

  • 承認待ちが長いとフローの実行時間が延びる

  • エラー時のリカバリ設計は必須

途中状態をテーブルに保存し、
「どこで止まっているか」が分かるようにしておくのが重要でした。


まとめ

Power Automateは手軽ですが、そのまま作ると
「あとから変えにくいフロー」になりがちです。

今回のように、

  • 承認ロジックはデータで管理

  • フローは解釈と実行に専念

という構成にすると、
ローコードでも業務に耐える仕組みを作れると感じました。

汎用化というほど大げさではありませんが、
現場で困らないための一工夫としては、やってみる価値はあると思います。