はじめに
Power Automate クラウドフローでOutlook のイベントの下書きを作成する方法です。
考え方
Power Automate のOffice 365 Outlook コネクタの「イベントの作成 (V4)」アクションには下書きとして作成するパラメータは用意されていませんが「HTTP 要求を送信します」アクションを使ってGraph APIを呼び出すことで作成することが可能です。
Graph API の「イベントを作成する」エンドポイントを利用します。
フロー全体
フロー解説
1.[Control]スコープ - デフォルトカレンダーを取得
今回利用する「イベントを作成する」エンドポイントではイベントを作成するカレンダーのIdが必要となるため、まずカレンダーの情報を取得します。
※今回はデフォルトの"予定表"カレンダーにイベントを作成します。
1-1.[Office 365 Outlook]カレンダーの取得 (V2)
実行アカウントのすべてのカレンダーを取得します。
1-2.[Data Control] アレイのフィルター表示
デフォルトカレンダーはisDefaultCalendarがtrueに設定されているため、これを条件にフィルターを実施します。
- From
- @{outputs('カレンダーの取得_(V2)')?['body/value']}
- Filter Query
- @{item()?['isDefaultCalendar']}
- is equal to
- true
このような形でデフォルトカレンダーの情報が取得されます。
1-3.[Data Control]作成-calendarId
1-2の出力からカレンダーIdを取得しています。
- 入力
-
first(outputs('アレイのフィルター処理')['body'])?['id']
-
2.[Office 365 Outlook] HTTP 要求を送信します-イベントの下書きを作成
イベントの下書きを作成します。
- URI
- https://graph.microsoft.com/v1.0/me/calendars/@{outputs('作成-calendarId')}/events
- メソッド
- POST
- 本文
-
{ "subject": "これはイベントの下書き", "body": { "contentType": "HTML", "content": "それは、かって魂を持ったものかもしれない。しかし今は、それが、神の国にたどり着くことはないだろう。" }, "start": { "dateTime": "@{convertFromUtc(UTCNow(),'Tokyo Standard Time','yyyy-MM-ddTHH:mm:ss')}", "timeZone": "Tokyo Standard Time" }, "end": { "dateTime": "@{convertFromUtc(UTCNow(),'Tokyo Standard Time','yyyy-MM-ddTHH:mm:ss')}", "timeZone": "Tokyo Standard Time" }, "location":{ "displayName":"Lagrange Point #2" }, "isDraft":true, "attendees": [ { "emailAddress": { "address":"lesser_panda@xxxxxxxxx.jp", "name": "レッサーパンダ" }, "type": "required" } ] }
-
- コンテンツの種類
- application/json
本文は長めのJSONになっていますが、ポイントは「"isDraft":true」です。このパラメータを付加することでイベントは下書きとして作成されます。
実行結果
作成されたイベントを新しいOutlookで表示するとこのように下書きで作成されていることが確認できます。
【余談】Outlookのデフォルトカレンダーを1アクションで取得する
上のフローでは2つのアクションを組み合わせてデフォルトカレンダーのIdを取得しました。「HTTP 要求を送信します」アクションを使ってGraph APIを呼び出すことで1アクションで取得することができます。
Graph API の「予定表を一覧表示する」エンドポイントを利用します。
[Office 365 Outlook]HTTP 要求を送信します-get defafult calendar
実行アカウントのすべてのカレンダーを取得するものですが、URIの$filter パラメーターでisDefaultCalendar : true のカレンダーのみ返すよう指定しています。
このような出力が返されますので、idを取得するだけです。
first(body('HTTP_要求を送信します-get_defafult_calendar')?['value'])?['id']
さいごに
とある目的のフローを作成する際に確認した内容を備忘録的にまとめてみました。