【Forms✕PowerAutomate】フォームの回答をSharePointリストに保存する

<iframe width="560" height="400" src="https://www.youtube.com/embed/Waozj9y4uhM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
動画でも解説しています。

## Formsについて
Microsoft Forms は、Microsoft が提供するオンラインアンケートやクイズの作成ツールです。直感的なインターフェースで、簡単にフォームを作成し、回答を収集・分析できます。主に ビジネス、教育機関、個人利用 などで活用されています。

## Formsの主な機能

1.フォームやクイズの作成

·質問の種類（選択式、記述式、評価、日付入力など）を選択可能
·画像や動画の挿入も可能
2.リアルタイム集計と分析

·回答データを自動的に収集・グラフ化
·Microsoft Excel にエクスポートして詳細分析可能

3.共有とコラボレーション

·リンクの共有、QRコード生成、メール送信で簡単に配布
·Microsoft 365 の他のツール（Teams, SharePoint, OneNoteなど）と統合可能

4.アクセス制御とセキュリティ

·社内限定公開や、特定のユーザーへの制限が可能
·Microsoft 365 のセキュリティポリシーに準拠

5 多言語対応

·フォームの言語を変更して、グローバルな利用も可能

となっています。
## すべてのユーザーが回答可能なフォームについて
回答の収集で「すべてのユーザーが回答可能」を選択すると、組織外のアカウントを持っていない人でもURLからアクセスすることで回答が可能になります。
この回答をSharePointリストなどに保存するには、PowerAutomateでフローを作成することになります。

フォームの作成時、フィールドに「ファイルをアップロード」が含まれていると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/49aa00ee-16a8-4f08-ddf2-d55942e9b758.png)
「すべてのユーザーが回答可能」がグレーアウトして、組織内のユーザーしか回答できなくなります。
逆に、「すべてのユーザーが回答可能」を選択した状態では「ファイルのアップロード」は追加できなくなります。
組織外のユーザーから回答を収集する際にはファイルのアップロードができないことに注意してください。

## PowerAutomateでフローを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/d21f647c-25d4-87fc-23ef-120c59bb3c5d.png)
こちらは、フォームの回答をSharePointリストに登録するフローの最小構成です。
一番上はトリガーで、フォームで回答が送信されるとフローが実行されます。
2番目は一見必要なさそうに見えるのですが、トリガーだけでは回答の内容を取得することが出来ませんので、こちらも必要になります。
3番目はSharePointリストに「項目の作成」をするアクションですね。

今回は、「項目の作成」アクションの前に
選択肢の値を取得するために、項目の作成の前に「JSON_の解析」と「選択」アクションも追加しました。

## トリガー「新しい応答が送信されるとき」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/dc8af1f7-334e-b5a7-48ce-d367418d97ea.png)
設定はフォームIDのみとなっており、ドロップダウンで利用可能なフォームを選択することができます。
似たような名前のフォームをたくさん作っていると、どれを選べばよいかわからなくなるので、分かりやすい名前を付けていると安心です。

## 「応答の詳細を取得する」アクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/2ec443a9-bac9-cc75-a56d-e7ced2f54646.png)
フォームの回答の内容を取得するアクションです。これがないと回答内容を利用することが出来ません。
設定はフォームIDに先ほどと同じフォームを選択。
応答IDは「動的な値」で「新しい応答が送信されるとき」の「応答ID」を選択します。

## 選択肢の値を取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/46597794-1135-a599-55d3-160d5cbd54e2.png)
使用したフォームの「興味のあるテーマ」は選択肢列にしています。
「応答の詳細を取得する」アクションから得られる値は
```["Excel","Outlook","Teams","SharePoint"]```
このような配列になっているので、
```outputs('応答の詳細を取得する')?['body/rfc7a079c15b64d35a1c14af0f26105ec'][0]```
とかで取り出せないかと思ったのですが、できませんでした。（どなたか出来たら教えてください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/7b0db2ab-7794-b72c-d42b-fd5d8567a9f2.png)
「JSONの解析」アクションを追加して「サンプルから生成」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/8bc49669-f413-e73f-56e3-3922f3262779.png)
先ほどの配列の例を入れて完了します。

<以下修正> Xにて選択アクションを使用すると良いとアドバイスいただきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/352dde97-a6a2-abee-ba2b-d9b762a8059b.png)
「選択」アクションを追加し、
「開始」に動的な値「JSON_の解析」の「本文」
「マップ」の「キーの入力」に「Value」
値の入力に動的な値「JSON_の解析」の「項目」
を設定します。

## 「項目の作成」アクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/00fe5b25-920c-378d-d79b-21ddbd880116.png)

SharePointリストに項目を追加するアクションです。
設定は「サイトアドレス」リストがあるSharePointサイトを選択。
「リスト名」は解答を保存するリストを選択します。
それぞれSharePointリストの列名に対応する回答項目を、「動的な値」の「応答の詳細」から選びます。

「興味のあるテーマ」は選択肢例(複数選択可)なので、さきほど追加した「選択」アクションの「出力」を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/14955811-96d6-91e2-93dc-6553689c8d04.png)

右上の「T」アイコンから「アレイ全体の入力に切り替え」て
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/cc91b567-40c9-5a31-9e9c-9b997fcb6e09.png)

動的なコンテンツから「選択」の「出力」を設定。
これでリストの選択肢列にもきれいに保存されます。

評価の項目は数値がはいります。★5なら5ですね。
こちらも選択肢列なのですが、複数選択を許可していない単一選択なので、先ほどの選択肢列とは入力方法が違います

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/d1564998-235d-d838-883e-142b3cbd98ec.png)

最終的なフローです。
選択肢が無ければ、初めに載せたトリガーと2つのアクションで事足ります。