Microsoft 365 システム運用

Power Automate フローを棚卸しするフロー

Power Automate の実践的な活用方法のひとつが、SharePoint Online のアイテムやファイルをトリガーとしてフローを動かすことです。 SharePoint のアプリが「入力/編集/閲覧フォーム」や「データーストア」の役割を担うため、純粋に処理(フロー)さえ設計すれば、すぐに業務で使えることから、多くのエンドユーザーに受け入れられています。

課題は管理面

しかし、ここで問題になるのがその管理です。Power Automate は SharePoint Online と別(外部)のサービスであり、SharePoint アプリの設定画面を見ても、そのアプリにどんなフローが適用されているのか確認することはできません

同様に、Power Platform 管理者であっても、あるアプリに紐づいているフローはどれか?という逆引きは(GUIベースでは)できません。Power Platform 管理センターの既存フロー一覧から確認できる情報が限られているからです。

blog pa inventory img 01 1

フローでフローの情報を取得する

ただ、Power Platform 管理者であれば、フローのコネクタ「Power Automate Management」を利用することで、管理用のフローを設計して、既存フローの情報を取得し、その中から必要な情報(紐づいた SharePoint アプリ)を抽出することができます。

基本的な処理の流れは次のとおりです。

  1. 環境内の既存フローを一覧で取得する
  2. 各フローの詳細な情報を個別に取得する
  3. (2)の情報の中から必要な情報を抽出し、整形する

管理者としてすべてのフローを取得する

まず、すべてのフローを一覧で取得をするには前述の通り Power Automate Managementコネクタの「フローを管理者として一覧表示」アクションを利用します。微妙にアイコンが異なる「~ for Admins」コネクタもありますので注意。そちらではありません。

blog pa inventory img 02

このアクションを実行すると、フロー名(実際にはフローID)、フローの表示名、フローの作成日時、フロー作成者(のプリンシパルID)を取得することができます。

なお、取得対象となるフロー数が多い場合、データーを取りこぼすことがあります(一度のクエリで取得できる情報数に閾値があるため)。事前に下記の設定を行い「改ページ:オン」を設定してください。

blog pa inventory img 04

フローの詳細を取得する

次に、前アクションで取得したフローIDをキーに、フローひとつを対象として詳細情報を取得してゆきます。ここで利用するのが「フローを管理者として取得」アクションです。

ただ、残念ながらこのアクションを実行すればトリガーである SharePoint アプリが分かる…というシンプルなものではありません。あくまで、アクションの戻り値である JSON にアプリを特定できる情報も含まれている、というだけです。そこから実用的な情報を得るには、「データ操作」コネクタで JSON を解析・操作する必要があります(この投稿では割愛)。

blog pa inventory img 05

フローの所有者を取得する

実は前述の「フロー管理者として一覧表示」にも「フローを管理者として取得」にも、フローに設定された所有者情報がありません(いずれもフロー作成者は取得できます)。この情報を得るには、別途「フロー所有者ロールを管理者として取得する」アクションを実行します。

フローIDをキーに、そのフローのロール( Owner / CanEdit / CanView )毎に設定されているユーザーアカウント情報を得ることが出来ます。ただ、取得される形式が「プリンシパルID」のため、そのままでは可読性がない、という問題があります。

blog pa inventory img 06

その他のアクション

上記で「フローを棚卸しするフロー」の骨組みができます。ただ、実際には取得できた情報をキーに、さらに追加で情報を取得して実用的な棚卸しデーターをつくる必要があります。例えば、Azure AD コネクタ「ユーザーの取得」で、ユーザーの表示名やメールアドレスを取得したり、SharePoint コネクタ「すべてのリストの取得」でリスト名をしたり。最後はCSVへの出力なども必要ですね。