💻

Power Automate で SharePoint の絶対 URL からファイル情報を取得する

2023/11/14に公開

はじめに

Power Automate の SharePoint コネクタではファイルの取得はファイルが格納されているサイトとそこからの相対パスが必要になります。ファイルがどこにあるかがあらかじめわかっていればそれほど苦労しませんが、汎用的に処理したい場合など、絶対 URL を受け取ってファイルを開いたりしたいことがあります。やっかいなのは、SharePoint は絶対 URL からはどこまでがサイトの URL なのかを判断することが不可能である点です。

実はこれは Microsoft Graph API の共有リンク API を使って解決することができます。以前の記事でも紹介しています。

https://zenn.dev/karamem0/articles/2022_01_20_130000

ただ Microsoft Graph API だとプレミアム コネクタ (HTTP コネクタか HTTP with Microsoft Entra ID コネクタ) を使わなければいけないので困る方もいるかもしれません。嬉しいことに SharePoint REST v2 API では SharePoint から一部の Microsoft Graph API を呼び出せます。ドキュメントには記載がありませんが共有リンクの API を呼び出すこともできます。

https://learn.microsoft.com/ja-jp/sharepoint/dev/apis/sharepoint-rest-graph?WT.mc_id=M365-MVP-5002941

サンプル コード

SharePoint REST v2 API の呼び出しには SharePoint に HTTP 要求を送信します アクションを使用します。注意点としては必ず Accept ヘッダーと Content-Type ヘッダーを含めるようにしてください。

絶対 URL からファイル情報を取得する

SharePoint REST v2 API の呼び出しの サイトのアドレス はルート サイトの URL で問題ありません。

URI は以下のような数式になります。絶対 URL は Base64 URL エンコード (Base64 URLSafe) します。

_api/v2.0/shares/u!@{replace(replace(replace(base64(triggerBody()?['text']), '=', ''), '/', '_'), '+', '-')}/driveitem/listitem

絶対 URL からサイト情報を取得する

上記のアクションの結果からサイトの ID を得られるので再び SharePoint REST v2 API を使ってサイトの URL を得ます。

URI は以下のような数式になります。

_api/v2.0/sites/@{body('絶対_URL_からファイル情報を取得する')['parentReference/siteId']}

ファイルの情報を取得する

ここまでくれば通常の SharePoint アクションを使用することができます。

項目
サイトのアドレス body('ファイルが格納されているサイト情報を取得する')['webUrl']
リスト名 body('絶対_URL_からファイル情報を取得する')['parentReference/listId']
ID body('絶対_URL_からファイル情報を取得する')['id']

実行結果

実行してみると絶対 URL からきちんと情報が取れていることがわかります。

おわりに

SharePoint に HTTP 要求を送信します アクションで SharePoint REST v2 API (Microsoft Graph API) が呼べるというのは意外な盲点でした。標準コネクタで使用できるのでぜひ使っていただきたいと思います。

Discussion