参加申込から概要ファイル添付までのForms、Excel、Gmail、SharePointをPowerAutomate


# 概要
ワークショップの参加申込の受け付け、発表要旨ファイルの事前受け取りのためにPowerAutomateの練習も兼ねて作りました。

発表要旨ファイルはSharePointの「ファイルの要求」で受け取ります。Formsに入力された申込者のメールアドレスの確認を兼ねたメールの本文にSharePointのURLを記載します。メールの送信はGmailで行います。Formsで受け付けた情報はExcel Onlineに追記していきます。Formsの受付をトリガーとしてここまでをPowerAutomateで行います。
Microsoft 365 Business Standardを使える環境で作りましたが、Microsoft 365 Business BasicでもPowerAutomate、SharePoint、Formsが使えるようなので問題ないのだと思います。
「ファイルの要求」はMicrosoftの公式ページではこの「[SharePoint または OneDrive でファイル要求を有効にする](https://learn.microsoft.com/ja-jp/sharepoint/enable-file-requests)」に次のように記載されており、今回の用途に適していそうです。
> OneDrive または SharePoint の ファイル要求機能 を使用すると、送信するリンクを使用して他のユーザーがファイルをアップロードできるフォルダーを選択できます。 ファイルを要求するPeopleは、ファイルのみをアップロードできます。フォルダーの内容を表示したり、ファイルを編集、削除、またはダウンロードしたり、他のユーザーがファイルをアップロードしたかを確認することもできません。

# 流れ
## PowerAutomateのフロー
1. Formsで受け付け
1. Excelに受け付け内容を追記
1. Formsで受け付けた宛先に、受付番号、ファイルアップロード用URLを記載したメールをGmailで送信
## 準備
次の３つを準備してからPowerAutomateを作ります。
* Forms作製
* SharePointのフォルダ作成、設定、URL取得
* Excelのテーブル作製

# Forms
1. 新しいフォーム
1. フォームの名前を記載し、メールアドレスと名前の記載欄を「必須」で追加
1. 設定で、「すべてのユーザーが回答可能」「回答を受け付ける」「お礼のメッセージをカスタマイズ」「送信後に応答の受信を許可する」
1. 「回答を収集」でリンクをコピー
![form_creation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/e1a6b360-a143-f6d9-c79b-d1ab898c8ec3.png)
「回答を収集」のリンクの「id=」以下をPowerAutomateでのForms指定に使用することにな

# SharePoint
## チームサイトの作成
1. サイトの作成
1. チームサイト
1. 必要事項を記載し、チーム作成
1. 完了
![sharepoint_creation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/a81ba2cd-cfcd-7224-8a94-bbe9857f731c.png)
SharePointの設定で、RequestFilesLinkEnabledを確認する際にチームサイトのURLを使用することになる。

## ファイルアップロード用フォルダー作成
1. ドキュメントのメニューの新規
1. フォルダー
1. フォルダー名を記載し、作成
![folder_creation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/e34767a8-a5e2-357e-8065-11409e05a1a0.png)

## 設定
SharePointで「ファイルの要求」を行えるようにします。デフォルトではこれが行えないようなので、管理者権限で設定を変更しました。
Microsoftの公式ページではこの「[SharePoint または OneDrive でファイル要求を有効にする](https://learn.microsoft.com/ja-jp/sharepoint/enable-file-requests)」に記載されています。SharePoint Online 管理シェルを使うことになり、使い始めるまでの手順は「[SharePoint Online 管理シェルの使用を開始する](https://learn.microsoft.com/ja-jp/sharepoint/enable-file-requests#enable-or-disable-request-files-per-site)」に記載されています。
これらに従い次の手順を実行しました。
1. SharePoint Online 管理シェルをインストール
1. 「[SharePoint Online 管理シェルの使用を開始する](https://learn.microsoft.com/ja-jp/powershell/sharepoint/sharepoint-online/connect-sharepoint-online)」の「[多要素認証 (MFA) を使用して接続するには](https://learn.microsoft.com/ja-jp/powershell/sharepoint/sharepoint-online/connect-sharepoint-online#to-connect-with-multifactor-authentication-mfa)」に従って接続（多要素認証でない場合は「[ユーザー名とパスワードを使用して接続する場合](https://learn.microsoft.com/ja-jp/powershell/sharepoint/sharepoint-online/connect-sharepoint-online#to-connect-with-a-user-name-and-password)」のようだが未確認）
1. RequestFilesLinkEnabled を確認する箇所は次のコマンドを実行して確認
```
Get-SPOSite -Identity <SiteURL> | Select RequestFilesLinkEnabled
```
通常は、Falseになっている。
4. 「ファイルの要求」を有効にするために次のコマンドを実行
```
Set-SPOSite -Identity <SiteURL> -RequestFIlesLinkEnabled $True
```
なお、「ファイルの要求」を無効にするのは次のコマンド。ファイルを集め終わった際には無効にしておくのが良さそう。
```
Set-SPOSite -Identity <SiteURL> -RequestFIlesLinkEnabled $False
```
ただ、ここまでしなくても「ファイルの要求」リンクの削除だけでも良いであろう。

## 「ファイルの要求」URL取得
1. 作成したチームサイトに移動
1. ドキュメント
1. ファイルアップロード用フォルダーを選択
1. 「ファイルを要求する」を実行
1. アップロード画面への表示文を記載し、「次へ」
1. リンクをコピーして控えておき、「完了」
![request_link_creation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/93be999f-ae3b-4952-cd7e-fb4ec5f030bf.png)
控えたリンクを開くことでチームサイトのURLはわかってしまいますが、「ファイルを要求する」を有効にしたからといってチームサイトにアクセスできないのは確かそうでした。

## 「ファイルの要求」リンクの削除
ファイルを集め終わった際に行っておく。
1. 作成したチームサイトに移動
1. ドキュメント
1. ファイルアップロード用フォルダーを選択
1. 共有
1. 「共有した相手」の「共有リンク」
1. その他のオプション
1. リンクの削除
![request_link_delete.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/7b40795c-a8be-9172-c3c8-1d15e0c75af5.png)


# Excel Online
1. 新しい空白のブックを作成
1. テーブルの見出しとする「受付番号」「E-mail address」「Name」を記載
1. これら３つのセルを選択し、「挿入」の「テーブル」でテーブルの作成
1. 「先頭行をテーブルの見出しとして使用する」にして「OK」
![excel_creation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/501e8ddc-b9cd-828b-4e6f-c820c827b910.png)
PowerAutomateで使用するテーブル名は「テーブルデザイン」から確認できる。デフォルトは「テーブル1」になるようだ。

# PowerAutomate
1. 作成
1. 自動化したクラウド フロー
![automate_creation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/32a46d47-6ab4-e3a8-3ab3-7f93ffabe39c.png)
1. フォームIDに「カスタム値の入力」でフォーム作成での「回答を収集」のリンクの「id=」以下を記載
1. 新しいステップで、Formsを検索し「応答の詳細を取得する」
1. フォームIDは先ほどと同じ。応答IDは「応答ID」を選択
![automate_forms.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/1487ca6f-baf8-b318-b580-b7d31bca376c.png)
1. 新しいステップで、Excelを検索し「表に行を追加」
1. 場所、ドキュメントライブラリ、ファイルで先ほど作成したExcel Onlineのファイルを選択
1. テーブルはプルダウンから先ほど選択した「テーブル1」を選択
1. テーブルに設定した見出しが表示されるので、それぞれにフォームの対応する項目を選択
![automate_excel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/68ecb98b-2eda-c497-4ad9-8adaa5808de5.png)
1. 新しいステップで、Gmailを検索し「メールの送信」（Gmailの認可が必要）
1. 宛先の右下の「動的コンテンツの追加」をクリック
1. 宛先に「応答の詳細を取得する」の「E-mail address」を選択
1. メールの件名、本文（ボディ）を記載。本文にはSharePointの「ファイルの要求」URL取得で控えたURLを記載
1. フローの保存
![automate_gmail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255373/c2ed454f-4ffd-ae66-0228-16f4cecd98b4.png)

# 注意点
Botよけ、SharePointへのファイルアップロードの制限が必要と思いますが、そこまではできていません。いたずらで大量にファイルを送りつけられたりすることに対する対策はどうすれば良いのだろう。別途、SharePointにファイルがアップロードされるたびに、ファイルサイズ、頻度を確認して閾値を超えたら一時停止とかあるのかな。