はじめに
「舟越さん、リフレッシュがてらPower Automate作りませんか?」という誘いがあり、ブログのネタにもなるからと思って受けました。*1
要件
新入社員研修で朝会、夕会の時間を設定して連絡事項を伝達しているのですが、「この日にXXを連絡しなきゃ!」と思っても、当日忘れそうになる事がままあります。
これを、事前にExcelなどに記録しておき、当日決まった時間にTeamsのチャネルでアナウンスされるようにしたい、というのが今回の要件でした。
Power Automateの作成
要件は分かったので、サクサク作っていきたいと思います。
トリガーの設定
今回は、自動実行したいのでスケジュールをトリガーに利用します。 平日の9時、17時にそれぞれ実行されるようにしました。
実行した日に一致するデータをExcelから抽出する
本当はExcelのフィルタクエリで「Dateが実行日に等しい」and「Timimgが朝である/夕である」で一度に絞り込めれば楽なのですが、残念ながらExcelのフィルタクエリではandやorが使えません。
そのため、まずは「Dateが実行日に等しい」だけやります。
事前に変数を用意して、実行日時を取得しておき、その値を使ってフィルタをかけます。
※ 初出時、キャプチャが一部誤っていました。DateTime形式がISO 8601である必要があります(2022/3/23追記)
変数の中身はこうなっています。
addHours(utcnow(),9,'yyyy-MM-dd')
朝夕を判定する
今のままだとExcelに抽出したデータは朝会用のものも夕会用のものも含まれてしまっています。 これをフィルタ出来るようにするために、まずは朝夕を判定します。
今回は、実行日時の「時」の部分を数値として変数に格納し、その後の条件分岐で、12以下なら朝、12より大きければ夕、と判定することにしました。*2
9時なら12以下なので朝、17時なら12より大きいので夕、と判定される想定です。
時刻部分の変数の設定は式を使ってこのようにしています。*3
int(addHours(utcnow(),9,'HH'))
その後、条件分岐を使って、フィルタ用に「morning」か「evening」を文字列として変数に入れるようにしました。
朝夕でフィルタする
時間に応じて、「morning」か「evening」でフィルタします。
フィルタ自体は簡単なんですが、フィルタした後のデータを後の処理で使えるようにするためには、一度jsonの解析をする必要があります。
一度フィルタ処理までで止めておいてテスト実行し、その時の出力データをサンプルとして入力すると簡単に分析できます。
メッセージを投稿する
JSONで解析したデータは朝または夕でフィルタ済みなので、これをTeams用のコネクタで繰り返し処理します。
無事、メッセージが投稿されました。
おわりに
あとは、実際にスケジュール通り実行されるか確認すればひとまず完了です。
実はこのままだとExcelのDetailで入れていた改行が消えてしまうので、これを自動処理したい場合は一工夫必要なのですが、そちらについてはまた別の記事で書きたいと思います。
*1:Power Automate作成がリフレッシュになるかどうかには個人差があります
*2:ここは大小で判定するため整数型で変数を作っています
*3:この時、HHと大文字にしないと、24時間表記にならないので注意が必要です
舟越 匠(日本ビジネスシステムズ株式会社)
人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。2024年8月からキーマンズネットでPower Automateの連載を開始。好きなサービスはPower AutomateやLogic Apps。好きなアーティストはZABADAKとSound Horizon。
担当記事一覧