获取共享或委托的 Outlook 日历及其事件

在 Outlook 中,日历所有者可与其他用户共享日历,并让他们查看或修改该日历中的事件;共享日历可以是所有者的主日历或由所有者创建的自定义日历。 所有者还可以将主日历授权给代理人,并由代理人代表他们接收或答复会议请求,或创建或更改主日历中的项目。

Microsoft Graph 支持以编程方式读取和写入其他用户共享的日历中的事件,以及读取共享日历和更新共享收件人的日历名称。 此支持还适用于已委托的日历。 本文的其余部分介绍如何在共享或委托的日历中读取事件。 有关创建事件的信息,请参阅在共享日历或委托的日历中创建 Outlook 事件

共享收件人:直接从日历所有者的邮箱获取共享日历或其事件

以下三个示例假设这样的情景:在 Outlook 中,Alex 向 Megan 共享了他的主日历,并给予 Megan 读取权限。 如果 Megan 登录你的应用,并提供委托权限 (Calendars.Read.Shared or Calendars.ReadWrite.Shared),代表 Megan,你的应用可以直接从 Alex 的邮箱中访问 Alex 的主日历及其事件。

三个示例指定了所有者的标识(Alex 的用户 ID 或用户主体名称)和 calendar 快捷方式。 这些示例仅访问与所有者的邮箱对应的日历和事件 ID。 在共享收件人的邮箱中指定这些日历和事件 ID (Megan 的用户 ID 或用户主体名称) 将返回错误。 若要使用与共享收件人邮箱对应的日历和事件 ID,请参阅 共享收件人:从共享收件人的邮箱获取共享、自定义日历或其事件

注意

通过共享权限(Calendars.Read.Shared 或 Calendars.ReadWrite.Shared),你可以在共享或委托的日历中读取或写入事件。 它们不支持订阅此类文件夹中的项的更改通知。 若要对租户中共享、委托或任何其他用户或资源日历中的事件设置更改通知订阅,请使用应用程序权限 Calendars.Read。

Megan:直接从 Alex 的邮箱获取共享的主日历

以 Megan 的身份登录,直接从 Alex 的邮箱获取 Alex 向 Megan 共享的主日历:

GET https://graph.microsoft.com/v1.0/users/{Alex-userId | Alex-userPrincipalName}/calendar

成功完成后,你将在 Alex 的邮箱中获取 HTTP 200 OK 和表示 Alex 共享的主日历的 日历 实例。

Megan:直接从 Alex 的邮箱获取共享主日历中的事件

以 Megan 的身份登录,你的应用可以直接从 Alex 的邮箱获取 Alex 向 Megan 共享的主日历中的特定事件:

GET https://graph.microsoft.com/v1.0/users/{Alex-userId | Alex-userPrincipalName}/calendar/events/{id}

成功完成后,你将收到 HTTP 200 OK 消息以及 Alex 的主日历中由 {id} 标识的事件实例(直接从 Alex 的邮箱获取)。

Megan:从 Alex 的邮箱获取共享主日历中的所有事件

以 Megan 的身份登录,直接从 Alex 的邮箱获取 Alex 向 Megan 共享的主日历中的所有事件:

GET https://graph.microsoft.com/v1.0/users/{Alex-userId | Alex-userPrincipalName}/calendar/events

成功完成后,你将收到 HTTP 200 OK 消息以及 Alex 的主日历中的一组事件实例(直接从 Alex 的邮箱获取)。

如果 Alex 已委托 Megan 访问 Alex 的主日历,或者 Alex 向 Megan 委托了其整个邮箱,则将适用同样的 GET 功能。

如果 Alex 未与 Megan 共享或委托其主日历,在前面的 GET 操作中指定 Alex 的用户 ID 或用户主体名称将返回错误。

共享收件人:从共享收件人的邮箱获取共享、自定义日历或其事件

如果 Alex 向 Adele 共享了一个自定义日历(例如,名为“Kids parties”的日历),并且 Adele 提供了委托权限(Calendars.Read 或 Calendars.ReadWrite),则你的应用可以从 Adele 邮箱中的 Alex 日历本地副本获取事件或日历,如下所述。

  1. 以 Adele 的身份登录,使用以下任一请求获取 Adele 有权访问的所有日历,包括共享的自定义日历。

    GET https://graph.microsoft.com/v1.0/me/calendars
    GET https://graph.microsoft.com/v1.0/users/{Adele-userId | Adele-userPrincipalName}/calendars
    

    成功后的响应包括响应代码 HTTP 200 以及 Adele 有权访问的一组日历,包括所有者名称为“Alex Wilber”的日历(“Kids parties”),作为响应中的第二个日历。 对于共享收件人 Adele,共享日历的 canShare 属性始终为 false。

    HTTP/1.1 200 OK
    Content-type: application/json
    
    {
        "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('d3b9214b-dd8b-441d-b7dc-c446c9fa0e69')/calendars",
        "value": [
            {
                "id": "AQMkADU5NAAAJMjAAAAA==",
                "name": "Calendar",
                "color": "auto",
                "changeKey": "NDznl+Uh50WkanaCOKHkaQAAAAACXQ==",
                "canShare": true,
                "canViewPrivateItems": true,
                "canEdit": true,
                "owner": {
                    "name": "Adele Vance",
                    "address": "AdeleV@contoso.com"
                }
            },
            {
                "id": "AAMkADAABf0JlyAAA=",
                "name": "Kids parties",
                "color": "lightYellow",
                "changeKey": "NDznl+Uh50WkanaCOKHkaQAAYumJRQ==",
                "canShare": false,
                "canViewPrivateItems": false,
                "canEdit": false,
                "owner": {
                    "name": "Alex Wilber",
                    "address": "AlexW@contoso.com"
                }
            }
        ]
    }
    
  2. 以 Adele 的身份登录,获取共享日历或获取共享日历中的一个或多个事件(使用步骤 1 的响应中的第二个日历 ID)。 共享日历的 ID 及其事件对应于 Adele 邮箱中的 Alex 日历本地副本。

    GET https://graph.microsoft.com/v1.0/me/calendars/AAMkADAABf0JlyAAA=
    GET https://graph.microsoft.com/v1.0/users/{Adele-userId | Adele-userPrincipalName}/calendars/AAMkADAABf0JlyAAA=
    
    GET https://graph.microsoft.com/v1.0/me/calendars/AAMkADAABf0JlyAAA=/events/{id}
    GET https://graph.microsoft.com/v1.0/users/{Adele-userId | Adele-userPrincipalName}/calendars/AAMkADAABf0JlyAAA=/events/{id}
    
    GET https://graph.microsoft.com/v1.0/me/calendars/AAMkADAABf0JlyAAA=/events
    GET https://graph.microsoft.com/v1.0/users/{Adele-userId | Adele-userPrincipalName}/calendars/AAMkADAABf0JlyAAA=/events
    

成功完成后,你将获得 HTTP 200 OK 以及 Alex 与 Adele 共享的请求事件、事件或日历。