Power Automate で SharePoint の絶対 URL からファイル情報を取得する
はじめに
Power Automate の SharePoint コネクタでファイルを取得するには、ファイルが格納されているサイトとそこからの相対パスが必要です。ファイルの場所があらかじめわかっていれば問題ありませんが、汎用的に処理したい場合など、絶対 URL を受け取ってファイルを開きたいことがあります。やっかいなのは、SharePoint では絶対 URL からどこまでがサイトの URL なのかを判断できない点です。
この課題は Microsoft Graph API の共有リンク API を使うことで解決できます。以前の記事でも紹介しています。
ただし、Microsoft Graph API を利用する場合はプレミアムコネクタ (HTTP コネクタまたは HTTP with Microsoft Entra ID コネクタ) が必要となるため、利用が難しい場合もあります。ですが、SharePoint REST v2 API では SharePoint から一部の Microsoft Graph API を呼び出すことができます。ドキュメントには記載がありませんが、共有リンクの API も呼び出し可能です。
サンプル コード
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