【问题标题】:Updating the end date of a recursive meeting via Graph API not working通过 Graph API 更新递归会议的结束日期不起作用
【发布时间】:2019-01-22 15:35:55
【问题描述】:

我目前正在使用 Office Graph API 来处理用户日历的会议。 如果使用“/subscriptions”请求创建、更新和删除事件,我已订阅接收通知! 我的用户使用的是里斯本时区(夏季 = UTC+1,冬季 = UTC)

当用户在 Office 365 中创建事件时,在我的应用程序一侧,如果该事件是没有结束日期的递归会议,我会更新(通过 Graph API)会议,使其具有结束日期. [注:我的申请规则之一是任何会议都不能超过 365 天。]

问题:该系列已缩小到我通过 API 更新的结束日期,但时间的时区错误。我已经尝试过请求没有时区的 API,并且我已经请求使用时区 UTC 和时区 UTC +1 进行更新,但我总是遇到同样的问题。办公室这边,我更新后,会议时间少了一个小时。

下图是一个系列的例子,没有结束范围:

我在更新前获取了一些子会议,这是正确的。在葡萄牙,时间更改日是 2019 年 3 月 30 日,因此第 30 天从 10h00 UTC 开始,第 31 天 09:00 UTC:

这里我将请求发送到 Office 365 以更新重复周期结束(结束日期):

发送更新请求后,我获取相同的孩子,2019 年 3 月 30 日和 2019 年 3 月 31 日都从 10 点开始。 在客户日历中进行此更新后,会议的开始和结束时间错误:

我已经尝试在 Graph API recurrenctTImeZone: UTC, GMT Standard Time 字段中添加任何内容,并且我总是得到相同的回报。我无法解决这个问题。

你知道可能出了什么问题吗?

【问题讨论】:

  • 您是否在 PATCH 请求中发送任何其他值(recurrence 除外)?
  • Jason,不,我只是发送上图中的内容,代表我的循环更新结束的请求。

标签: office365 microsoft-graph-api azure-ad-graph-api


【解决方案1】:

在多次尝试解决问题后,我能够与 Office 365 开发团队交谈,并对负面反馈感到惊讶。

他们表示实际上在这种特定情况下,Microsoft API Graph 中存在未知错误,并且他们不保证解决此错误!

他们的建议是我们只在这种情况下使用Outlook Calendar API Rest API。 总之,由于 Microsoft 已经假定了这个未知错误,我将不得不在我的平台中实现 2 个不同的 API:Microsoft 当前推荐的 Microsoft Graph API,以及由于此错误而导致的 Outlook Calendar Rest API。

Outlook 日历 API 休息解决方案:

  1. 创建一个没有结束日期的重复事件

  1. 检索日历视图

  1. 获取事件的重复发生

  1. 更新活动

  1. 更新后检索日历视图

【讨论】:

    【解决方案2】:

    您实际上可以在请求的标头中使用它

    Prefer: outlook.timezone="Central Standard Time"
    

    这样它就知道您希望在哪个时区进行计算。有关这方面的更多文档,请点击此处https://docs.microsoft.com/en-us/graph/api/user-list-events?view=graph-rest-1.0#support-various-time-zones

    【讨论】:

    • 我们已经在 GET 和 UPDATE 标头中向您发送了建议,但它不起作用。问题完全一样。
    【解决方案3】:

    我不会在太平洋标准时区或 GMT 标准时区的用户中重现此行为。为了清楚起见,我正在使用 Postman 进行所有测试,并且我没有使用上面提到的 Prefer: outlook.timezone 标头 Jeremy。

    我在太平洋时间下午 2 点(UTC 时间 22:00)为用户创建了一个每日没有结束的约会。另请注意,夏令时在 3 月 10 日的这个时区开始。如下所示,更新前后实例的时间都是正确的。

    我还为 GMT 标准时区中的用户重复了相同的事件序列(在 web 上的 Outlook 中如此配置):

    我得到了与该用户完全相同的结果。

    我建议您在修补重复时始终使用原始重复中的recurrenceTimeZone。您最初可能通过修补 UTC 破坏了重复。

    在 Outlook 网页版中创建后获取事件

    GET /me/events/{id}&$select=originalStartTimeZone,originalEndTimeZone,start,end,recurrence
    
    {
      "id": "AAMkAGE1NWM...",
      "originalStartTimeZone": "Pacific Standard Time",
      "originalEndTimeZone": "Pacific Standard Time",
      "start": {
        "dateTime": "2019-01-24T22:00:00.0000000",
        "timeZone": "UTC"
      },
      "end": {
        "dateTime": "2019-01-24T22:30:00.0000000",
        "timeZone": "UTC"
      },
      "recurrence": {
        "pattern": {
          "type": "daily",
          "interval": 1,
          "month": 0,
          "dayOfMonth": 0,
          "firstDayOfWeek": "sunday",
          "index": "first"
        },
        "range": {
          "type": "noEnd",
          "startDate": "2019-01-24",
          "endDate": "0001-01-01",
          "recurrenceTimeZone": "Pacific Standard Time",
          "numberOfOccurrences": 0
        }
      }
    }
    

    在修改前获取实例

    注意开始/结束时间的变化。

    GET /me/events/{id}/instances?startDateTime=2019-03-09T00:00:00&endDateTime=2019-03-11T00:00:00&
    $select=originalStartTimeZone,originalEndTimeZone,start,end
    
    {
      "value": [
        {
          "id": "AAMkAGE1NWM...",
          "originalStartTimeZone": "Pacific Standard Time",
          "originalEndTimeZone": "Pacific Standard Time",
          "start": {
            "dateTime": "2019-03-09T22:00:00.0000000",
            "timeZone": "UTC"
          },
          "end": {
            "dateTime": "2019-03-09T22:30:00.0000000",
            "timeZone": "UTC"
          }
        },
        {
          "@odata.etag": "W/\"bReRxUIs3kGIyXXcVJg69AAANf7nZQ==\"",
          "id": "AAMkAGE1NWM...",
          "originalStartTimeZone": "Pacific Standard Time",
          "originalEndTimeZone": "Pacific Standard Time",
          "start": {
            "dateTime": "2019-03-10T21:00:00.0000000",
            "timeZone": "UTC"
          },
          "end": {
            "dateTime": "2019-03-10T21:30:00.0000000",
            "timeZone": "UTC"
          }
        }
      ]
    }
    

    更新事件重复以添加结束日期

    请注意,我将 recurrenceTimeZone 保留为与原始值相同的值。

    PATCH /me/events/{id}
    
    {
      "recurrence": {
        "pattern": {
          "type": "daily",
          "interval": 1,
          "month": 0,
          "dayOfMonth": 0,
          "firstDayOfWeek": "sunday",
          "index": "first"
        },
        "range": {
          "type": "endDate",
          "startDate": "2019-01-24",
          "endDate": "2020-01-23",
          "recurrenceTimeZone": "Pacific Standard Time",
          "numberOfOccurrences": 0
        }
      }
    }
    

    修改后获取实例

    请注意,开始/结束时间仍然正确移动。

    GET /me/events/{id}/instances?startDateTime=2019-03-09T00:00:00&endDateTime=2019-03-11T00:00:00&
    $select=originalStartTimeZone,originalEndTimeZone,start,end
    
    {
      "value": [
        {
          "id": "AAMkAGE1NWM...",
          "originalStartTimeZone": "Pacific Standard Time",
          "originalEndTimeZone": "Pacific Standard Time",
          "start": {
            "dateTime": "2019-03-09T22:00:00.0000000",
            "timeZone": "UTC"
          },
          "end": {
            "dateTime": "2019-03-09T22:30:00.0000000",
            "timeZone": "UTC"
          }
        },
        {
          "@odata.etag": "W/\"bReRxUIs3kGIyXXcVJg69AAANf7nZQ==\"",
          "id": "AAMkAGE1NWM...",
          "originalStartTimeZone": "Pacific Standard Time",
          "originalEndTimeZone": "Pacific Standard Time",
          "start": {
            "dateTime": "2019-03-10T21:00:00.0000000",
            "timeZone": "UTC"
          },
          "end": {
            "dateTime": "2019-03-10T21:30:00.0000000",
            "timeZone": "UTC"
          }
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 2020-10-02
      • 2020-09-16
      相关资源
      最近更新 更多