Power Apps のトリセツ(もちろん非公式)# Outlook スケジュール編
2020-02-19
azblob://2022/11/11/eyecatch/2020-02-19-powerapps-torisetsu-outlook-schedule-000.png

[最終更新日: 2020 / 02 / 28]

はじめに

最近、スピーカーのある生活が始まり毎日ノリノリです、横田です。
今回は Power Apps でスケジュール管理する時に何かと登場する Outlook のスケジュールの扱い方について紹介していきます!Outlook のスケジュール管理を始める方は必見です!
始める前に一点共有しておきたいのは、Outlook を使用した Power Apps のアプリを作った感じ、若干コードが多くなりがちでした。なので普段コードを全く書かない人はちょっと大変かもしれないです。ただ、既に完成したサンプル画面もあるので安心してください!本記事でも「コードの説明」を飛ばして、「扱い方」だけチャレンジしてもらえれば、スケジュールの取得や作成、削除までできるようにしています!
それではやっていきましょう!

Outlook と接続して何ができるの?

Outlookと接続するとメールの確認・送信や、スケジュールの取得・作成・削除ができます。たぶん Outlook 周りでやりたいと思っていることは大体できると思います!

Power Apps と Outlook の接続

データソースのコネクタから「Office 365 Outlook」を選択して追加してください。終わりです。たったのこれだけで接続完了です!
もし「Office 365 Outlook」が見つからない場合はデータソースの検索ボックスから検索してみてください。

スケジュールの取得

スケジュールは以下のコードで取得できます。

Set(calendarType, Office365Outlook.CalendarGetTables());
ClearCollect(todayCalendarEvents, Office365Outlook.GetEventsCalendarViewV2(First(calendarType.value).Name, Today(), DateAdd(Today(),24,Hours)));

コードの説明

Office365Outlook.CalendarGetTables() でカレンダータイプのテーブルを取得しています( calendarType に保持しています )。calendarType を確認してみると「予定表」「日本の休日」「誕生日」などの値が保持されているかと思います。 たぶん日常的に使用しているスケジュールは「予定表」だと思います。 変数は「ファイル」→「変数」から確認できます。
続いて Office365Outlook.GetEventsCalendarViewV2(カレンダータイプ, スタート, エンド) でスケジュールを取得していきます。
カレンダータイプには先ほど取得した calendarType の中から取得したいカレンダータイプを指定します。今回は「予定表」のスケジュールを取得したいので First(calendarType.value).Name で指定しています。
スタートとエンドは取得したいスケジュールの開始日時と終了日時です。今回は本日のスケジュールを取得する想定で作成しているので、スタートには Today() 、エンドには DateAdd() を使用して Today() に 24時間を足した日時を指定しています。
ここで出てくる DateAdd() について補足しておきます。DateAdd(対象日時, 追加する数, 単位) は、対象日時に指定した時間を足すことができます。今回は今日の日付に 24 時間を足したいので、対象日時に Today() 、追加する数に 24 、単位に Hours を指定しています。

スケジュールを取得する関数( GetEventsCalendarViewV2() )のリファレンスはこちら

扱い方

取り敢えず試す場合は「ボタン」のオブジェクトを追加して OnSelect にコードをコピってボタンを押してみてください。本日分のスケジュールがコレクションの todayCalendarEvents に取得できているはずです。コレクションは「ファイル」→「コレクション」から確認できます。
スケジュールが取得できなかった人は、calendarType の value を確認してみてください。今回は calendarType のテーブルの最初の値が「予定表」になっていたので、テーブルの最初の値を指定しています(First(calendarType.value).Nameのことです)。仮に calendarType の最初の値が「日本の休日」とかになっていると、思ったスケジュールが取得できないかと思います。

スケジュールのソート

取得したスケジュールは日付順に整列しているわけではなく、バラバラの状態で取得されます。大抵の場合、日付順に扱うことが多いと思うので、日付順にソートするコードを載せておきます。

ClearCollect(sortTodayCalendarEvents, SortByColumns(First(todayCalendarEvents).value, "Start"));

コードの説明

sortByColums(ソートするテーブル, 対象のレコード) で日付順にソートできます。
ソートするテーブルには、取得したスケジュールを指定します。今回は todayCalendarEvents です。
対象レコードは、ソートに用いるレコードを指定します。今回は開始時間の早い順にソートしたいので Start を指定します。

扱い方

スケジュールを取得するコードの次の行にソートするコードを追加してください。ソートできているかはコレクションから sortTodayCalendarEvents を確認してみてください。

スケジュールの作成

スケジュールは以下のコードで作成できます。

Office365Outlook.V2CalendarPostItem(First(calendarType.value).Name,"MTG",DateAdd(Now(),540,Minutes),DateAdd(Now(),600,Minutes),{TimeZone:"(UTC+09:00) Osaka, Sapporo, Tokyo"}));

コードの説明

Office365Outlook.V2CalendarPostItem(カレンダータイプ, タイトル, スタート, エンド) でスケジュールを作成できます。
カレンダータイプは、「スケジュールの取得」で取得した calendarType の中から作成したい先のカレンダータイプを指定します。今回は「予定表」に作成したいので First(caledarType.value).Name で指定しています。
タイトルはその名の通りタイトルです。今回は "MTG" にしています。
スタートは、スケジュールの開始日時です。今回は Now() + 9:00 で今現在の日時を指定します。+9:00 に関しては TimeZone の説明で触れます。因みに Today() と Now() の違いですが、時刻が取得できるかどうかが違います。Today() の場合は 2020/02/18 00:00:00 みたいに今日の日付のみが取得できます。一方 Now() の場合は 2020/02/18 12:34:56 のように日付 + 時刻まで取得できます。
エンドは、スケジュールの終了日時です。今回は 60 分のミーティングを想定して DateAdd() を用いて Now() + 9:00 に 60 分足した日時を指定しています。
TimeZone に関してはオプションの設定で、日本のタイムゾーンを指定しています。先ほどから出てきている +9:00 はこの TimeZone に合わせるためです。このタイムゾーンを指定しておくと作成したスケジュールを Outlook のアプリから編集するときに開始時間などが -9:00 にならずに編集できます。
他にもスケジュールの備考や場所などをオプションで登録できるので下記のリファレンスから確認してみてください。
スケジュールを追加する関数( V2CalendarPostItem() )のリファレンスはこちら

扱い方

取り敢えず試す場合は「ボタン」のオブジェクトを追加して OnSelect にコードをコピってボタンを押してみてください。次にスケジュールを取得してみてください。先ほど作成したスケジュールがコレクションの todayCalendarEvents に取得できているはずです。

スケジュールの削除

スケジュールは以下のコードで削除できます。

Office365Outlook.CalendarDeleteItem(First(calendarType.value).Name,LookUp(sortTodayCalendarEvents,Subject="MTG").Id)

コードの説明

Office365Outlook.CalendarDeleteItem( カレンダータイプ, 削除したいカレンダーの Id ) で削除できます。
カレンダータイプは、「スケジュールの取得」で取得した calendarType の中から作成したい先のカレンダータイプを指定します。今回は「予定表」に作成したいので First(caledarType.value).Name で指定しています。
削除したいカレンダーの Id は、todayCalendarEvents の value を見てもらうとわかりますが、レコードに Id という項目があるかと思います。それです。今回は sortTodayCalendarEvents の中から タイトル ( Subject ) が "MTG" のスケジュールを検索して、その Id を選択しています。

スケジュールを削除する関数のリファレンスはこちら

扱い方

※選択したスケジュールが本当に消えるので注意してください
取り敢えず試す場合は「ボタン」のオブジェクトを追加して OnSelect にコードをコピってボタンを押してみてください。次にスケジュールを取得してみてください。先ほど削除したスケジュールがコレクションの todayCalendarEvents から消えているはずです。

サンプル画面について

コーディングはしんどい...そんな方は「新しい画面」→「カレンダー」で画面を追加してみてください。スケジュールが取得できる画面ができたかと思います。これを参考にして改造していくのも良いかもしれません!

まとめ

今回は Outlook のスケジュールの扱い方を紹介しました。スケジュールの取得や作成、削除などが簡単にできたと思います。コーディングが苦手な方もサンプル画面があるので安心です!
Outlook 周りを絡めたアプリを一から作成すると認証周りとかが大変で、スケジュールの取得だけでも結構大変なんです。Power Apps なら 1 分で接続、バックエンドは大体揃っているので楽ちんです。フロントのデザインとかに時間が割けます。
今回の知見を活かして Outlook を使った会議室予約アプリを作成してみたので、そのブログはここ「Power Apps × Outlook で会議室予約アプリを作ってみた」です!

◆◇FIXERってどんな会社?◇◆
気になるあなたに、ぜひ参加していただきたい企業説明会を実施しています!
採用担当 が毎回、小さな疑問も大きな不安もじっくりお答えしています♪
聞きづらい質問もどんとこーい!な企業説明会です!
FIXER企業説明会はこちらからどうぞ!

◆◇FIXERでは今、新卒・中途問わず仲間を募集しています!◇◆
ぜひ求人も覗いてみてください!↓↓↓
FIXERの求人はこちらからどうぞ