Microsoft FormsからSharePointリストにファイルを添付する

Microsoft Formsからファイルを送信し、
SharePointのリストにファイルを添付するAutomateのテンプレートがなかったため作成します。
想定する業務フローとしてFormsから経費の申請を行い、
経費申請の内容と領収書画像などがSharePointリストに保存されることなどです。

# 大きな流れ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/b5a5511c-3278-f98b-d857-4a68e060731d.png)

1. (Forms) 新しい応答が送信されるとき
2. (Forms) 応答の詳細を取得する
3. (SharePoint) 項目の作成。※リストに追加
    3. テスト JSON情報を調査
4. (JSON) JSONの解析
5. (SharePoint) パスによるファイルコンテンツの取得
6. (SharePoint) 添付ファイルの追加

コツは、
4で取得したJSONのname属性からファイル名を取得し、
5でファイルコンテンツ(ファイルそのもの)を取得するところです。

調べた限りだとテンプレートもなさそうでした。※2022年2月現在

# 前提条件

利用環境は以下のようになります。

* Microsoft Forms(Forms グループフォーム)
    * チームで作成する場合は、グループのFormsで作成しましょう。
* OneDrive for Business (SharePointドキュメント)
    * Formsを個人で作るとOneDrive、グループで作るとSharePointドキュメントに添付ファイルが送信されます。
* SharePointリスト


今回はグループのFormsを例に説明します。

# フロー作成(1~6)

## 1. (Forms) 新しい応答が送信されるとき(トリガー)

事前に取得していたフォームIDを選択するかカスタム値から入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/2db07180-5cf7-b2ca-c544-170f3237910c.png)

※フォームIDは、URLの`id=`のあとに続く箇所です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/d4fdbba7-adf7-4088-e9b0-54083bd40ef7.png)

## 2. (Forms) 応答の詳細を取得する

フォームID:選択か入力
応答ID: (Forms)*応答ID*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/b92c30cf-f110-f0fb-2745-ad74b42b500b.png)

## 3. (SharePoint) 項目の作成。※リストに追加

* サイトのアドレス: サイトURL
* リスト名:リスト名
* Title: (Forms)の任意の動的コンテンツ
* その他(※画像の例では`金額`): (Forms)の任意の動的コンテンツ

※TitleはSharePointリストのデフォルトの列名です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/dbb33817-bb86-fed3-4900-a2944365ffcd.png)

赤字の箇所はFormsからの任意の動的コンテンツを入れましょう。

## テスト (JSON) JSONの解析

ファイルのJSON形式を知るためのテストです。
`(JSON)JSONの解析`を作成しましょう。

* コンテンツ: Formsの添付ファイル(動的コンテンツ)
* スキーマ: `""`などと入力。一旦テスト

その後、Formsからテストで投稿することでJSON情報が確認可能です。
以下のスクショは`実行履歴`から確認できる添付ファイルのJSON情報です。
後ほど使うため赤線部分をコピーしておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/75c388a7-4c2f-c94b-dbb7-128c1f3085b5.png)

## 4. (JSON) JSONの解析

JSON情報がわかったため、その情報を入力します。

* コンテンツ: Formsの添付ファイル(動的コンテンツ)
* スキーマ: `サンプルから生成`をクリックして先程のJSON情報をペースト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/3fb25556-f6c8-aeb2-28a1-33ae3282b4a8.png)



## 5. (SharePoint) パスによるファイルコンテンツの取得

解析したJSONの情報からファイルそのものを取得します。

SharePointの`パスによるファイルコンテンツの取得`を次のアクションとして指定すると、
自動的にApply to Each(配列の繰り返し)ができるようです。

* 以降の手順から出力を選択: (JSON)本文
* (SharePoint) パスによるファイルコンテンツの取得
    * サイトのアドレス: SharePointドキュメントURL
    * ファイルパス: `/Shared Documents/アプリ/Microsoft Forms/**任意のフォーム名**/質問/**(JSON)name**`

ファイルパスは言語環境などによって変わるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/b967b424-00b4-ed37-fba5-fb3fcdf95706.png)

## 6. (SharePoint) 添付ファイルの追加

最後です。
3で作成したリスト行に、取得したファイルを添付します。

* 以前の手順から出力を選択: (JSON) 本文
* サイトのアドレス: SharePointサイトのURL
* リスト名: リスト名
* ID: (SharePoint) ID
* ファイル名: (JSON) name
* ファイルコンテンツ: (SharePoint) 本文

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123580/c5fcbebb-0bea-ba81-0bfc-a8a126375727.png)

完了!!
Formsからファイルを投稿すると、
リストが作成されファイルも添付されます。

# まとめ

JSONとファイルの取り扱いが少し面倒ですが、慣れが必要かもしれません。
しかしPowerAutomateの想定する利用者であるバックオフィスの非システム部門の方に
JSONスキーマを理解してもらうのは少し無理があります。
もう少し簡単になることを祈ります。

※追記
参考にしたYoutube動画
[Save Microsoft Forms Attachments to SharePoint with Power Automate](https://youtu.be/Xb_k8vOERpU)