MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

SharePoint の ハブサイト構成を Power Automate を使ってCSV出力する

ハブサイトとそれぞれのハブサイトに関連付けられたサイトの一覧取得するフローです。

SharePoint管理センターでも同様の一覧を "Active sites" のメニューからダウンロードできますが、ここの一覧はどうもハブ-ハブの親子関係をうまく反映してくれてないように見えます。

中間のハブのハブサイトが自分自身になっているんですよね。ちょっとこのままだと正確に構造が把握できないので、Power Automate を使って、ハブ-ハブの親子関係まで含めて一覧をとれるようにしてみました。

今回はよくあるパターンで下図のようにサイトが構成されています。

最終的にほしいのは以下のような表です。

サイト 親サイト
Top_Hub1 なし
Child_Hub Top_Hub1
Site1_3 Top_Hub1
Site1_4 Top_Hub1
Site1_1 Child_Hub
Site1_2 Child_Hub
Top_Hub2 なし
Site2_1 Top_Hub2
Site2_2 Top_Hub2

フローの全体はこのような形。

ポイント

Power Automate の標準的なアクションでハブサイトの一覧、またそれらの詳細情報は取得できないので SharePoint REST API を "Send an HTTP request to SharePoint" のアクションから実行していきます。

ハブサイトの情報取得

ハブサイトの一覧取得には

GET https://contoso-admin.sharepoint.com/_api/HubSites

またハブサイトの詳細は

GET https://<HubSite Url>/_api/web/HubSiteData

をそれぞれ使用します。

ハブサイトの詳細を取得すると結果が文字列化されたJSONオブジェクトであることが分かります。

多少厄介ですが、 replace()関数でエスケープ文字をもとに戻して replace(....,'\"','"')json()関数でオブジェクトに変換します。

これでハブサイトの親ハブサイトが取得できます。(というかこれをとらないと正しく親ハブが得られない)

関連サイトの一覧取得

関連サイト (Associated Site) の一覧取得は、Admin center (サイト) のリスト DO_NOT_DELETE_SPLIST_TENANTADMIN_AGGREGATED_SITECOLLECTIONS から "Get Items" アクションを使って取得します。

このとき、サイトのアドレスはカスタム値として手入力してください。 また、フィルターを使って、HubSiteIdという列が各ハブサイトのIdに等しいものだけ引っ張ってきます。

このあたりは以前の投稿で応用として触れています。

mofumofupower.hatenablog.com

データ整形と格納

最後にデータ整形をして、配列変数に設定しています。

配列変数の更新は以下の投稿のパターン3を利用しています。

mofumofupower.hatenablog.com

最後はCSVテーブルを作成してOneDriveに保存して終わりです。

おわり

多少込み入っていますので、サンプルのフローをダウンロードできるようにしました。接続情報とAdmin centerのURLを直していただくとご利用いただけます。

取れたデータはPower Queryなどで加工してBIしてみたり、Power Apps で何らかわかりやすくツリー表示してみたりと活用できるかなと思います。

github.com