見出し画像

【Power Automate】【Workflows】Outlookの予定表に任意のイベントがあった場合にShare Pointにフォルダーを自動生成しその旨をフォルダーリンクと合わせてTeamsで通知する

なんか色々としょうもないことしてるかもな、、、と思いつつ、練習?としてこんなことを自動化してみた。こういうことは実践を積み重ねるに尽きると思うので!ご参考まで。

やりたかったこと

毎週金曜日、Outlook上の翌週の予定にとある定期的なMTGがあるか(=なくなってないか)をチェックし、あった場合は会議のShare PointにそのMTG日程の名称の空フォルダーを作る。そしてそのMTGのTeamsのチームのチャネルにて、空フォルダー作成の旨と、空フォルダ名に格納した空フォルダーのハイパーリンクをタイトル付きで通知する。

できたこと

やりたかったことはほぼ完璧に実現できた。
フローの構築自体は簡単なのだが、MTGの日付を「yyyyMMdd」(年月日)形式に変換してフォルダ名にするのに苦労した(笑)。今回の目玉はその方法かもしれないw

背景

私の所属している組織のとあるプロジェクトは毎週木曜日にMTGを設定しており、発表者は事前に資料をそのプロジェクトのShare Pointに「yyyyMMdd」(年月日)の名称で作成したフォルダーに格納し、さらにそのプロジェクトのTeamsのあるチャネルに資料を格納した旨をメンションしている。
これで発生している問題点は
・発表者ごとに投稿するため投稿が乱立する
・発表者はたいてい資料を格納したことだけをメンションするため、受け手は資料の格納された場所を探らなければいけない
の2点である。
主催者側の努力とか、ルールをどうすればいい、とかいうのは面倒、というか属人的であるので今回の自動化に至った。(ファイル作成時に毎回自動通知、というフローもできそうだが余計な通知が増えそう)

解決方法の概要

下図のようになっています。

トリガー:毎週金曜日(その週の木曜日にて翌週のMTG開催是非が決まるのでこのタイミングにした)

翌一週間のOutlookの予定を見に行く

予定に該当のMTGがあるか、今回はMTG名(予定の件名)にて判別

MTGがあった場合、Share Pointにフォルダーを作成
あとは見たまんま。

解決方法の詳細

①トリガー:繰り返し

私の場合は毎週金曜日の午前8時ちょうどにこのフローを走らせたかったので下図のような内容で設定しました。

②Office 365 Outlookのアクション「イベントのカレンダービューの取得 (V3)」(2024年5月現在)を使用

カレンダーIDは自分の予定表なのでこのように設定。
開始時刻はトリガー時でもよかったのだが(その場合なら関数utcNow())、今回は翌週月曜からの予定をチェックしたかったのでaddDays関数を使用した。(addDays内の変数には、基準日(今回はutcNow())、加えたい日数、出力の形式、を入力)
終了時刻は金曜日となるように加える日数を調整して入力。
※ここでの日時はおそらくUTCなので注意。ここで日本の日時になるよう調整してもよいが、前段階で別途アクション作ってあらかじめ調整しておいてもよいと思われる。

③条件分岐にてイベントがあるか判別

今回は定期的なMTGでありそのイベント名がわかっているので、Outlookで取得したビューの中のイベントの「件名」に該当のMTGの件名があるかどうか判別。(なかった場合=「いいえの場合」はアクションなしとした)

④「タイムゾーンの変換」によりイベント開始年月日の「年月日」のみを取得

今回はMTGの「年月日」を、フォルダー名およびTeamsの投稿中のハイパーリンクを格納する文字列として使用するという目的のためこの処理を行っています。
②のカレンダービューで取得できる日程に関する項目に、「開始時刻」というものはあるのですが、その形式は「2017-09-20T05:00:00.0000000」のように、年月日以外の余計な時刻情報が含まれています。
長すぎるしフォルダー名に使用できない文字が含まれるのでこの文字列を変換する必要があるのですが、どうやらタイムスタンプではないようなので、「formatDateTime」をはじめとする関数の処理では対応できない。。。(←なんとか関数でできないか?!といろんなアクション挟んで試みたが時間を浪費しただけだった)

そこで今回はアクション「タイムゾーンの変換」を使用しました。

「基準時間」に、カレンダービューから取得できる「開始時刻」を変数として入力
あとは上図の通り設定しました。
※②の末尾に記載のようにこのフロー自体で取得できる日時情報をフローの最初で日本時間に変換していない場合は、おそらくここでタイムゾーンも調整しておいた方がよさそう。(たとえば日本時間AM8:00の予定の場合、UTCだと全日のPM11:00なので取得される日が1日ずれると思われる)

⑤Share Pointに新規フォルダーを作成

Share Pointのアクション「新しいフォルダーの作成」を使用します。

ここで入力すべき内容はすべて任意になります。
「フォルダーのパス」にはフォルダーを作成したいライブラリ中のパスを、フォルダー名と合わせて入力します。
※私の場合、あるShare Pointの「ドキュメント」ライブラリ中の「General」ライブラリ直下に、④で変換したMTGの開催日を名称としたフォルダーを作りたかったので上図のようにしました。

⑥フォルダーの共有リンクの作成

Share Pointのアクション「ファイルまたはフォルダーの共有リンクの作成」を用いて、⑤で作成したフォルダーの共有用リンクを作成します。

こんな感じにしてください。(雑)
「リンクの種類」以降の項目は用途により選択・設定しましょう。

⑦Teamsのチャネルにて投稿

あとはTeamsのアクションのみです。
私は下図のような内容を設定しました。

今回はフォルダーへのリンクをそのままの文字列ではなく、フォルダー名へのハイパーリンクとして示したかったため、HTMLで入力しました。
aタグにより、④で得られフォルダー名にも使用した「変換後の時間」を挟み、⑥で得られた「共有リンク」のURLへの紐づけを行っています。

「Subject」はつまりTeamsの投稿のタイトルですが、ここも任意です。
※「投稿者」を「ユーザー」つまり自分にした場合のみ「Subject」は入力可能なようです。ほか、システムからの投稿として見せるため「投稿者」を「ユーザー」以外にした場合はタイトルのない投稿のみ可能です。

⑧実行し、完了

このような投稿が行われた。ハイパーリンクもきちんと機能する。

※今回はタイトルのある投稿を作成したかったため⑦の「投稿者」を「ユーザー」(自分)にしており、一見しただけでは通常の投稿と区別がつかない。人力でやってると思われるのは癪なので(笑)あえて《自動送信》と入れている。
投稿に対するコメントは投稿の作成者に通知が来る設定がデフォルトだと思うので、それが嫌な場合で投稿のタイトルが必要ないのであれば⑦の「投稿者」の設定を変えればよいでしょう。

コメント

・MTGの予定はあるが資料を使う発表者がいない場合には空フォルダーが残ることになる。そういう空フォルダーは邪魔なので定期的に自動で削除されるようにしたらいいのかも、と思ったり思わなかったり。
・Teamsの投稿にチームへの全体メンションは今回入れなかった。手間をかければ過去の方法により全体メンションを含める投稿にすることは可能。
・今回参考にしたサイト等は特になかった。
・予定表中のイベントの検索条件を変えて工夫すれば他の類のイベントにも適応できる。

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