PowerApps + Power Automateを使って承認機能を運用されている企業様は一定数いらっしゃるかと思います。そして、その際、代理承認機能をどうするかという問題に頭を悩ませている担当者様や開発会社さんは結構多いのではないかなと思います。
もちろん、Power Automateで頑張って複雑な条件分岐を設定して実装することはできますが、導入後の保守や継続開発を考えるとできるだけシンプルに実装したいものです。なので、最初から承認者と副承認者の両方に承認依頼を飛ばすような仕組みにする、というのが落としどころになりがちです。
とはいえ、やっぱり担当者が長期休暇に入る場合などは期間を指定しておいて、あらかじめ代理承認者を登録できた方がいいですよね、ということで、なんだかんだで代理承認機能の実装が必要となることがあります。
・・ということで、本記事ではPowerAppsとPower Automateで意外と簡単に実装できる「代理承認機能(予約機能付き)」の開発方法について解説していきます。
ポイントはPower Automateをこねくり回して解決しようとせず承認ルートをマスタ化しておいてそっちでコントロールする、という点です。
今回はPowerApps (Dataverse)側で承認ルートを管理する前提で記載していますが、ExcelやSharepoint List、Google Spread Sheetなどで承認ルートを管理する運用でも同じような実装が可能です。
実装方法
たとえば、以下のようにPowerApps (Dataverse) で承認ルートを管理する仕組みを作ったとします。
※今回はPowerApps (Dataverse)を例に説明しますが、計算式を指定できる仕組みであればExcelでもGoogle Spread SheetでもSharepoint Listなど、なんでもよいです。
ここで、代理承認機能を実装するときのポイントは、Power Automateの承認機能はメールアドレスで承認者を指定する仕様になっているという点です。したがって、メールアドレスのところを動的に代理承認者のものに差し替える仕組みを作ってしまえばそれでOKです。
ここからステップバイステップで解説していきます。
まずはDataverse標準のユーザーテーブルを拡張していきます。以下の手順で進めて行きます。
今回の記事の本筋ではないですが、多段階の承認フローは上記のようにApply to eachでループを回すような実装方法がオススメです。
Microsoft Learnでは承認アクションを複数配置するような実装方法が紹介されておりますが、承認者が増えたり減ったりするたびにフローを修正することになり使いまわしができないので、個人的にはあまりおすすめできません。
解説
「承認用メールアドレス」というフィールドは”計算式”という機能を使って作成します。
この計算式は簡単なIF文ですが、”今日という日が代理承認期間に含まれる場合は代理承認者のメールアドレスを、そうじゃない場合は本人のメールアドレスを返す”という意味です。
※DateAdd関数でUTC(協定世界時)を日本時間に補正しています。
例えば、Saitoさんが3月はずっとオーストラリアに遊びに行くからその間の承認は君に任せたよ、と私に言ってきた場合、以下のような設定をしておけばSaitoさんがオーストラリアにいる間だけ承認権限が自動的にSetoyaに委任される、ということになります。
まとめ
PowerAppsとPower Automateを使って承認ワークフローの仕組みをつくる、という開発は当社でもこれまで散々やってきました。
Power Automateは非常にとっつきやすく最高に便利なツールではあるのですが、少し凝ったことをしようとすると一気に実装の難易度(というか、後から保守をする人の難易度)が上がってしまい、ノーコード開発の良さが失われてしまう、という側面があります。
今回の「代理承認機能の開発」というのもそのパターンの一つなのですが、このような場合、Power Automateでゴリゴリ頑張るのではなくて、ちょっと視野を上げてデザインを考え直してみると意外と簡単に実現することができたりします。
常にこのような発想ができるよう、日々精進していきたいものです。