--- title: Power Automate を使って Microsoft Forms のアンケートをどこから答えたのかを特定してみる【#PowerAutomate】 tags: PowerAutomate MicrosoftForms author: github129 slide: false --- # 概要 ポスターやイベント等で Microsoft Forms での利用で、毎回設問は同じなのに回答を分ける為にアンケートを作り直したり、コピーして複数作ったりしていませんか?そういった作業を Power Automate を組み合わせることで不要にし、どのアンケートを答えたのかをある程度特定します。 また、このやり方は非常に **汎用性の高い** ものになっている為、他にも様々な可能性があるやり方になっています。 本番稼働させる場合には Power Automate よりも Logic Apps の方が料金面や、動作速度の面、実行回数等を考慮するとおすすめです。(条件によります) # 環境 - Microsoft Forms - Excel Online - Power Automate の Premiumコネクタが使えるライセンス(Power Apps Community Plan 等)(HTTPコネクタを利用する為) [この手順](https://www.powerplatform.work/blog/2020/08/04/PowerApps%E3%82%92%E5%80%8B%E4%BA%BA%E3%81%A7%E7%84%A1%E6%96%99%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8B/)で環境を作成してもらうことで試すことは可能です。 # Microsoft Forms の用意 重要な手順です。 作成する Forms のアンケートは **Excel から Forms を作成します** ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/a49c0cee-2fb7-a9c8-3a4b-f284a7ccf4ee.png) この時、自動的に作成カラムされる、 **開始時刻** を後々特定に利用します。 # 保存先を用意 どこから答えたのかを保存するための保存先を用意します。 今回は簡易的に Excel を利用しますが、本番稼働させる場合には別途 SQLDB 等を用意するほうがいいかもしれません。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/904296d6-4524-6c5f-4a2a-cb92b6b2f0e9.png) 必須なのは DateTime 列で他の列は特定したい値でテーブルを作成します。今回は Location を特定します。ほかには イベント名等が考えられるかもしれません。 # Power Automate の作成 フローの全容はこちらです。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/6a8acbcb-cd6e-d58b-1a7a-ab801e253241.png) それぞれを説明していきます。 ## トリガー ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/59401af9-4207-b8c1-18d7-fd69011ac599.png) 要求の トリガーを利用します。 似たものに HTTP のトリガーも存在しますが、そちらではない点に注意してください。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/75a25287-79cc-b579-65ff-f1ac580b4ed3.png) relativePath を指定することで自動生成されるURLにパスを含めることができます。また指定しなかったとしても のちに query として取得できるのでこちらは設定しなくても問題ありません。(今回はサンプルのため両方使用する形になっています。) ## クエリやパスを取得する ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/150af94e-fed0-ca24-0db7-b0680c73dbdf.png) (値の見た目は実際には異なる場合がありますが、問題ありません) トリガーによる値は ``` triggerOutputs() ``` を使用することで取得可能です。 クエリを取得する場合は以下のように指定します。 ``` triggerOutputs()['queries']?['クエリ名'] ``` 今回は queries の中の redirectURL を取得するので ``` triggerOutputs()['queries']?['redirectURL'] ``` と指定しています。 また、relativePath に指定した Location の方も同様に ``` triggerOutputs()['relativePathParameters']?['location'] ``` とすることで取得可能です。 ## 応答 今回の特定は **開始時刻** を利用する為、できるだけ早く応答を返します。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/3b34f7a9-d0b6-2f45-980d-5653a0601390.png) ```html
``` meta タグで再表示を行い、指定したURLに対してリダイレクトを行っています。 また、HTML を変換する為、ヘッダーには text/html が指定しています。 ## データを保存 最後に、取得した値を保存します。 ここで注意する点は、応答後のアクションです。 応答後のアクションは通常の構成ではスキップされてしまうため、実行の構成を以下のよう全てにチェックを入れるようにします。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/f9556715-00a0-b26f-26b2-64ab2d8e6551.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/e06abf96-1912-2b2d-f5b5-55e5ef896564.png) 保存する部分は適宜対応するアクションに変更してください。 以上で作成は完了です。 # 特定方法 実際に動かしてみましょう URL は以下のようになるかと思います。 ``` https://トリガーのURL&redirectURL=FormsのURL ``` location/ の後は自由に入れてみましょう ``` manual/paths/invoke/location/東京?api ~ ``` 上記のフローが正しく実行されると、以下のようにデータとして保存されます。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/51503e5e-22eb-b023-d0b2-5b8a446fa2ea.png) 注目する点は **開始時刻** と **DateTime** 列になります。 おそらく大体(前後 1~2秒程度)で揃っているはずです。(その為厳密なチェックは今回のロジックでは不可能です。) あとはこれを Excel でも Power BI でも突き合わせるようにすれば特定が可能になります。 # まとめ この方法を利用することで、アンケートをコピペすることなく、ある程度の特定が可能になります。アンケートを変更した際も redirectURL を変更したURLをQRコードなどで発行することで、フローの変更はする必要はないのは利点ではないでしょうか?(パラメータが変更の場合は修正が必要です。) また、この方法はパラメータに様々な値を仕込むことができ、非常に汎用性が高いので、ぜひチャレンジしてみてください。 # 参考 こちらの Tweet を参考に作成しました。

パラメータを受け取れない #Forms なんだけど、どうしてもどっから呼ばれたとかパラメータが欲しくなる時もある。Forms Pro を使うのは高い。ならば、アタマを使おう!ということで、できました😁

たぶん動画を見るだけじゃわかんないと思いますが、考えてみてくださいー。そのうちわかります😎 pic.twitter.com/P1Y7B71r90

— Yugo Shimizu | Power BI MVP (@yugoes1021) August 7, 2020