Power Automate で Microsoft Forms の回答の添付ファイルのリンクを取得する


# はじめに

Power Automate では、Microsoft Forms で回答があったことをトリガーにアクションを起こすことが出来ます。

例えば、以下のように、回答内容を SharePoint リストに登録したり、通知をしたりする自動化フローを簡単に作れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/4ca76999-e3c7-0a30-e356-5ae7981f5e5c.png)

そして、Microsoft Forms から何かの問い合わせを受ける際など、添付ファイルを受け付けることがあると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/2ea922df-755b-e048-8503-81a7da30d934.png)

そして、以下の勉強会で質問があがりましたが、この添付ファイルを扱う際、少し工夫がいります。そのため、今回、アプローチを簡単に紹介します。

https://kimamani.connpass.com/

# アプローチ

## 困ること

まず、Forms からアップロードされた添付ファイルの項目、こんな感じで文字列になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6f424895-97cd-ad14-96d5-0d7d3565a396.png)

```
[{"name":"Sales9-11_益森 貴士.xlsx","link":"https://******.sharepoint.com/personal/******/_layouts/15/Doc.aspx?sourcedoc=%7BD547C649-15E9-4136-B826-C6BA1AE7B1EA%7D&file=Sales9-11_%E7%9B%8A%E6%A3%AE%20%E8%B2%B4%E5%A3%AB.xlsx&action=default&mobileredirect=true","id":"01LKYYNBSJYZD5L2IVGZA3QJWGXINOPMPK","type":null,"size":12070,"referenceId":"01LKYYNBRPNYUSZ67NGBCJOZM7KGAG25OS","driveId":"b!i9dg-Fi5hUeKtyCVpL82y85rO-v-AehDprSL7HS5H27W7PBmAYPDS6oK2BoAIUqD","status":1,"uploadSessionUrl":null}]
```

そのため、こちらの項目を以下のようにして動的な値として利用しても、文字列として代入されるため、リンクをクリックしてそのままアクセスすることは出来ません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9eccea32-26f8-de3a-5a14-f36698777e9e.png)

したがいまして、多くの人は、この文字列の中から、link だけを取り出したいと思います。

## 解決方法

いくつか解決方法があるのですが、今回は気ままに勉強会中参加中に思いついたものを紹介します。

まず、上記の文字列、JSON 形式となっていることが分かります。ただ、Power Automate が文字列として認識しているようなので、link だけを抽出できないようです。

:::note

JSON について、ChatGPT に聞いてみました。要は、システム間でデータのやり取りをする際におけるルールが定義されているフォーマットの一つです。利用するだけの場合あまり意識しませんが、こうったフォーマットがあるおかげで異なるシステム間で連携ができるということです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3190a20d-e75c-6fb3-2a25-17605b5e78a2.png)
:::

Power Automate もデータのやり取りは JSON でやっております。具体的には、コネクタを利用している際、JSON でやり取りをしております。

Power Automate の素晴らしいところは、例えば、以下のように、JSON で受け取った応答を解釈して加工をしてくれて、動的な値として画面上の操作だけで後続のアクションで利用できるようにしてくれているところです。

ある意味、このようにして、JSON について意識しなくても簡単な自動化フローを作れるため、上手く解釈出来ていない際に躓いてしまう可能性があるのかもしれませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fe71dd6e-65d5-6879-691d-166f3039d6b1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3e947e11-a664-8c04-6a61-15daa33d8b54.png)

今回は、Forms の応答の添付ファイルに関する項目については、文字列として認識しているため、以下のように、json 関数というものを使って、Power Automate で JSON として処理してもらうようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/18c28215-25c2-fc5c-d502-442c2a123068.png)
 
Power Automate が JSON として解釈してしまえば、`[JSON の解析]` アクションを介すことで、動的な値として利用することが出来ます。

個人的には、JSON 形式になっているのに Power Automate が文字列として解釈しており、中の項目を動的な値として利用したい際は、私はよく、一度 json 関数で囲ってあげています。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-json

`[JSON の解析]` アクションのスキーマについては、一度ここまでの段階で処理を実行させて、作成アクションの出力をサンプルとして利用する感じです。これにより、後続のアクションにて、`[JSON の解析]` アクションの応答から、link だけを取得することが可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/92695bed-24ae-f8b2-ec16-01fefd5a5846.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/cdb8bf17-ae57-fc2c-11b3-f646c730cf7f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/e4635b81-0c9c-3a37-65eb-3765be217a5c.png)

# まとめ

今回は、Power Automate で Microsoft Forms の回答の添付ファイルのリンクを取得する方法を紹介しました。

他にもアプローチありますが、一つのアプローチとして参考になれば幸いです。