今回は標題の通り、MS Forms と PowerAutomate とOutlookを連携させます。目的はFormsに入れた時刻付きの予定をOutlookに記載することです。
こんな回りくどいことをなぜやるのか
さて、なぜこんな回りくどいことをするのか。と言うことですが、こういうシーンを踏まえて作りました。
- 誰かがFormsを使って施設の解錠予約をする
- 管理者が承認する
- すると、承認した時刻に予定が入る
- 管理者はその予定時刻になったら鍵を開けに行く
- 管理者は終了時刻に施錠しに行く
この3番4番5番をきっちりおこなうために作ろうとしました。
・・・というわけで試行錯誤しました。
まずは、カレンダーにイベントを作成するアクションを出します。今回は時刻だけに絞っていますので他のことは必要ならば他で調べてください。
で、時刻の指定のしかたを見てみるとこんなことが書いてありますね。
例:'2017-08-29T04:00:00'
ってことはこのフォーマットにすれば良いのかと思います。実際にやってみましょう。
Formsで必要事項を取得しよう
まずはFormsから値を取得します。方法は簡単
- 日付の入力
- 範囲0から23までのテキスト入力
- 範囲0から59までのテキスト入力
を設けましょう。
では、それらを使ってアクションに入れる数値を作りましょう。今回はわかりやすいように2段構えにしています。
数値を日付にするのにこんなに苦労するとは思わなかった
パーツごとに簡単に説明します。
- 日付はそのまま使う
- 時刻は0でパディングすることがある
- そしてそれらを文字列として結合する
つまり、こういう関数になります。
concat(日付,'T',時,':',分,':00')
やっかいなのは時と分で、こいつらは例えば分なら0分から9分の間は0でパディングしないとエラーになります。
そこで時と分はこういう手を使いました。
- string(formatNumber(int(時,'00')))
- string(formatNumber(int(分,'00')))
これらをバラバラに説明する必要はあるかわかりませんがこういうスタンスで作りました。
- 時または分のテキストを整数にする
- 整数を00でフォーマットする
- それを文字列に再変換する
これを組み合わせてまずは日時の文字列を完成させるとこうなります。
concat(日付,'T',string(formatNumber(int(時,'00'))),':',string(formatNumber(int(分,'00'))),':00')
これだけでも長いので、これを変数dateTimeStringとして格納しあとはこれを使って
parseDateTime(dateTimeString,'ja-JP')
とします、この変数を使ってさっきのカレンダーの日時にこの関数もしくはもう一段変数を設けてこの値を入れます。
そうしたら、何とかカレンダーに日時付きの予定が入りました。
これで終了です。お疲れ様でした。