Power Automate で他人の予定を作成、更新する


# はじめに

Power Automate を使って提携のメール、会議などの作成を効率化したいという相談をいただくことがよくあります。

例えば、以下のように SharePoint リストに雛形を作成しておき、そちらをベースに Power Automate から会議を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/41b4b70b-1a15-005a-a228-1618148c2cd5.png)

ただし、こちらのアクションで会議を作成すると、Power Automate のフローを動かしたユーザーが会議の主催者となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/4cb4f3a2-6b3c-7a6e-4c84-079bc24a4495.png)

そのため、自分以外のユーザー、例えば共有メールボックスを会議の主催者としたいようなケースもあると思います。

今回はそちらの方法について紹介します。

# 共有メールボックスの準備

Exchange 管理センターで共有メールボックスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/8fdf4c87-1ff8-841f-8be1-703c2a9da5e9.png)

作成後、委任の設定をします。端的に言うと、共有メールボックスの所有者にしてあげる感じです。
こちらにより、共有メールボックスに直接予定を作成することができるようになります。既定では、他人の予定表に予定を直接作成する、他人を会議の主催者にして会議を作成することは出来ないため、このように特別な権限を付与する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6080bb5d-31c4-cc06-4c37-4a5b665c8483.png)

# 予定の作成

共有メールボックスに対して予定を作成します。今回の場合、出席者を含めているため会議になります。

まず、他人の予定を作成については、以下の記事を参考にします。

https://learn.microsoft.com/en-us/graph/api/user-post-events?view=graph-rest-1.0&tabs=http

具体的には以下のようなリクエストになります。

```

https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/events

{
  "subject": "Team Meeting",
  "body": {
    "contentType": "HTML",
    "content": "Let's discuss the Q3 targets and strategies."
  },
  "start": {
    "dateTime": "2024-08-01T09:00:00",
    "timeZone": "Tokyo Standard Time"
  },
  "end": {
    "dateTime": "2024-08-01T10:00:00",
    "timeZone": "Tokyo Standard Time"
  },
  "location": {
    "displayName": "Conference Room A"
  },
  "attendees": [
    {
      "emailAddress": {
        "address": "johndoe@example.com",
        "name": "John Doe"
      },
      "type": "required"
    }
  ],
  "allowNewTimeProposals": true,
  "isOnlineMeeting": true,
  "onlineMeetingProvider": "teamsForBusiness"
}

```

こちらを Power Automate から行う場合、例えば、以下のような流れになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c5d0906f-8bae-57f8-3f5f-79c888e82770.png)

出席者の数は何人になるか分からないため、以下のように、項目の取得アクションの結果の出席者の列の情報を以下のフォーマットで配列変数に追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6171cb17-6866-261d-5d54-c89837ca5bdc.png)

```
{
  "emailAddress": {
    "address": "@{items('Apply_to_each')?['Email']}",
    "name": "@{items('Apply_to_each')?['DisplayName']}"
  },
  "type": "required"
}
```

そして、その変数を attendees に代入します。
```
{
  "subject": "@{outputs('項目の取得')?['body/Title']}",
  "body": {
    "contentType": "HTML",
    "content": "@{outputs('項目の取得')?['body/Detail']}"
  },
  "start": {
    "dateTime": "@{outputs('項目の取得')?['body/StartTime']}",
    "timeZone": "Tokyo Standard Time"
  },
  "end": {
    "dateTime": "@{outputs('項目の取得')?['body/EndTime']}",
    "timeZone": "Tokyo Standard Time"
  },
  "attendees": @{variables('出席者')},
  "allowNewTimeProposals": true,
  "isOnlineMeeting": true,
  "onlineMeetingProvider": "teamsForBusiness"
}
```

配列変数が動的な値には候補が出てこなかったため、直接以下のようにして代入します。

```
{
  "attendees": @{variables('出席者')}
}
```

作成をしたら、結果を ［JSON の解析］アクションで解析をして、結果の id を保存しておきます。こちらの id を利用することで、作成した予定を更新することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/7c0bb02b-c34d-1773-29ed-c6af5fbc849b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/f0ae34f3-1dcb-542c-b692-7ef4b2fa4576.png)

［JSON の解析］アクションの中身は、一度処理を実行して、結果の Body をサンプルとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/cb3c862e-3b05-a908-1b55-3f159f7660ca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3e5b21d6-9f46-f642-2948-5c22f1aa7ff8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a337b771-abd7-44cc-b307-12b2e56ca2bf.png)

こちらにより、共有メールボックスに予定を作成することができました。こちらは会議のため、開催者が共有メールボックスになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ed0bbb6c-a020-9fc0-1b2e-34df67caf682.png)

# 予定の更新

予定の更新は以下の記事を参考にします。基本的には作成とほとんど一緒ですが、リクエストが Patch になり、どの予定を更新するか、event-id を指定する必要があります。

https://learn.microsoft.com/en-us/graph/api/event-update?view=graph-rest-1.0&tabs=http

```
PATCH https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/events/{event-id}
```

そのため、Power Automate で行う場合、以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0e491680-2157-adec-7952-8c8002f384a5.png)

```
https://graph.microsoft.com/v1.0/users/takmasshare@takmaspower.com/events/@{outputs('項目の取得')?['body/MeetingId']}
```

SharePoint リストのアイテムを更新して実行してみます。タイトル、本文、開催日時、出席者を変更してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/674b12e1-db4a-8619-5448-0d3125bf19dd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/12f5f3ac-53db-fd4a-5b0e-bace1d1deba2.png)

処理が成功し、実際の予定を見ると、タイトル、本文、開催日時、出席者が変更されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/68fbd3cc-d53c-0f38-23cc-52bdaf2e8339.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/f191b02e-46e1-2c7d-7f2b-b66b46d298fd.png)

# まとめ

今回は、Power Automate で他人の予定を作成、更新する、具体的には、共有メールボックスを使って行う方法について説明しました。

Power Automate を使って提携のメール、会議などの作成を効率化したいというニーズはあると思うので、参考にしていただけると幸いです。