[2020/11/18更新]: チームフローについて追記しました。
最近になって、「XXXっていうフローが最近使われていないから無効化するよ!」という内容のメールがよく来るようになりました。
おそらく新しい管理機能のリリースなのだと思いますが、たまにしか使わないフローでも無効化されていると探しにくくなるなーと思い、『自動で無効化されたフローを自動で再有効化するフロー』を考えてみました。
メールの形式
届くメールは (私のテナントは英語設定だからか) 必ず『Alert! Your flow has been turned off since it was not running』という件名で来ます。
また、メール本文の中 (HTML)を見てみると、本文中にフローへのリンクが含まれていることがわかります。
フローのURLは
https://flow.microsoft.com/manage/environments/環境の内部名/flows/フローの内部名/details
またはチームで共有しているフローであれば
https://flow.microsoft.com/manage/environments/環境の内部名/flows/shared/フローの内部名/details
の形式になっているので、メール本文から無効化対象のフローを特定することができます。
再有効化するフロー
再有効化するフロー自体は非常に短いです。トリガー入れて大きく4ステップ。
- まずはメール受信をトリガーにします。この時件名でトリガーする条件を指定しています。
- メール本文のflowのURLから、環境内部名とフローの内部名を含む箇所を抽出します。
- 2.では環境名とフロー名がつながっているので、これを分割するための変数を設定します。
- 最後にPower Automate Management コネクターの フローの有効化 アクションで無効化されたフローを指定します。
トリガーについては特に説明することもないので、ご自分に送られてきたメールを参考に、件名のフィルターを設定してください。
『2. メール本文のflowのURLから、環境内部名とフローの内部名を含む箇所を抽出』では文字列操作の関数を使っています。
split(split(triggerBody()?['body'],'https://flow.microsoft.com/manage/environments/')?[1],'/details')?[0]
この操作によってメール本文中のhrefにあるURLのうち https://flow.microsoft.com/manage/environments/
と /details
で挟まれた部分が抽出されます。 (環境の内部名/flows/フローの内部名
または 環境の内部名/flows/shared/フローの内部名
の形式)
『3.つながっている環境名とフロー名を分割するための変数を設定』では、まず文字列型の変数を初期化 (名前は divider) して、その後条件分岐で変数を更新しています。
条件分岐には ステップ2 で抽出した結果 (ここでは outputs('URL部分の抽出')
) を指定し、この結果が shared
を含むかどうかを判定しています。
判定がYESの場合には、分割する文字列を /flows/shared/
とし、判定がNOの場合には /flows/
を設定しています。
最後に「Power Automate Management」コネクターからフロー有効化のアクションを追加し、環境とフローにそれぞれ以下を設定したら完成です。
環境
split(outputs('URL部分の抽出'),variables('divider'))?[0]
フロー
split(outputs('URL部分の抽出'),variables('divider'))?[1]
おわり
おそらく、無効化までの期間など、そのうち設定できるようになるのだと思いますが、年1回、半年一回くらいの周期でしか使わないフローがあれば暫定対応として参考にしてみてください。
謝辞
チームで共有しているフローについては、実際に使っていただきフィードバックをくださった @halentio さんにこの場を借りてお礼申し上げます。