【问题标题】:Microsoft Graph API Shared Calendar IDs inconsistent between usersMicrosoft Graph API 共享日历 ID 在用户之间不一致
【发布时间】:2017-10-25 23:05:39
【问题描述】:

我的应用程序允许用户在共享日历上安排活动,并允许其他用户重新安排或取消这些活动。我请求Calendar.ReadWrite.Shared 启用此权限。

似乎如果两个用户有权访问共享日历,则从GET /me/calendars 返回的 ID 值对于这两个用户来说是不同的。是否有一个一致的、唯一的 ID 值可用于关联用户之间的共享日历?

【问题讨论】:

  • 嗨@Emily!对于类似的用例,我遇到了同样的问题。您找到合适的解决方法了吗?谢谢!

标签: microsoft-graph-api office365api outlook-restapi


【解决方案1】:

很遗憾,没有一个唯一的 ID 值在所有共享日历实例之间共享。

Exchange 服务器中的日历建立在邮件文件夹之上(就像约会建立在邮件之上一样)。用户邮箱中的每个文件夹都有一个在创建时分配的 ID。

当一个用户与另一个用户(代理人)共享他们的日历时,幕后发生的事情是,当代理人点击共享邮件中的“接受”按钮时,服务器会创建一个副本代理邮箱中的共享日历,并设置同步以使副本与原始日历保持同步。这对您的问题很重要,因为当您以代理人身份访问共享日历时,您不是在访问所有者邮箱中的日历,而是在访问副本。因为在每个委托人的邮箱中都创建了一个副本,所以每个副本的 ID 都不同。

日历资源上的owner 属性告诉您原始日历所在的邮箱,但仅将其与其他邮箱中的其他副本相关联是不够的。 name 属性是可编辑的,所以这里不能依赖它。

【讨论】:

  • 嘿@Jason - 鉴于共享日历由多个用户使用(根据定义),MSFT 对将这些日历标识为等效的建议是什么?日历是否有 iCalUid 等效项?
  • 我真的没有。没有好的方法可以做到这一点。你能解释一下你的场景吗?
  • 如何使用放置在日历上的特殊事件,然后使用 iCalUId 作为日历的唯一 ID?该活动必须没有与会者。我知道用户可以删除它。
  • @JasonJohnston - 当然可以。它实际上与 Emily 的用例非常相似。我们有一个应用程序,其中多个用户在共享日历上安排活动。有时,用户需要重新安排或取消他们拥有编辑权限但不是自己创建的共享日历上的事件。因此,在创建事件后,我将拥有创建者的日历 ID。但是对于我们应用程序中的任何其他用户,我无法确定这对应于哪个日历。
  • 我能想到的最好的方法是将事件的 iCalUid 与日历的所有者一起存储。然后,如果您需要为特定用户查找它,请检查其邮箱中与具有该 iCalUid 的事件的所有者匹配的所有日历。这不是很好并且涉及多个调用,但它至少应该让您的场景正常工作。您可能想在我们的 UserVoice 上提出功能请求:microsoftgraph.uservoice.com
【解决方案2】:

我为此使用了一个帐户的日历,该帐户对其他人具有特定的特权。 所以我可以从每个帐户访问这个 cal

/{$user}/calendar/{$cal}/

我也可以与 delta 同步:

/{$user}/calendarView/delta?

但这仅适用于“一个”日历,此时没有用于 explizit 日历的“增量”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多