Formsに回答がきたらメール通知したいけどできるか?と聞かれ、そういえばどこまで出来るんだろう、と調べたところ、これぐらいならFormsの標準機能で出来るようだった。
しかし、もっと発展したやり方は今時は出来るはずだと思い、掲題の件で調べた。
やりたいこと
Formsに回答があったら、回答毎に(Flowで出来る範囲の)任意の形で連携できるかどうかを試した。
軽く調べた所、そういったテンプレートがあるので大体出来そうだ、というのは分かっていました。
ただ、主観ですがFlowは微妙にかゆいところに手が届かないモノもあったので、実用的かどうかも判断してみます。
やりかた
適当に「test」というフォームを用意します。
こんな感じにFlowを組みます。フォーム名を指定している点に注意してください。
一応、文字起こしすると以下のように作っています。
- (トリガー)Forms: 新しい応答が送信されるとき
- 制御: Apply to Each
- Forms: 応答の詳細を取得する
- Yammer: 投稿メッセージ
Formの応答は配列になっているため、Apply-to-Eachする必要があります。
(同タイミングに複数回答があると複数入ると予想してますが、実際には見たことはないです...)
今はYammerに投稿メッセージとして送っていますが、ここは好きに組み替えることができます。
また、見ての通り、Formで設定している質問項目に対する回答を「応答の詳細を取得する」によりちゃんと取れています。(項目名がいい加減すぎました)
さて、回答して動作をみます。
Yammerを見るとこんな感じになっていればよいです。
今回はYammerでしたが、Formsのメール通知をカスタマイズしたり、Teamsに通知したり、HTTPで送りつける事で独自のシステムと連携することもできます。
ということで、Formsはちゃんと使えるものになっていそうです。ここから先が大変だと思いますが。
なお、Yammerの「フォームに投稿がありました」の文言は、Flowの投稿メッセージの詳細設定で仕込んでいるものです。
Flowの日時の罠
Flowで日時の扱いをちょっと変えたいと思うたびに、いつも引っかかるので。
まず、見ての通り、Formsに記録される日時がUTCなので日本時間なら9時間足す必要があります。そういうとこやぞ。
というわけで、以下の式で置き換えるとよいでしょう。bodyのAction名は適当に併せてください(デフォルトだとこのまま。)
convertTimeZone(body('応答の詳細を取得する')?['submitDate'], 'UTC', 'Tokyo Standard Time', 'yyyy-MM-dd HH:mm:ss')
4つ目の引数で使える日時フォーマットのドキュメントはこちらです。
UTCと分かっているならconvertFromUtc
という打ってつけな感じのものがありますがこれは使えません。騙されないように。convertTimeZone
だけです。convertTimeZone
だけが我々を救ってくれます。
TimeZoneの指定もクセがあります。Flowにおいては'UTC'
, 'Tokyo Standard Time'
の2つを覚えておけばよいです。'JST'
ではないです。
もしそれ以外のタイムゾーンの対応を行う場合は、こちらがお役立ちドキュメントです。
convertTimeZoneのタイムゾーンは見ての通り、名前を文字列を指定する必要があります。ドキュメントにはIDは数字で振られており、数値でも行けそうと思うと騙されます。関数のヘルプもIDと出てきますが、文字列でIDを指定してもダメです。悲しいな。