私は欧州系の会社で働いていて、夕食後の時間の会議がとてもたくさんあるのだが、黙って会議に出ようとすると、妻から「えー今日も会議あるの何時まで?」と小言を言われる。
Office 365のカレンダー上にある会議予定を妻に自動で伝える方法が無いかと思い試行錯誤してみた。
結果としてはPower Automateを使って、Google Calendarに予定を転送することで、やりたいことが実現出来た。
前提・要件
手っ取り早くやろうと思ったら、全ての予定を公開Gmailにでも飛ばしてしまえば良いが、会議タイトルに顧客名が入ってたりすると、さすがに家族とは言え丸出しにするのは気が引ける。それに、日中の予定まで送られても妻も困る、というか知ったこっちゃない。
そこで、以下を主な要件として、Power Automateを使ってRPAしてみることにした。
- Office 365の自分のカレンダーに入っている予定のうち、以下だけを、予定あり、とだけタイトルに入れてGoogle calendarに同期
- 今日以降7日間のみ
- BusyもしくはTentativeステータスのスケジュールだけ。Freeは出ない会議だし、通知しない。
- 専用のカレンダーを作って、夜間の会議予定だけ同期
Google Calendarへの連携
Web版のPower Automateを使う。
引数の準備
まずは範囲指定に使う引数を準備して、更新対象のイベントを拾うためのStart/End dateを収集する。
Start dateには以下を設定。時々24:00-25:00みたいな会議もあるので、1週間のスタートは「今日の午前11時」とした。
addHours(startOfDay(addHours(body('Current_time'),9)),11)
End dateには以下を設定。Start dateから丸7日後。こうすることで、今日のAM11:00から7日後のAM11:00という範囲指定ができる。
addDays(variables('start_time'),7)
既存の予定のクリーンアップ
一度登録した既存イベントの日付や時刻が変わる場合もあるのだが、Google Calendar上一度登録した既存イベントの更新が難しかった。そこで、ワークフローの都度全部消して入れ直すことにした。
Google Calendarエントリの作成
そして改めてイベントを作成する。まずは必要なエントリをOffice365側から取得する。
次に特定のステータスにマッチしたものだけをGoogle Calendarにイベント登録する。私はTentativeとBusyのみを対象にした。カレンダー上Freeとなっているエントリーは無視する。
元々のGet calendar view of eventsでは、丸々一週間分の予定を取得してきてしまっているのだが、前述の通り、同期したいイベントは夜中のものだけである。そこでここのコンディションを使って、Start timeとEnd timeには、取りたい時刻のレンジを入れる。自分は19:30 – 25:00のものだけ絞り込むようにした。
## 19:30 - 25:00 をGMTに換算(-9h)して設定。
formatDateTime(variables('temp_time'), 'yyyy-MM-ddT10:30:ssZ')
formatDateTime(variables('temp_time'), 'yyyy-MM-ddT16:00:ssZ')
絞り込んだら、エントリに対して、Create an eventで適当に属性を埋めてGoogle calendarのイベントを作成する。私の場合はタイトルを”Meeting – Busy”または”Meeting – Tentative”となるようにし、あとからいつ作成されたイベントかわかるようにDescriptionに現在時刻を入れておいた。
これでOK。なお繰り返し頻度は1時間に1回とした。こんな感じで。
Google Calendar側の設定
対象にしたGoogle Calendarのスリードットアイコンをクリックし、「設定と共有」メニューで妻のメールアドレスを登録すれば完了。
結果
毎朝言わずとも、勝手に妻がGoogle Calendarを見て飲み会の日程調整とかの参考にしてもらえることを期待して始めたのだが、、、思ったよりあまり見てもらえず、結局都度確認しているのでした。
Power Automateを初めて真面目に使ってみましたが、なかなか難しいですね。もっとラクな方法があったら教えてください。