#PowerAutomate Office 365 Outlook コネクター 定期的なイベント（繰り返しの予定）あれこれ

[Office 365 Outlook コネクター](https://learn.microsoft.com/ja-jp/connectors/office365/?WT.mc_id=BA-MVP-5004053) を利用することで、予定表のイベント（予定や会議）を新規作成、変更、削除した際に発火するフローが作成できます。例としては、下記のような Power Automate です。

https://qiita.com/yamad365/items/830b64954dcdfcb91fe2

https://qiita.com/yamad365/items/4765b701a9dd2c46367b

https://qiita.com/yamad365/items/4e64d068e97c6cb3726b

『イベントが追加、更新、または削除されたとき (V3)』（CalendarGetOnChangedItemsV3）トリガーです。これを利用すると予定や会議の新規作成、変更、削除が全て 1つのトリガーで発火できるので便利なのですが・・・。定期的なイベント、所謂”繰り返しの予定”の内部データがクセが強いので、今回は上記の記事で「対応がメンドクサイからやらない！」と宣言している”定期的なイベント”（＝ 繰り返しの予定）について、調べたり試したりした結果のメモ的な記事です。

# 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)

![スクリーンショット 2023-01-06 090136.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/6679bbcc-654b-499d-ded9-0d21f89de4db.png)
Exchange Onlie は ExO と略す場合があります。また、予定や会議と”イベント”という単語で混乱するかもしれません。ExO の予定表では基本的に「予定のアイテム＝イベント」になります。適宜、前後の文脈から脳内補完してください。

記事投稿時点（2023年1月）の仕様、および画面となります。今後の VerUp や仕様変更などで当記事と異なる動作となっている可能性があります。

当記事は”歴史の断片”とする意図もあるため記事公開後の変更については基本的に対応する予定はありません。

## 公式情報 トリガーの既知の問題と制限
改めてコネクターの Docs を確認していたら、過去に記載がなかったと思われる内容が明記されているのに気づきました。（※もしかしたら、過去も明記されていたかもしれないけど覚えてない）

https://learn.microsoft.com/ja-jp/connectors/office365/?WT.mc_id=BA-MVP-5004053#known-issues-and-limitations-with-triggers

この後で何度か同じページ、または同ページの各見出しへの URL が登場する予定です。

# 検証で利用するフロー
トリガーと、作成アクションをいくつか置いただけのシンプルな構造です。

![スクリーンショット 2023-01-06 090346-サンプルフロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/2dc6c6cb-2876-24c2-30ba-b29aecf8a907.png)

なお、作成アクションは 1つ配置すれば十分でした。思わず何個か設定していますが、発火の状況だけ確認するならもっとシンプルにできた・・・しっぱいしっぱい。

:::note info
当記事はトリガー設定の「分割」がオンになっている状態で実施しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/f321bd1f-25ae-e408-c837-4088e80c60d2.png)

「分割」がオフの場合、動作が異なりますのでご注意ください。
下記が参考になると思います。

■参考情報
[Hiro](https://twitter.com/mofumofu_dance) さん、毎度ありがとうございます！！
https://mofumofupower.hatenablog.com/entry/2020/03/17/000000_1
:::

# 定期的なイベントは全アイテムで発火
定期的なイベント（繰り返しの予定）を新規作成した場合、繰り返されるイベントぶんフローが発火します。[トリガーの既知の問題と制限](https://learn.microsoft.com/ja-jp/connectors/office365/?WT.mc_id=BA-MVP-5004053#known-issues-and-limitations-with-triggers) にも明記されています。

> トリガーは、イベントが発生するたびに発生します。 定期的なイベントを変更すると、このシリーズのすべてのイベントに影響します。 たとえば、シリーズが 15 回発生する場合、トリガーは 15 回発生します。

実際に試してみると、よくわかります。

<blockquote class="twitter-tweet"><p lang="da" dir="ltr"><a href="https://twitter.com/hashtag/PowerAutomate?src=hash&amp;ref_src=twsrc%5Etfw">#PowerAutomate</a> CalendarGetOnChangedItemsV3 <a href="https://t.co/tpLtvLMZo5">pic.twitter.com/tpLtvLMZo5</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1613173826099228675?ref_src=twsrc%5Etfw">January 11, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

一目瞭然ですが、左側が予定表（カレンダー）、右側が Power Automate の検証用フロー 実行結果です。繰り返しの予定ぶんフローの実行結果が発生していますよね。

経験則ですが、たまに「繰り返しのｎ番目だけ発火しない」という症例を観測しています。具体的な再現手順が現状無いので、む～ん悩ましい・・・という参考情報を添えておきます😅

# 予定の新規作成時にフローが2回発火する
定期的なイベントに限った話題ではありませんが、予定（イベント）を新規作成した際にトリガーが2回発火する場合があります。ユーザー自身が対象の予定アイテムを更新することなく、”新規追加しただけ”で2回トリガーが発動するんです。
<blockquote class="twitter-tweet"><p lang="da" dir="ltr"><a href="https://twitter.com/hashtag/PowerAutomate?src=hash&amp;ref_src=twsrc%5Etfw">#PowerAutomate</a> CalendarGetOnChangedItemsV3 <a href="https://t.co/Juz7rKiGxd">pic.twitter.com/Juz7rKiGxd</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1613174585989681152?ref_src=twsrc%5Etfw">January 11, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

公式サイトの「トリガーの既知の問題と制限」にも明記されています。

https://learn.microsoft.com/ja-jp/connectors/office365/?WT.mc_id=BA-MVP-5004053#known-issues-and-limitations-with-triggers

念のため、公式サイト該当箇所のスクショも貼っておきます。

![スクリーンショット 2023-01-11 160224.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/63327be7-a88b-b0ba-2aab-36a0fd1651cc.png)
> Exchange の内部プロセスによってイベントを更新できます。そのため、トリガーが再び発生します。 ユーザーは Action Type パラメーターでトリガーの出力をフィルタリングして、不要な更新を無視できます。

定期的なイベント、繰り返しの予定ぶん重複します。
![スクリーンショット 2023-01-11 155410-新規作成で2回.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/4e1bebe7-783c-97f5-be42-58f595ebb1fa.png)
なお、この現象は調査対象のトリガーが追加された当時（1～2年前？）は発生していなかった、と記憶しています。API 側が何らか変更になったのか、ExO 側に仕様変更があったのか、は不明です。ただただ残念な動きです。

上記どおり、トリガーの「Action Type」で新規作成のイベント（added）か？更新（updated）か？で判定はできます。しかし、ユーザー自身がホントに更新した予定で発火した結果なのか？ ExO が自動で処理した結果なのか？は判断が困難です。内部的に「ExO が内部的に更新したんだぞフラグ」等があれば良かったのですが、そんな気の利いたプロパティは探した限りでは存在していません。そのため、フローを作成する際に「意図しない更新でトリガー発火する」前提で組んだほうが良さそう、というのが、現状で当方が考える最適解になります。

# 繰り返される途中の予定削除は認識困難
定期的なイベントのうち、”既定となる大元（マスターの予定）以外にある途中の予定”を削除した場合、どうやら下記のような動きになるみたいです。

　1)定期的なイベント全体の「削除された対象」”以外”が Update で発火する
　2)削除された”途中の予定”は「削除」でトリガーされない ＝ 削除された対象はフローで認識できない

![スクリーンショット 2023-01-11 130438-単体削除01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/476b91b6-80b1-5077-16bb-18669171c26f.png)
![スクリーンショット 2023-01-11 130540-単体削除02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/18c234a8-e9f0-b19c-7225-0c2f157a804f.png)
※上記イメージでは、1/10 を事前に削除してあって、さらに 1/12 の削除を実施した後のフロー実行結果です。

# 定期的なイベントを”全て”削除した場合は大元のみトリガーされる
前述、途中の予定削除は Update（更新）でしたが、繰り返しの予定全てを削除した場合は「大元の予定（マスターの予定）のみ Delete（削除）で発火」になります。

![スクリーンショット 2023-01-11 132702-AllDelete01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/8e3216dc-b47f-b406-1ded-bd8b52554a2c.png)
予定の新規作成は全て発火するのに、定期的なイベント全体を削除した場合は”マスターの予定”のみトリガーの対象となる、ってコトですね。ややこしやーややこしやー・・・。

# 一部の変更でも全アイテムが発火する
定期的なイベントに含まれる 1つ の予定を時間変更などしても、繰り返されるイベントぶんフローが発火します。10個繰り返しがある状態で、そのうち1つだけ変更しても「10回トリガー発火する」ということです。

<blockquote class="twitter-tweet"><p lang="da" dir="ltr"><a href="https://twitter.com/hashtag/PowerAutomate?src=hash&amp;ref_src=twsrc%5Etfw">#PowerAutomate</a> CalendarGetOnChangedItemsV3 <a href="https://t.co/tCKxQX9Mmp">pic.twitter.com/tCKxQX9Mmp</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1613181955314716673?ref_src=twsrc%5Etfw">January 11, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

マスターの予定以外を削除した場合と同様です。単体だけ発火してくれればいいのに・・・。

# まとめ
まとめると、記事記載時点で下記です。

| ExO 予定操作       | トリガー                                | ActionType            |
|--------|-------------------------------------|-----------------------|
| 新規     | 繰り返されるぶん発火する<br>※トリガーが 2回 発火する場合がある                         | 1回目 added、2回目 updated |
| 変更     | 繰り返されるぶん発火                          | updated               |
| 削除（一部） | 繰り返されるぶん発火<br>※ただし、削除された対象はトリガーされない | updated               |
| 削除（全て） | マスターの予定のみ発火                         | deleted               |

# 結び
冒頭で紹介した ExO 予定表から Google カレンダーへ同期するような Power Automate のフローで「繰り返しの予定は除外」としている意図がお伝えできたかな、と思います。Exchange Online（ExO）の予定表、定期的なイベント（繰り返しの予定）は「なんか複雑だなぁ」ですよねぇ。

マスターの予定を削除する以外は、基本的に繰り返しの数だけトリガー発火するので API コール数にも影響があります。とてもやっかい。まことに、やっかい。

Graph API や EWS などで定期的なイベントを取得して内部データを解析するとわかるのですが、ExO では基本的に大元の予定（マスターの予定）のみがデータとして保持されています。繰り返される全ての予定が内部データとして保持されているワケではありません。定期的なイベントを”全て削除”した場合、マスターの予定のみがトリガー発火する理由がコレです。

定期的なイベント＝繰り返しの予定が非常に厄介で Power Automate でアプローチする場合に限らず、事前検証、アーキテクチャの検討、想定される操作を網羅したテストなどを実施する必要性があります。チャレンジする方は入念な調査と設計、テストを実施ください。

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