SharePoint の“ファイル要求”機能は 外部共有が制限された組織でも、Power Automate なら使用できる！

# はじめに
SharePoint の“ファイルの要求”は、任意のフォルダに対して直接ファイルのアップロードを要求できる機能ですが、組織の設定が「最も制限が少ない」`すべてのユーザー`になっていないと、メニューにこの項目が表示されず、使用することができません。

https://learn.microsoft.com/ja-jp/sharepoint/enable-file-requests

`すべてのユーザー`になっていると、組織外にもファイルを共有できてしまうので、情報漏洩の懸念から、制限を掛けている組織も多いと思います。

今回は制限のかかかった組織でも、組織内でこの**ファイル要求**機能を利用するために、ローコードユールである**Power Platform** を活用したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/7bd7351b-cc9c-4653-b59e-f767da39f188.png)

# ファイル要求のためのURLをPower Automate で発行する
ファイルをアップロードしてもらうためのURLを発行するフローを作成します。

## 使用イメージ
作成したフローは、ドキュメントライブラリの右クリックメニューから起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/d36ef65d-672a-4d96-83f7-abd3dcaad7b8.png)

右側のパネルでフローが起動されるので、要求時に表示される説明文を入力して実行します。
![2025-02-15_15h21_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/f938991b-792e-480b-aa5d-3ab7deebd5ca.png)

今回はTeamsのボットからのチャットで自分に届くようにしています。
![2025-02-15_15h22_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/80f07092-2f58-4f81-9edc-c2bf1aa64205.png)

このURLをコピーして開けばファイル要求機能が使用できます。
URLを他の人にチャットで共有するなどしてご利用いただけます。
![2025-02-15_15h23_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/e00ac79d-6df1-4ae9-b100-092d4d3537de.png)

:::note warn
このURLにアクセスするには、同じ組織のアカウントでサインインする必要があります。
外部からファイルを集める目的では使用できませんのでご注意ください。
:::

## フローの作成
フローは結構シンプルな構成です。
大事なのは２番目の`SharePoint に HTTP 要求を送信します`アクションだけなので、他の部分は自由に変更することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/3d93f866-bf89-49dc-8574-b2c82f8e0406.png)

### トリガー
トリガーは`選択したファイルの場合`を使用しています。
ファイルの右クリックメニューから起動できるトリガーですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/bc6ff26d-e55a-48e9-8a77-13a162b2907b.png)

トリガーに入力を追加して、リンクを開いたときに表示される説明文を入力できるようにしています。

:::note info
今回は実装していませんが、リンクの有効期限やパスワード、リンクの使用を限定するユーザーの指定もできるので、トリガーのインプットに含めておくこともできます。
:::

### リンクの発行
ファイル要求のリンクを発行するために、SharePoint に HTTP 要求を送信しています。
サイトのアドレスはトリガーのサイトと合わせてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/21112809-3a7f-4908-933a-a7ade0d821ce.png)

```plaintext:URI
_api/web/lists/GetByTitle('ドキュメント')/items('@{triggerBody()?['entity']?['ID']}')/ShareLink
```

URIの`GetByTitle('ドキュメント')`の部分は、トリガーで指定したライブラリ名に合わせて指定します。
ただし、利用環境の言語設定によって変わる場合があるので、ご利用の環境に合わせて変更してください。（※`GetByTitle('Document')`になるなど）

また、`items('@{triggerBody()?['entity']?['ID']}')`の部分は、トリガーの動的なコンテンツから指定するのですが、中身が空のIDと正しいIDの２つが表示されていたので、入力時は注意してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/377b791a-761b-4cce-8327-c0a50e199eef.png)

重要なのがボディですね。

```json:header
{
  "Accept": "application/json;odata=verbose"
}
```

```json:Body
{
  "request": {
    "createLink": true,
    "settings": {
      "allowAnonymousAccess": false,
      "linkKind": 6,
      "expiration": null,
      "restrictShareMembership": false,
      "updatePassword": false,
      "password": "",
      "description": "@{triggerBody()?['text']}",
      "role": 8,
      "applicationLink": false,
      "limitUseToApplication": false
    }
  }
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/7d7334a6-0b39-4002-8ece-6bb3bd8d29cd.png)


ボディの`"allowAnonymousAccess": false`にしている部分が、組織外のユーザーには使用できないように制限を掛けている部分です。
組織の設定が「最も制限が少ない」`すべてのユーザー`になっていない場合は、この部分を設定に合わせておく必要があります。

:::note alert
現に、`"allowAnonymousAccess": true`で発行を試みた場合、以下のエラーが発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/68bfd255-37fa-4da8-a083-91dffeedf2f2.png)
`Request files link is disabled on this site.`
:::

### リンクを自分に送る
あとは作成したリンクを何らかの形で表示してあげます。
今回は、手っ取り早くTeamsのチャットで自分に送ることにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/3c3f6667-7c39-4a0d-b60a-2fa3e75097eb.png)

リンクの取り出し方は少し難しいです。
動的なコンテンツからは選択できないので、以下をコピペしたり数式でしっかり指定してあげてください。
一度実行してみてから、`SharePoint に HTTP 要求を送信します`アクションの出力を確認すると良いと思います。

```plaintext:sharingLinkInfo
@{body('SharePoint_に_HTTP_要求を送信します')?['d']?['ShareLink']?['sharingLinkInfo']?['Url']
}
```

# おわりに
今回はフローのみで行いましたが、Power Appsと組み合わせて画面を作ることもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/320f15b6-bc0f-4b46-b401-877770865cf5.png)

ファイル要求の機能は、Microsoft Forms を使ってファイルを集めるのとは違い、**ファイルの拡張に制限がない**ことや、**任意のフォルダに直接ファイルを集められる**という利点があります。
最近だと、SharePointリストのリストフォームの添付ファイルとして集める方法もあるので、要件に合わせた選択肢を取れるといいですね。

制限のある組織でもファイル要求は使用できますので、あなたの選択肢の１つになれば幸いです！