通过 Graph API 更新递归会议的结束日期无效
Updating the end date of a recursive meeting via Graph API not working
我目前正在使用 Office Graph API 来处理用户日历会议。
如果使用“/subscriptions”请求创建、更新和删除事件,我已订阅接收通知!
我的用户使用的是里斯本时区(夏季 = UTC+1,冬季 = UTC)
当用户在 Office 365 中创建活动时,在我的应用程序方面,如果该活动是没有结束日期的递归会议,我会更新(通过图表 API)会议,以便它有一个结束日期。 [注意:我的申请规则之一是任何会议都不能超过 365 天。]
问题:该系列缩小到我通过 API 更新的结束日期,但时间留下了错误的时区。我已经尝试请求不带时区的 API 并且我已经请求使用时区 UTC 和时区 UTC +1 进行更新,但我总是遇到同样的问题。 office这边,经过我的更新,开会时间少了一个小时
下图是一个系列的例子,没有结束范围:
我在更新前获取了一些 child 会议,它是正确的。在葡萄牙,时间更改日是 2019-03-30,因此第 30 天从 10h00 UTC 开始,第 31 天 09:00 UTC:
在这里,我向 Office 365 发送请求以更新重复结束(结束日期):
发送更新请求后,我获取相同的 children 并且 2019-03-30 和 2019-03-31 都从 10h00 开始。
更新客户端日历后,会议的开始和结束时间有误:
我已经尝试在 Graph API recurrenctTImeZone: UTC, GMT Standard Time 字段中输入任何内容,我总是有相同的 return。我无法解决这个问题。
你知道哪里出了问题吗?
您实际上可以在请求的 header 中使用它
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
我不会在太平洋标准时区或 GMT 标准时区的用户中重现此行为。为清楚起见,我正在使用 Postman 进行所有测试,并且我没有使用 Jeremy 上面指出的 Prefer: outlook.timezone
header。
我在太平洋时间下午 2 点为用户创建了一个每天没有结束的约会,即 22:00 UTC。另请注意,DST 在 3 月 10 日在该时区开始。如下所示,更新前后实例上的时间都是正确的。
我还为 GMT 标准时区中的用户重复了相同的事件序列(在 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
}
}
}
修改前获取实例
注意 start/end 次的偏移。
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
}
}
}
修改后获取实例
请注意 start/end 时间仍然正确移动。
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"
}
}
]
}
在多次尝试解决后,我得以与 Office 365 开发团队交谈,并对负面反馈感到惊讶。
他们指出,在这种特定情况下,Microsoft API Graph 中实际上存在一个未知错误,并且他们不保证解决此错误!
他们的建议是我们只针对这种情况使用Outlook Calendar API Rest API。
总之,由于 Microsoft 已经假设了这个未知错误,我将不得不在我的平台中实现 2 个不同的 API:Microsoft 当前推荐的 Microsoft Graph API,以及 Outlook Calendar Rest API 因为这个错误。
Outlook 日历API 休息解决方案:
- 创建一个没有结束日期的重复事件
- 检索日历视图
- 获取事件的重复发生
- 更新活动
- 更新后检索日历视图
我目前正在使用 Office Graph API 来处理用户日历会议。 如果使用“/subscriptions”请求创建、更新和删除事件,我已订阅接收通知! 我的用户使用的是里斯本时区(夏季 = UTC+1,冬季 = UTC)
当用户在 Office 365 中创建活动时,在我的应用程序方面,如果该活动是没有结束日期的递归会议,我会更新(通过图表 API)会议,以便它有一个结束日期。 [注意:我的申请规则之一是任何会议都不能超过 365 天。]
问题:该系列缩小到我通过 API 更新的结束日期,但时间留下了错误的时区。我已经尝试请求不带时区的 API 并且我已经请求使用时区 UTC 和时区 UTC +1 进行更新,但我总是遇到同样的问题。 office这边,经过我的更新,开会时间少了一个小时
下图是一个系列的例子,没有结束范围:
我在更新前获取了一些 child 会议,它是正确的。在葡萄牙,时间更改日是 2019-03-30,因此第 30 天从 10h00 UTC 开始,第 31 天 09:00 UTC:
在这里,我向 Office 365 发送请求以更新重复结束(结束日期):
发送更新请求后,我获取相同的 children 并且 2019-03-30 和 2019-03-31 都从 10h00 开始。 更新客户端日历后,会议的开始和结束时间有误:
我已经尝试在 Graph API recurrenctTImeZone: UTC, GMT Standard Time 字段中输入任何内容,我总是有相同的 return。我无法解决这个问题。
你知道哪里出了问题吗?
您实际上可以在请求的 header 中使用它
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
我不会在太平洋标准时区或 GMT 标准时区的用户中重现此行为。为清楚起见,我正在使用 Postman 进行所有测试,并且我没有使用 Jeremy 上面指出的 Prefer: outlook.timezone
header。
我在太平洋时间下午 2 点为用户创建了一个每天没有结束的约会,即 22:00 UTC。另请注意,DST 在 3 月 10 日在该时区开始。如下所示,更新前后实例上的时间都是正确的。
我还为 GMT 标准时区中的用户重复了相同的事件序列(在 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
}
}
}
修改前获取实例
注意 start/end 次的偏移。
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
}
}
}
修改后获取实例
请注意 start/end 时间仍然正确移动。
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"
}
}
]
}
在多次尝试解决后,我得以与 Office 365 开发团队交谈,并对负面反馈感到惊讶。
他们指出,在这种特定情况下,Microsoft API Graph 中实际上存在一个未知错误,并且他们不保证解决此错误!
他们的建议是我们只针对这种情况使用Outlook Calendar API Rest API。 总之,由于 Microsoft 已经假设了这个未知错误,我将不得不在我的平台中实现 2 个不同的 API:Microsoft 当前推荐的 Microsoft Graph API,以及 Outlook Calendar Rest API 因为这个错误。
Outlook 日历API 休息解决方案:
- 创建一个没有结束日期的重复事件
- 检索日历视图
- 获取事件的重复发生
- 更新活动
- 更新后检索日历视图