時間外に投稿があったときに,注意喚起を促すPowerAutomate その1
一つずつ見ていきます
そもそも論ですが,最初はPower Automateの新しいフローから始める.
1.teamsの投稿をトリガー
設定は,teamsにログインした上で,注意喚起を促したいチームを選んでから,チャネルを選ぶだけ.確認頻度は5分で十分.あまりに短いのは無理っぽい.
2.日本時間に変更
必ずしも必要ではないけれど,変数を"日本時間に変更"という名前に格納すると便利というのもあり,これにしている.なお,現在の時刻とsundayというのは,過去の時間を取得していて,祝日や日曜日にちゃんと動くか確認するために入れただけで必要ではない.なので,今回は説明しない.
日本時間に変更の中身は以下の通り.
タイトルは"日本時間に変更"としておく.
Base Timeはクリックすると以下のようになるので
⚡から候補を選ぶ.今回はteamsのメッセージが作成された時刻を取得する.
Source Time Zoneとは,メッセージのタイムスタンプのことなのだが,Microsoftはセンスが無いので,すべてグリニッジの時間になってしまう.Coordinated Universal TImeでよいのだが,なんとなくグリニッジと同じカサブランカの時刻にしている.理由はないけれど,カサブランカってあまりパっとしない街だったなぁというどうでもいい思い出を思い出したから.
Destination Time Zoneは日本に合わせる.
Time Unitは,分単位まで必要なのでRound-trip dateにした.
3.取得した時間を,それぞれ変数に格納していく
それぞれを見ていく.
Nameは,"date"という名前にデータを格納するという意味.つまり,これ以降"date"という文字には,日付データが入っていることになり,"date"で呼び出せる.
Typeはデータの種類.Stringは文字列のこと.2024-05-06みたいなのだから,文字列となる.
Valueは数式を入れる.
formatDateTime(body('日本時間に変更'),'yyyy-MM-dd')
上記のようなコードを入れている.'日本時間に変更'で日本時間に変更された日付,時刻のうち,年月日だけを取得する文字列.だから,さっきのところで"日本時間に変更"という名前にしていないと呼び出せない.同じ名前なら何でも良いが,あまりに簡単な名前にすると,あとで被ったりするので注意が必要.今回は論理構造単純なので,あまり問題にはなりません.
同様に,時間,曜日もみていく.
int(formatDateTime(body('日本時間に変更'), 'HH'))
時間は,HHで取得しているが,int()関数で整数に変換している.プログラミングにおいては,"10"と"10"が文字列だったり,整数列だったりで別物として扱われてしまうのでintで整数であることを明示している.整数にすると,後で比較に使える.つまり,今の時刻,例えば10<17であれば,勤務時間内と判定できる.これが文字列だと,じゅう<17となり,比較できない.
で,整数なのでTypeもInteger(整数)になる.
次は,曜日.
int(dayOfWeek(body('日本時間に変更')))
曜日を数値で抜き出すdayOfWeek関数を使う.0が日曜日.それをintで整数宣言しておく.もちろんtypeはInteger
4.祝日取得
少しだけややこしい.まず,Excel OnlineでOnedriveの中にファイルを作る.
A列の2行目以降に,日本の祝日データを政府のページパクってコピペして少しきれいにしただけ.
Google SpreadSheetとかだと,全自動で更新できるが,Excel Onlineでは,今のところ,できなさそうなので,2025年末まで.
で,これをテーブルにする.しないと表として認識させられない.
その際に見出しもつけておく.今回は"日付"とした.当然この名前が後で必要になるので,適当につけないこと.
ここまできて,祝日の取得になる.
場所は,先ほど言ったように,チーム医療やっていこうぜ-->ドキュメント-->General-->祝日.xlsx-->テーブル1(今作ったテーブル)
フィルタークエリは,自分で入力と,⚡を組み合わせる.
ちなみにクエリとは,プログラミングにおいては,命令と思えば良い.つまり,エクセルにある日付から一部だけを取ってくるというフィルターをかける際の命令文.
今回は,
日付 eq ''
を入力する.'と'の間に⚡で既に取得しているdateをもってくる.
ここでdateを選ぶ.コードとしては,以下のような形になっている.
日付 eq '@{variables('date')}'
これが実際のコード.⚡を使うと@{variables・・・みたいな事を書かなくて良くなる.
これで,日付(これはexcelにあるたくさんの祝日の日付)= date(これは,投稿されたタイムスタンプの日付)で,一致したかどうかを確認していることになる.
一致するものがあれば,その日付が返ってくることになる.
あと,DateTime形式はISO 8601にしておく.
この,祝日取得という名前には,祝日と一致する日付があれば,その日付が格納されているということになるわけ.なので,あとで,祝日取得が空っぽであれば,平日ということになるので勤務日という判定になる,というように使う.
長くなったので今日はここまで.その2はこちら.
この記事が気に入ったらサポートをしてみませんか?