【发布时间】:2018-06-29 01:07:28
【问题描述】:
我有一个应用程序将日历项加载到数据库中,并且需要与给定用户的日历保持同步。不幸的是,当使用 Delta 令牌查询给定日期范围的 Microsoft Graph 时,将返回原始事件的数据。但是,如果从查询中删除 Delta 调用,则会按预期返回重复事件。
没有 Delta 的调用:
https://graph.microsoft.com/v1.0/me/calendarView?startDateTime=2018-06-26T00:00:00&endDateTime=2018-06-27T00:00:00&$select=id,subject,start,end
返回:
{ "@odata.etag": "W/\"vDPrV1TQYUmam8nxPycXGwABJbtmSQ==\"", "id": "AAMkADZhMjA2YTNmLTM0NDktNDYyNy05Njk2LTRjNThhMDZkZDBmOQFRAAgI1dr3wqKAAEYAAAAAY_l4isQ6OkOWdkEvK3rrDQcAvDPrV1TQYUmam8nxPycXGwAAAAABDQAAvDPrV1TQYUmam8nxPycXGwAAAtcOVAAAEA==", "subject": "Daily recurring event", "start": { "dateTime": "2018-06-26T14:30:00.0000000", "timeZone": "UTC" }, "end": { "dateTime": "2018-06-26T14:45:00.0000000", "timeZone": "UTC" } }
但是,当尝试使用相同的开始/结束日期向请求添加“delta”调用时,会返回事件的原始日期(和 Id)。此外,SELECT 列被完全忽略。
与达美的通话:
https://graph.microsoft.com/v1.0/me/calendarView/delta?startDateTime=2018-06-26T00:00:00&endDateTime=2018-06-27T00:00:00&$select=id,subject,start,end
返回:
{ "@odata.type": "#microsoft.graph.event", "@odata.etag": "W/\"vDPrV1TQYUmam8nxPycXGwABJbtmSQ==\"", "createdDateTime": "2017-04-19T15:02:38.8680605Z", "lastModifiedDateTime": "2018-06-25T14:15:14.2194888Z", "changeKey": "vDPrV1TQYUmam8nxPycXGwABJbtmSQ==", "categories": [], "originalStartTimeZone": "Eastern Standard Time", "originalEndTimeZone": "Eastern Standard Time", "iCalUId": "040000008200E00074C5B7101A82E0080000000050B9E76D2CF2D001000000000000000010000000831C6E0657580F44A0799E55EB5F2E49", "reminderMinutesBeforeStart": 15, "isReminderOn": true, "hasAttachments": false, "subject": "Daily recurring event", "bodyPreview": "", "importance": "normal", "sensitivity": "normal", "isAllDay": false, "isCancelled": false, "isOrganizer": false, "responseRequested": true, "seriesMasterId": null, "showAs": "busy", "type": "seriesMaster", ... "id": "AAMkADZhMjA2YTNmLTM0NDktNDYyNy05Njk2LTRjNThhMDZkZDBmOQBGAAAAAABj6XiKxDo6Q5Z2QS8reusNBwC8M_tXVNBhSZqbyfE-JxcbAAAAAAENAAC8M_tXVNBhSZqbyfE-JxcbAAAC1w5UAAA=", "responseStatus": { "response": "accepted", "time": "2017-04-19T15:02:00Z" }, "body": { "contentType": "html", "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta name=\"Generator\" content=\"Microsoft Exchange Server\">\r\n<!-- converted from rtf -->\r\n<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>\r\n</head>\r\n<body>\r\n<font face=\"Calibri\" size=\"2\"><span style=\"font-size:11pt;\">\r\n<div> </div>\r\n<div> </div>\r\n</span></font>\r\n</body>\r\n</html>\r\n" }, "start": { "dateTime": "2015-09-22T14:30:00.0000000", "timeZone": "UTC" }, "end": { "dateTime": "2015-09-22T14:45:00.0000000", "timeZone": "UTC" }, "location": { "displayName": "on your feet", "locationType": "default", "uniqueId": "on your feet", "uniqueIdType": "private" }, "locations": [ { "displayName": "on your feet", "locationType": "default", "uniqueId": "on your feet", "uniqueIdType": "private" } ], "recurrence": { "pattern": { "type": "weekly", "interval": 1, "month": 0, "dayOfMonth": 0, "daysOfWeek": [ "monday", "tuesday", "wednesday", "thursday", "friday" ], "firstDayOfWeek": "sunday", "index": "first" }, "range": { "type": "noEnd", "startDate": "2015-09-22", "endDate": "0001-01-01", "recurrenceTimeZone": "Eastern Standard Time", "numberOfOccurrences": 0 } }, "attendees": [ { "type": "required", "status": { "response": "none", "time": "0001-01-01T00:00:00Z" }, "emailAddress": { "name": "Nunya Biz", "address": "biz@markie.com" } } ], "organizer": { "emailAddress": { "name": "Nunya Biz", "address": "biz@markie.com" } } },
谁能告诉我如何让 Delta 查询返回重复事件的实例,而不是“seriesMaster”?
【问题讨论】:
-
增量查询不支持选择(请参阅doc)。 Normaly delta 查询应该返回重复事件的发生和异常。我测试了它,它似乎仍然像那样工作。也许您指定的时间间隔内没有发生(startDateTime=2018-06-26T00:00:00&endDateTime=2018-06-27T00:00:00)。这只是一天,您的 seriesMaster 包含“每周”的重复模式类型。
-
感谢@MichaelHufnagel 的回复。重复模式是每周,但包括每个工作日(周一 - 周五),因此它每天都会显示。最大的问题是返回的开始日期时间是“2015-09-22T14:30:00.0000000”,这绝对不在范围内。
-
为了进一步澄清,结果(上图)是请求返回的数据,所以它肯定“找到”了一个重复的事件,它会返回。主要问题是它似乎正在返回原始事件,而不是实际展开的重复事件。删除 delta 调用时,您可以看到它正确地返回了事件,开始/结束日期时间在范围内,并且 Id 不同。另外,感谢不支持“选择”的输入;这很有帮助。