Power Automate を利用した Outlookのイベント取得

# 概要
Azure LogicAppsや Power Automate を利用してOutlook(Office 365 Outlook)と接続してOutlook上のカレンダーのイベントデータを取得するときのわかりにくい点などをまとめました。
特に、ソートやフィルタの方法については、Microsoft独特な言い回しがあるため、慣れてない方は戸惑います。
実際のサンプルを提示して、動きを説明します。
LogicAppsで説明していますが、Power Automateもほとんど変わらないはずです。

# イベントの取得

LogicApps作成フロー上で、Office 365 Outlookの「イベントの取得(V4)」アクションを利用します。
＊事前に接続情報を作る必要があります。初回時に接続設定が表示されるので、取得したいイベントがあるOfficeアカウントを接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/82e4c843-dd45-0233-fb18-f73355a2a6e9.png)
予定表IDからイベントを取得したいカレンダーを選択すると、イベントを取得できますが、このままだと順番（ソート順）や日付でフィルタできておらず、使いにくいです。

#### 実行結果(不要なプロパティは削除済)

```
[
    {
      "subject": "TEST211012",
      "start": "2021-10-12T02:00:00.0000000",
      "end": "2021-10-12T03:00:00.0000000",
    },
    {
      "subject": "TEST211015",
      "start": "2021-10-15T02:00:00.0000000",
      "end": "2021-10-15T03:00:00.0000000",
    },
    {
      "subject": "TEST200708",
      "start": "2020-07-08T03:00:00.0000000",
      "end": "2020-07-08T04:00:00.0000000",
    }
]
```

## イベントのソート

イベントの取得アクションの「Add new parameter」 から「並び替え順」を選択すると、「並び替え順」の欄が追加され、ODATA orderBy クエリによって指定できます。

ODATA orderBy クエリですが、基本的には「並び変えたいプロパティ名 desc|asc」を指定します。
Microsoftのドキュメントでは、説明もなく「ODATA orderBy クエリ」と出てきて戸惑いますが、非常に簡単です。
例えば、イベントの終了時間で降順にする場合が以下となります(結果をわかりやすくするために取得イベント数を3個に絞っています。)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/9da8a3f1-16d0-a518-9ec5-d2cc4174bd2f.png)

イベントの終了時間を表すために `end/dateTime` を指定しています。
イベントの開始時間で並び変えたい場合は、`start/dateTime`になります。
その他のプロパティについては [こちら](https://docs.microsoft.com/ja-jp/graph/api/resources/event?view=graph-rest-1.0)から確認できます。
プロパティ内部が、オブジェクトである場合はスラッシュ区切りで内部プロパティを指定することができます。

#### 実行結果(不要なプロパティは削除済)
```
[
    {
      "subject": "TEST1015",
      "start": "2021-10-15T02:00:00.0000000",
      "end": "2021-10-15T03:00:00.0000000"
    },
    {
      "subject": "TEST1012",
      "start": "2021-10-12T02:00:00.0000000",
      "end": "2021-10-12T03:00:00.0000000"
    },
    {
      "subject": "TEST200708",
      "start": "2020-07-08T03:00:00.0000000",
      "end": "2020-07-08T04:00:00.0000000"
    }
]
```


## イベントのフィルタ

フィルタは、イベントの取得アクションの「Add new parameter」 から「フィルタークエリ」を選択すると、フィルタークエリの欄が追加され、ODATA フィルター クエリにより指定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/d96ca0aa-2b27-dc18-0fe7-e7602e966ef4.png)
ODATA フィルター クエリについては、[こちら](https://docs.microsoft.com/ja-jp/onedrive/developer/rest-api/concepts/filtering-results?view=odsp-graph-online&WT.mc_id=BA-MVP-5004053#supported-operators)が詳しいです。
わかりにくいので実例をもとに説明します。

### 例）フロー実行時間より前に終了するイベントを取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/5c9ec4f8-a087-5dcd-fa87-a2f0c3aca78c.png)

イベントの終了時間(end/dateTime)が、フロー実行時間(utcNow)より小さい（演算子 lt）イベントが取得されます。

### 例）実行時一週間前からフロー実行時間までに終了するイベントを取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/c6177528-83e4-2f66-3ec7-2f1edcaf7a39.png)
フィルタークエリの詳細

```
"end/dateTime lt '@{utcNow('yyyy-MM-dd')}' and end/dateTime ge '@{addDays(utcNow(),-7,'yyyy-MM-dd')}'"
```

フロー実行時間より小さく（前で）、フロー実行時間の一週間前より大きい（後の）イベントのみを取得しています。

### 例）実行時一週間後までに開始するイベントを取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774545/0f477616-4a9e-1aaa-2f22-21c5d60f4722.png)
フィルタークエリの詳細

```
"start/dateTime ge '@{utcNow('yyyy-MM-dd')}' and start/dateTime lt '@{addDays(utcNow(),7,'yyyy-MM-dd')}'"
```

フロー実行時間より大きく、フロー実行時間一週間後より小さい（前）イベントのみを取得しています。

## まとめ

今回は、LogicAppsでの、Outlookのカレンダー取得の取り扱いをまとめました。
ODATA 構文が一般的にあまり利用されておらず他の言語の利用者は戸惑うことも多いと思いますが、慣れれば簡単です。  
LogicAppsやPower Automateを利用するとビジュアルベースで様々なサービスから情報の取得・加工ができます。
Microsoft Teamsなどと組み合わせることで小さな労力で業務効率化が可能なので、LogicApps・Power Automateを利用できる方は、ぜひ試してみてください。

## 参考

https://docs.microsoft.com/ja-jp/connectors/office365/#get-events-(v4)

https://docs.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/use-odata-query-operations-in-sharepoint-rest-requests#odata-query-operators-supported-in-the-sharepoint-rest-service

https://docs.microsoft.com/ja-jp/onedrive/developer/rest-api/concepts/filtering-results?view=odsp-graph-online&WT.mc_id=BA-MVP-5004053#supported-operators

https://qiita.com/yamad365/items/9a24bf7e034ea35bb996

## 商標
LogicApps、PowerAutomate、Outlook、Office365およびMicrosoft社の各種サービスは、Microsoft Corporationまたはその関連会社の商標です。
記載の会社名、製品名、サービス名等はそれぞれの会社の商標または登録商標です。