時間外に投稿があったときに,注意喚起を促すPowerAutomate その1


完成図

一つずつ見ていきます

そもそも論ですが,最初はPower Automateの新しいフローから始める.

自動化したクラウドフローを選ぶ
だるいので,とりあえずスキップ
トリガーの追加を選んで,自動化のきっかけを始める.この場合,teamsに投稿があった時に自動的にそれに反応して,今は時間外だよとか返信するものを作るというわけ.以後,+を押していくことでいろいろ追加ができる

1.teamsの投稿をトリガー

teamsのチャネルに新しいメッセージが追加された時

設定は,teamsにログインした上で,注意喚起を促したいチームを選んでから,チャネルを選ぶだけ.確認頻度は5分で十分.あまりに短いのは無理っぽい.

teamsで検索してアクションの種類をトリガーにしておくとすぐ見つかる

2.日本時間に変更

日本時間に変更するもの

必ずしも必要ではないけれど,変数を"日本時間に変更"という名前に格納すると便利というのもあり,これにしている.なお,現在の時刻とsundayというのは,過去の時間を取得していて,祝日や日曜日にちゃんと動くか確認するために入れただけで必要ではない.なので,今回は説明しない.
日本時間に変更の中身は以下の通り.

日本時間に変更の中身

タイトルは"日本時間に変更"としておく.
Base Timeはクリックすると以下のようになるので

⚡をクリック

⚡から候補を選ぶ.今回はteamsのメッセージが作成された時刻を取得する.

表示を増やすをクリック
メッセージ作成のタイムスタンプを選ぶと,投稿時間を取得することになる
他も埋めていく

Source Time Zoneとは,メッセージのタイムスタンプのことなのだが,Microsoftはセンスが無いので,すべてグリニッジの時間になってしまう.Coordinated Universal TImeでよいのだが,なんとなくグリニッジと同じカサブランカの時刻にしている.理由はないけれど,カサブランカってあまりパっとしない街だったなぁというどうでもいい思い出を思い出したから.

Destination Time Zoneは日本に合わせる.

Time Unitは,分単位まで必要なのでRound-trip dateにした.

3.取得した時間を,それぞれ変数に格納していく

こんな感じで日付,時間,曜日を取得する.それぞれ,祝日,勤務時間内外,日曜日を判定に使う

それぞれを見ていく.

ランタイムを組み込みにして,一番下にあるVariableを選択
変数を初期化するを選ぶ
日付の取得.名前を年月日を取得にしてみた

Nameは,"date"という名前にデータを格納するという意味.つまり,これ以降"date"という文字には,日付データが入っていることになり,"date"で呼び出せる

Typeはデータの種類.Stringは文字列のこと.2024-05-06みたいなのだから,文字列となる.

Valueは数式を入れる.

⚡じゃなくてfxを選ぶ
数式を自分で入れる
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で作っておく

少しだけややこしい.まず,Excel OnlineでOnedriveの中にファイルを作る.

今回は,チーム医療やっていこうぜ!のGeneralに祝日というファイルを作成
エクセルの中身

A列の2行目以降に,日本の祝日データを政府のページパクってコピペして少しきれいにしただけ.
Google SpreadSheetとかだと,全自動で更新できるが,Excel Onlineでは,今のところ,できなさそうなので,2025年末まで.

で,これをテーブルにする.しないと表として認識させられない.

テーブルとして書式設定を押して,どれでもいいので選ぶ

その際に見出しもつけておく.今回は"日付"とした.当然この名前が後で必要になるので,適当につけないこと.

ここまできて,祝日の取得になる.

祝日取得の中身

場所は,先ほど言ったように,チーム医療やっていこうぜ-->ドキュメント-->General-->祝日.xlsx-->テーブル1(今作ったテーブル)

詳細パラメーター

フィルタークエリは,自分で入力と,⚡を組み合わせる.
ちなみにクエリとは,プログラミングにおいては,命令と思えば良い.つまり,エクセルにある日付から一部だけを取ってくるというフィルターをかける際の命令文.
今回は,

日付 eq ''

を入力する.'と'の間に⚡で既に取得しているdateをもってくる.

⚡押すと,格納したdateなどがでてくる

ここでdateを選ぶ.コードとしては,以下のような形になっている.

日付 eq '@{variables('date')}'

これが実際のコード.⚡を使うと@{variables・・・みたいな事を書かなくて良くなる.

ちゃんと'と’の間に⚡でdateをいれる.

これで,日付(これはexcelにあるたくさんの祝日の日付)= date(これは,投稿されたタイムスタンプの日付)で,一致したかどうかを確認していることになる.
一致するものがあれば,その日付が返ってくることになる.

あと,DateTime形式はISO 8601にしておく.

もちろん,祝日取得という名前も後で使用する

この,祝日取得という名前には,祝日と一致する日付があれば,その日付が格納されているということになるわけ.なので,あとで,祝日取得が空っぽであれば,平日ということになるので勤務日という判定になる,というように使う.

長くなったので今日はここまで.その2はこちら

この記事が気に入ったらサポートをしてみませんか?