Power Automate フローを棚卸しするフロー
2022.05.26
Power Automate の実践的な活用方法のひとつが、SharePoint Online のアイテムやファイルをトリガーとしてフローを動かすことです。 SharePoint のアプリが「入力/編集/閲覧フォーム」や「データーストア」の役割を担うため、純粋に処理(フロー)さえ設計すれば、すぐに業務で使えることから、多くのエンドユーザーに受け入れられています。
課題は管理面
しかし、ここで問題になるのがその管理です。Power Automate は SharePoint Online と別(外部)のサービスであり、SharePoint アプリの設定画面を見ても、そのアプリにどんなフローが適用されているのか確認することはできません。
同様に、Power Platform 管理者であっても、あるアプリに紐づいているフローはどれか?という逆引きは(GUIベースでは)できません。Power Platform 管理センターの既存フロー一覧から確認できる情報が限られているからです。
フローでフローの情報を取得する
ただ、Power Platform 管理者であれば、フローのコネクタ「Power Automate Management」を利用することで、管理用のフローを設計して、既存フローの情報を取得し、その中から必要な情報(紐づいた SharePoint アプリ)を抽出することができます。
基本的な処理の流れは次のとおりです。
- 環境内の既存フローを一覧で取得する
- 各フローの詳細な情報を個別に取得する
- (2)の情報の中から必要な情報を抽出し、整形する
管理者としてすべてのフローを取得する
まず、すべてのフローを一覧で取得をするには前述の通り Power Automate Managementコネクタの「フローを管理者として一覧表示」アクションを利用します。微妙にアイコンが異なる「~ for Admins」コネクタもありますので注意。そちらではありません。
このアクションを実行すると、フロー名(実際にはフローID)、フローの表示名、フローの作成日時、フロー作成者(のプリンシパルID)を取得することができます。
なお、取得対象となるフロー数が多い場合、データーを取りこぼすことがあります(一度のクエリで取得できる情報数に閾値があるため)。事前に下記の設定を行い「改ページ:オン」を設定してください。
フローの詳細を取得する
次に、前アクションで取得したフローIDをキーに、フローひとつを対象として詳細情報を取得してゆきます。ここで利用するのが「フローを管理者として取得」アクションです。
ただ、残念ながらこのアクションを実行すればトリガーである SharePoint アプリが分かる…というシンプルなものではありません。あくまで、アクションの戻り値である JSON にアプリを特定できる情報も含まれている、というだけです。そこから実用的な情報を得るには、「データ操作」コネクタで JSON を解析・操作する必要があります(この投稿では割愛)。
フローの所有者を取得する
実は前述の「フロー管理者として一覧表示」にも「フローを管理者として取得」にも、フローに設定された所有者情報がありません(いずれもフロー作成者は取得できます)。この情報を得るには、別途「フロー所有者ロールを管理者として取得する」アクションを実行します。
フローIDをキーに、そのフローのロール( Owner / CanEdit / CanView )毎に設定されているユーザーアカウント情報を得ることが出来ます。ただ、取得される形式が「プリンシパルID」のため、そのままでは可読性がない、という問題があります。
その他のアクション
上記で「フローを棚卸しするフロー」の骨組みができます。ただ、実際には取得できた情報をキーに、さらに追加で情報を取得して実用的な棚卸しデーターをつくる必要があります。例えば、Azure AD コネクタ「ユーザーの取得」で、ユーザーの表示名やメールアドレスを取得したり、SharePoint コネクタ「すべてのリストの取得」でリスト名をしたり。最後はCSVへの出力なども必要ですね。