#PowerAutomate 任意の予定表アイテムのみフローを発火させる方法

Microsoft 365 の予定表、使ってますか？

Microsoft 365（以降、M365）でスケジュール管理や会議室の予約、Teams 会議などで大活躍しますよね。まさか、M365 を利用しているのに使ってない・・・なんてコトは無いと信じたい。

そんな予定表で「自分が選んだ特定の予定のみ Power Automate のフローを発火させる」コトができたらチョッと便利になりませんかね？当方はなったんですよ。なので、アレコレ考えた結果、閃いたアイディアです。

# Disclaimer
毎度おなじみ（？）の『イベントが追加、更新、または削除されたとき (V3)』（CalendarGetOnChangedItemsV3）トリガーを利用して説明します。この記事では他のイベント関連トリガーやアクションまではカバーしません。

https://learn.microsoft.com/ja-jp/connectors/office365/?WT.mc_id=BA-MVP-5004053#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%80%81%E6%9B%B4%E6%96%B0%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E5%89%8A%E9%99%A4%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D-(v3)

Exchange Onlie は ExO と略す場合があります。また、予定や会議と”イベント”という単語で混乱するかもしれません。ExO の予定表では基本的に「予定のアイテム＝イベント」になります。適宜、前後の文脈から脳内補完してください。API等では、個人の予定と会議招集は別モノだったりする場合もあるけども、そこが気になる方は是非調べてみてください😇

# 説明で利用するフロー
トリガーと「作成」アクションを 1つ置いただけの、とってもシンプルなフローです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/13bfd58a-fba7-0620-7f70-b46558edf077.png)

作成アクションに設定している関数は後ほど説明します。

# 任意の予定のみ発火させるアイディア
予定に付与できる”分類”を利用します。当記事では『紫の分類』の場合のみ、フローが発火するように設定します。

## トリガーの条件
トリガーの右上にある三点（・・・）から［設定］をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/4532d50b-f975-daed-97fd-aa4f533503e3.png)

トリガーの表示が切り替わったら、末尾にある［トリガーの条件］に下記を設定して「完了」です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/dbb1cde0-86f4-543f-d266-7c21d56ef231.png)

```
@contains(triggerBody()?['categories'], '紫の分類')
```

これで、このフローが発火するのは『”紫の分類”が設定された場合のみ』になります。

## 予定表での利用例
利用例として、既に登録されている予定を発火させます。登録済みの予定を右クリック → ［分類］ → ［紫の分類］を選択します。これだけで該当のフローが発火します。なお、紫の分類以外を選んだ場合はフローは発火しません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/2cfa7775-7772-3dc3-dc89-c894866ca907.png)

もちろん、予定の新規作成画面で分類を設定しても問題ありません。

分類を利用すれば、他人から招待された会議招集であっても、任意の対象を選んで Power Automate のフローを発火させて自動化が実現できます。もちろん、Teams のカレンダーから分類を指定した場合も同様の動作となります。

## 

# 作成アクションの関数
既にネタバレしているかな？とは思いますが、作成アクションで指定している関数は下記になります。

```
concat( triggerOutputs()?['body/categories'] , ',' )
```

予定の”分類”（categories）を concat 関数でカンマ区切りの文字列にしているだけ、です。

https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference?WT.mc_id=BA-MVP-5004053#concat

ExO の予定表アイテムには、複数の”分類”が指定可能です。そのため Power Automate の発火結果では分類（= categories）が配列になります。

## 実行結果の例
上記のフロー動作イメージはです。指定した分類以外では発火していないのですが、ソレをわかりやすくお伝えするのが非常に大変なので、皆さんも是非お手元の環境で試して実感してほしいです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/PowerAutomate?src=hash&amp;ref_src=twsrc%5Etfw">#PowerAutomate</a> ExO 任意の予定のみ発火 <a href="https://t.co/TNFSBzSJyJ">pic.twitter.com/TNFSBzSJyJ</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1669488775096049664?ref_src=twsrc%5Etfw">June 15, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## トリガーの出力結果を眺めてみる
分類が配列になっている状態は、フローの実行結果から確認できます。以下は参考例です。

```
{
    "headers": {
        ～割愛～
    },
    "body": {
        "ActionType": "added",
        "IsAdded": true,
        "IsUpdated": false,
        "subject": "test",
        "start": "2023-06-15T00:00:00.0000000",
        "end": "2023-06-15T00:30:00.0000000",
        "startWithTimeZone": "2023-06-15T00:00:00+00:00",
        "endWithTimeZone": "2023-06-15T00:30:00+00:00",
        "body": "",
        "isHtml": true,
        "responseType": "organizer",
        "responseTime": "0001-01-01T00:00:00+00:00",
        "id": "AAMk～～ZlFxfAAA=",
        "createdDateTime": "2023-06-15T14:29:23.8074833+00:00",
        "lastModifiedDateTime": "2023-06-15T14:29:23.8851813+00:00",
        "organizer": "naisho",
        "timeZone": "UTC",
        "iCalUId": "04000000～～3E16430B71DB17",
        "categories": [
            "紫の分類",
            "赤の分類"
        ],
        "webLink": "割愛",
        "requiredAttendees": "",
        "optionalAttendees": "",
        "resourceAttendees": "",
        "location": "",
        "importance": "normal",
        "isAllDay": false,
        "recurrence": "none",
        "reminderMinutesBeforeStart": 15,
        "isReminderOn": true,
        "showAs": "busy",
        "responseRequested": true,
        "sensitivity": "normal"
    }
}
```

今回のようなテクニックは上記のトリガー出力結果と、ExO 予定表アイテムの仕様をイメージして閃いたテクニックです。

# 補足
ExO 予定表の分類は、ユーザー自身で表記や色を変更できます。今回はデフォルト設定のまま説明しています。既に変更している方は適宜現状の設定内容にあわせた対応を実施ください。

https://support.microsoft.com/ja-jp/office/%E4%BA%88%E5%AE%9A-%E4%BC%9A%E8%AD%B0-%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AB%E8%89%B2%E5%88%86%E9%A1%9E%E9%A0%85%E7%9B%AE%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B-750596d9-707d-4412-8c0e-7fdc0fc52527


# 結び
例えば「特定の予定をトリガー条件にして●●したい。ただし、全ての予定で発火されては困る」という条件の場合にはバッチリとハマるテクニックだと思います。と言うか当方自身が、その必要に迫られた、って感じですね（ﾈﾀﾊﾞﾚ

それでは、皆さま、素晴らしい Power Platform Life を！