ハブサイトとそれぞれのハブサイトに関連付けられたサイトの一覧取得するフローです。
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に等しいものだけ引っ張ってきます。
このあたりは以前の投稿で応用として触れています。
データ整形と格納
最後にデータ整形をして、配列変数に設定しています。
配列変数の更新は以下の投稿のパターン3を利用しています。
最後はCSVテーブルを作成してOneDriveに保存して終わりです。
おわり
多少込み入っていますので、サンプルのフローをダウンロードできるようにしました。接続情報とAdmin centerのURLを直していただくとご利用いただけます。
取れたデータはPower Queryなどで加工してBIしてみたり、Power Apps で何らかわかりやすくツリー表示してみたりと活用できるかなと思います。