通过Graph API更新递归会议的结束日期不起作用

时间:2019-01-22 15:35:55

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

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

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

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

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

enter image description here

我在更新之前获取了一些子会议,这是正确的。在葡萄牙,时间更改日期为2019-03-30,因此第30天开始于世界标准时间10h00,第31天开始于09:00 UTC:

enter image description here

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

enter image description here

发送更新请求后,我获取了相同的子代,并且2019-03-30和2019-03-31的日期都从10h00开始。 在客户日历中进行此更新之后,会议的开始和结束时间有误:

enter image description here

我已经尝试过在Graph API recurrenctTImeZone(UTC,格林尼治标准时间)中输入Graph API,并且根本不输入任何内容,而且我总是得到相同的回报。我不能解决这个问题。

您知道什么地方可能出问题吗?

3 个答案:

答案 0 :(得分:2)

经过几次尝试解决后,我能够与Office 365开发团队进行交谈,并对负面反馈感到惊讶。

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

他们的建议是,仅在这种情况下使用Outlook Calendar API Rest API。 总之,由于Microsoft已经承担了这个未知错误,因此我必须在平台中实现2种不同的API:Microsoft当前推荐的Microsoft Graph API和由于此bug而导致的Outlook Calendar Rest API。

Outlook Calendar API Rest解决方案:

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

enter image description here

  1. 检索日历视图

enter image description here

  1. 获取事件的重复发生

enter image description here

  1. 更新事件

enter image description here

  1. 更新后检索日历视图

enter image description here

答案 1 :(得分:0)

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

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

上提供了有关此文档的更多文档

答案 2 :(得分:0)

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

我在太平洋标准时间2PM(即世界标准时间22:00)为用户创建了每日无休止约会。还要注意,DST在3月10日的这个时区开始。如下所示,更新前后实例上的时间都是正确的。

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

OOW config

我为此用户获得了完全相同的结果。

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

在Web上的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"
      }
    }
  ]
}