【问题标题】:Microsoft Graph delta: recurring calendar events returning incorrect start/endMicrosoft Graph delta:重复的日历事件返回不正确的开始/结束
【发布时间】: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>&nbsp;</div>\r\n<div>&nbsp;</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 不同。另外,感谢不支持“选择”的输入;这很有帮助。

标签: microsoft-graph-api


【解决方案1】:

啊,我想通了! delta 返回seriesMaster,但最后还返回实例详细信息(发生)。将它从原始帖子的结果中排除在外是我的坏事。

缺少的链接:

    {
        "@odata.type": "#microsoft.graph.event",
        "@odata.etag": "W/\"DwAAABYAAAC8M+tXVNBhSZqbyfE/JxcbAAElu2ZJ\"",
        "seriesMasterId": "AAMkADZhMjA2YTNmLTM0NDktNDYyNy05Njk2LTRjNThhMDZkZDBmOQBGAAAAAABj6XiKxDo6Q5Z2QS8reusNBwC8M_tXVNBhSZqbyfE-JxcbAAAAAAENAAC8M_tXVNBhSZqbyfE-JxcbAAAC1w5UAAA=",
        "type": "occurrence",
        "id": "AAMkADZhMjA2YTNmLTM0NDktNDYyNy05Njk2LTRjNThhMDZkZDBmOQFRAAgI1dr3wqKAAEYAAAAAY_l4isQ6OkOWdkEvK3rrDQcAvDPrV1TQYUmam8nxPycXGwAAAAABDQAAvDPrV1TQYUmam8nxPycXGwAAAtcOVAAAEA==",
        "start": {
            "dateTime": "2018-06-26T14:30:00.0000000",
            "timeZone": "UTC"
        },
        "end": {
            "dateTime": "2018-06-26T14:45:00.0000000",
            "timeZone": "UTC"
        }
    },

注意“type”=“occurrence”,而“seriesMasterId”又指向seriesMaster的Id字段。这包含事件的正确开始/结束信息。

【讨论】:

  • 是否列出了被删除的事件?
  • 嗨,我真的不记得了,但我相信很清楚/很容易弄清楚哪些被删除了。
  • 当我删除一个事件发生时,它只是从增量查询列出的事件中删除。无法识别删除的事件。
  • 非常有趣。我认为它在最底部列出了删除。我希望我仍然有这个代码库可以工作(我不再在那家公司工作),所以我可以检查一下。如果你愿意,你可以发布完整的回复,我会看看我是否能看到任何东西,但已经有一段时间了。
  • 无法发布我的回复,因为它太长了。除已删除的日期外,正在显示事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多