Can't update the names of event attendees using the Microsoft Graph API - microsoft-graph-api

The following has been tried using the Microsoft Graph API Graph Explorer to eliminate any third-party causes. There is an existing event in an Outlook calendar:
{
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('WWWW')/calendars('XXXX')/events/$entity",
"#odata.etag": "W/\"wIqdPsepnEOtI+GbtqRT1gAAElvUsQ==\"",
"id": "YYYY",
"createdDateTime": "2020-06-18T05:19:22.5766648Z",
"lastModifiedDateTime": "2020-06-18T17:17:23.3143899Z",
"changeKey": "wIqdPsepnEOtI+GbtqRT1gAAElvUsQ==",
"categories": [],
"originalStartTimeZone": "UTC",
"originalEndTimeZone": "UTC",
"iCalUId": "ZZZZ",
"reminderMinutesBeforeStart": 15,
"isReminderOn": false,
"hasAttachments": false,
"subject": "Review proposal",
"bodyPreview": "",
"importance": "normal",
"sensitivity": "normal",
"isAllDay": false,
"isCancelled": false,
"isOrganizer": true,
"responseRequested": true,
"seriesMasterId": null,
"showAs": "busy",
"type": "singleInstance",
"webLink": "https://outlook.office365.com/owa/?itemid=YYY&exvsurl=1&path=/calendar/item",
"onlineMeetingUrl": null,
"isOnlineMeeting": false,
"onlineMeetingProvider": "unknown",
"allowNewTimeProposals": true,
"recurrence": null,
"onlineMeeting": null,
"responseStatus": {
"response": "organizer",
"time": "0001-01-01T00:00:00Z"
},
"body": {
"contentType": "text",
"content": ""
},
"start": {
"dateTime": "2020-06-26T14:30:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2020-06-26T15:00:00.0000000",
"timeZone": "UTC"
},
"location": {
"displayName": "",
"locationType": "default",
"uniqueIdType": "unknown",
"address": {},
"coordinates": {}
},
"locations": [],
"attendees": [
{
"type": "required",
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"emailAddress": {
"name": "attendee#example.com",
"address": "attendee#example.com"
}
},
{
"type": "required",
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"emailAddress": {
"name": "Bob Smith",
"address": "organizer#example.com"
}
}
],
"organizer": {
"emailAddress": {
"name": "Bob Smith",
"address": "organizer#example.com"
}
}
}
The attendee's name was not known at the time the event was created. attendee#example.com was given which produced an attendee whose name and email address were both attendee#example.com. Later, the attendee's name became known. A patch request is sent to the organizer's calendar through Microsoft Graph API to update the event with the goal of overwriting the attendee's name, but leaving the email address as is.
{
"#odata.type": "#microsoft.graph.event",
"attendees": [{
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"type": "required",
"emailAddress": {
"address": "attendee#example.com",
"name": "Julie Williams"
}
}, {
"status": {
"response": "none"
},
"type": "required",
"emailAddress": {
"address": "organizer#example.com",
"name": "Bob Smith"
}
}],
"createdDateTime": "2020-06-18T05:19:22.5766648Z",
"end": {
"dateTime": "2020-06-26T15:00:00",
"timeZone": "UTC"
},
"iCalUId": "ZZZZ",
"id": "YYYY",
"importance": "normal",
"isOrganizer": true,
"lastModifiedDateTime": "2020-06-18T05:19:23.7881324Z",
"location": {},
"organizer": {
"emailAddress": {
"address": "organizer#example.com",
"name": "Bob Smith"
}
},
"originalEndTimeZone": "Eastern Standard Time",
"originalStartTimeZone": "Eastern Standard Time",
"reminderMinutesBeforeStart": 15,
"responseRequested": true,
"responseStatus": {
"response": "organizer",
"time": "0001-01-01T00:00:00Z"
},
"sensitivity": "normal",
"showAs": "busy",
"start": {
"dateTime": "2020-06-26T14:30:00",
"timeZone": "UTC"
},
"subject": "Review proposal",
"type": "singleInstance",
"webLink": "https://outlook.office365.com/owa/?itemid=YYYY&exvsurl=1&path=/calendar/item"
}
The response shows that the attendee's name did not change.
{
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('WWWW')/calendars('XXXX')/events/$entity",
"#odata.etag": "W/\"wIqdPsepnEOtI+GbtqRT1gAAElvUsQ==\"",
"id": "YYYY",
"createdDateTime": "2020-06-18T05:19:22.5766648Z",
"lastModifiedDateTime": "2020-06-18T17:17:23.3143899Z",
"changeKey": "wIqdPsepnEOtI+GbtqRT1gAAElvUsQ==",
"categories": [],
"originalStartTimeZone": "UTC",
"originalEndTimeZone": "UTC",
"iCalUId": "ZZZZ",
"reminderMinutesBeforeStart": 15,
"isReminderOn": false,
"hasAttachments": false,
"subject": "Review proposal",
"bodyPreview": "",
"importance": "normal",
"sensitivity": "normal",
"isAllDay": false,
"isCancelled": false,
"isOrganizer": true,
"responseRequested": true,
"seriesMasterId": null,
"showAs": "busy",
"type": "singleInstance",
"webLink": "https://outlook.office365.com/owa/?itemid=YYYY&exvsurl=1&path=/calendar/item",
"onlineMeetingUrl": null,
"isOnlineMeeting": false,
"onlineMeetingProvider": "unknown",
"allowNewTimeProposals": true,
"recurrence": null,
"onlineMeeting": null,
"responseStatus": {
"response": "organizer",
"time": "0001-01-01T00:00:00Z"
},
"body": {
"contentType": "text",
"content": ""
},
"start": {
"dateTime": "2020-06-26T14:30:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2020-06-26T15:00:00.0000000",
"timeZone": "UTC"
},
"location": {
"displayName": "",
"locationType": "default",
"uniqueIdType": "unknown",
"address": {},
"coordinates": {}
},
"locations": [],
"attendees": [
{
"type": "required",
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"emailAddress": {
"name": "attendee#example.com",
"address": "attendee#example.com"
}
},
{
"type": "required",
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"emailAddress": {
"name": "Bob Smith",
"address": "organizer#example.com"
}
}
],
"organizer": {
"emailAddress": {
"name": "Bob Smith",
"address": "organizer#example.com"
}
}
}
Should I expect the attendee's name to be updated? Is there another way to do it?

Related

Graph: Attendee automatically accepts event invitation

not sure what I'm doing wrong here. I wish to add a meeting with attendees into the organizer's calendar, then have the Exchange automatically send meeting invites to attendees. I want the attendees to be able to accept, decline, etc the invite as per the behaviour in Outlook, but my requests currently have the attendee automatically accept the invitation upon adding the event. Any idea what I'm doing wrong?
Request:
POST /users/{organizer#email.com}/events
{
"subject": "My Subject",
"start": {
"dateTime": "2021-10-10T12:00:00",
"timeZone": "Singapore Standard Time"
},
"end": {
"dateTime": "2021-10-10T14:00:00",
"timeZone": "Singapore Standard Time"
},
"responseRequested": true,
"attendees": [
{
"emailAddress": {
"address": "attendee#email.com",
"name": "Attendee"
},
"type": "required"
}
]
}
Response:
{
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(...)/events/$entity",
"#odata.etag": "..."",
"id": "AAMk...",
"createdDateTime": "...",
"lastModifiedDateTime": "...",
"changeKey": "...",
"categories": [],
"transactionId": null,
"originalStartTimeZone": "Singapore Standard Time",
"originalEndTimeZone": "Singapore Standard Time",
"iCalUId": "040000008200E00074C5B7101A82E008...",
"reminderMinutesBeforeStart": 15,
"isReminderOn": true,
"hasAttachments": false,
"subject": "My Subject",
"bodyPreview": "",
"importance": "normal",
"sensitivity": "normal",
"isAllDay": false,
"isCancelled": false,
"isOrganizer": true,
"responseRequested": true,
"seriesMasterId": null,
"showAs": "busy",
"type": "singleInstance",
"webLink": "...",
"onlineMeetingUrl": null,
"isOnlineMeeting": false,
"onlineMeetingProvider": "unknown",
"allowNewTimeProposals": true,
"isDraft": false,
"hideAttendees": false,
"recurrence": null,
"onlineMeeting": null,
"responseStatus": {
"response": "organizer",
"time": "0001-01-01T00:00:00Z"
},
"body": {
"contentType": "html",
"content": "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"Generator\" content=\"Microsoft Exchange Server\"><!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style></head><body><font size=\"2\"><span style=\"font-size:11pt;\"><div class=\"PlainText\"> </div></span></font></body></html>"
},
"start": {
"dateTime": "...",
"timeZone": "Singapore Standard Time"
},
"end": {
"dateTime": "...",
"timeZone": "Singapore Standard Time"
},
"location": {
"displayName": "",
"locationType": "default",
"uniqueIdType": "unknown",
"address": {},
"coordinates": {}
},
"locations": [],
"attendees": [
{
"type": "required",
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"emailAddress": {
"name": "Attendee",
"address": "attendee#email.com"
}
}
],
"organizer": {
"emailAddress": {
"name": "Organizer",
"address": "organizer#email.com"
}
}
}
It can happen in two cases.
Outlook automatically accepts all meeting requests on behalf of groups. You can accept, tentatively accept, or decline meeting requests for user calendars only.
The second case is that user set up Outlook to automatically accept meetings.
Check Outlook->File->Options->Calendar->Automatic accept or decline

Pull Request Lists and the set of approvers from BITBUCKET SERVER API

Is it possible to get the List of all pull request with the details like the date when it was raised, the Person who raised it and the list of all the approvers from the BITBUCKET SERVER using the REST APIs
Absolutely, You can fetch the list of Pull requests along with all the other details like who raised it, when it was raised and who are the reviewers using the following API,
https://docs.atlassian.com/bitbucket-server/rest/7.4.0/bitbucket-rest.html#idp285
You will have the following as response,
{
"size": 1,
"limit": 25,
"isLastPage": true,
"values": [
{
"id": 101,
"version": 1,
"title": "Talking Nerdy",
"description": "It’s a kludge, but put the tuple from the database in the cache.",
"state": "OPEN",
"open": true,
"closed": false,
"createdDate": 1359075920,
"updatedDate": 1359085920,
"fromRef": {
"id": "refs/heads/feature-ABC-123",
"repository": {
"slug": "my-repo",
"name": null,
"project": {
"key": "PRJ"
}
}
},
"toRef": {
"id": "refs/heads/master",
"repository": {
"slug": "my-repo",
"name": null,
"project": {
"key": "PRJ"
}
}
},
"locked": false,
"author": {
"user": {
"name": "tom",
"emailAddress": "tom#example.com",
"id": 115026,
"displayName": "Tom",
"active": true,
"slug": "tom",
"type": "NORMAL"
},
"role": "AUTHOR",
"approved": true,
"status": "APPROVED"
},
"reviewers": [
{
"user": {
"name": "jcitizen",
"emailAddress": "jane#example.com",
"id": 101,
"displayName": "Jane Citizen",
"active": true,
"slug": "jcitizen",
"type": "NORMAL"
},
"lastReviewedCommit": "7549846524f8aed2bd1c0249993ae1bf9d3c9998",
"role": "REVIEWER",
"approved": true,
"status": "APPROVED"
}
],
"participants": [
{
"user": {
"name": "dick",
"emailAddress": "dick#example.com",
"id": 3083181,
"displayName": "Dick",
"active": true,
"slug": "dick",
"type": "NORMAL"
},
"role": "PARTICIPANT",
"approved": false,
"status": "UNAPPROVED"
},
{
"user": {
"name": "harry",
"emailAddress": "harry#example.com",
"id": 99049120,
"displayName": "Harry",
"active": true,
"slug": "harry",
"type": "NORMAL"
},
"role": "PARTICIPANT",
"approved": true,
"status": "APPROVED"
}
],
"links": {
"self": [
{
"href": "http://link/to/pullrequest"
}
]
}
}
],
"start": 0 }

Getting specific event version via Event Message

We are trying to show all the event details about an event message, we are tracking multiple messages, some are eventMessage.
When trying to access the event relationship on the eventMessage we always get the same event for all messages in the conversation.
Therefore, the original event message shows the latest event properties (start and end time, location, etc.)
I've tried to use the Microsoft Graph Explorer to see if there is any way to get a specific event item by using the changeKey of the item itself.
Sadly, with no success.
For example, when trying to access all messages within a conversation by filtering with the conversation id and expanding the event relationship
GET https://graph.microsoft.com/v1.0/me/messages/?$filter=conversationId eq '<ConversationId>='&$expand=Microsoft.Graph.EventMessage/Event
We always get the same event for all messages.
{
"value": [
{
"#odata.type": "#microsoft.graph.eventMessage",
"#odata.etag": "W/\"<CHANGEKEY1>\"",
"id": "<MSGID1>",
"createdDateTime": "2019-05-26T15:48:46Z",
"lastModifiedDateTime": "2019-06-09T23:34:48Z",
"changeKey": "<CHANGEKEY1>",
"receivedDateTime": "2019-05-26T15:48:46Z",
"sentDateTime": "2019-05-26T15:48:44Z",
"event": {
"#odata.etag": "W/\"<EVENTCHANGEKEY>\"",
"id": "<EVENTID>",
"createdDateTime": "2019-05-26T15:48:46.2276944Z",
"lastModifiedDateTime": "2019-06-16T11:42:26.1599832Z",
"changeKey": "<EVENTCHANGEKEY>",
"categories": [],
"originalStartTimeZone": "Israel Standard Time",
"originalEndTimeZone": "Israel Standard Time",
"iCalUId": "<ICALUID>",
"reminderMinutesBeforeStart": 15,
"isReminderOn": false,
"hasAttachments": false,
"importance": "normal",
"sensitivity": "normal",
"isAllDay": false,
"isCancelled": false,
"isOrganizer": false,
"responseRequested": true,
"seriesMasterId": null,
"showAs": "tentative",
"type": "singleInstance",
"onlineMeetingUrl": null,
"recurrence": null,
"responseStatus": {
"response": "notResponded",
"time": "0001-01-01T00:00:00Z"
},
"start": {
"dateTime": "2019-06-11T09:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2019-06-11T09:30:00.0000000",
"timeZone": "UTC"
},
"location": {
"displayName": "טלפוני / במשרד",
"locationType": "default",
"uniqueId": "ff8323c6-c525-415a-be80-88de9c1bd53d",
"uniqueIdType": "locationStore"
},
"locations": [
{
"displayName": "טלפוני / במשרד",
"locationType": "default",
"uniqueId": "ff8323c6-c525-415a-be80-88de9c1bd53d",
"uniqueIdType": "locationStore"
}
]
}
},
{
"#odata.type": "#microsoft.graph.eventMessage",
"#odata.etag": "W/\"<CHANGEKEY2>\"",
"id": "<MSGID2>",
"createdDateTime": "2019-06-09T23:34:46Z",
"lastModifiedDateTime": "2019-06-17T10:00:07Z",
"changeKey": "<CHANGEKEY2>",
"receivedDateTime": "2019-06-09T23:34:47Z",
"sentDateTime": "2019-06-09T23:34:45Z",
"event": {
"#odata.etag": "W/\"<EVENTCHANGEKEY>\"",
"id": "<EVENTID>",
"createdDateTime": "2019-05-26T15:48:46.2276944Z",
"lastModifiedDateTime": "2019-06-16T11:42:26.1599832Z",
"changeKey": "<EVENTCHANGEKEY>",
"categories": [],
"originalStartTimeZone": "Israel Standard Time",
"originalEndTimeZone": "Israel Standard Time",
"iCalUId": "<ICALUID>",
"reminderMinutesBeforeStart": 15,
"isReminderOn": false,
"hasAttachments": false,
"importance": "normal",
"sensitivity": "normal",
"isAllDay": false,
"isCancelled": false,
"isOrganizer": false,
"responseRequested": true,
"seriesMasterId": null,
"showAs": "tentative",
"type": "singleInstance",
"onlineMeetingUrl": null,
"recurrence": null,
"responseStatus": {
"response": "notResponded",
"time": "0001-01-01T00:00:00Z"
},
"start": {
"dateTime": "2019-06-11T09:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2019-06-11T09:30:00.0000000",
"timeZone": "UTC"
},
"location": {
"displayName": "טלפוני / במשרד",
"locationType": "default",
"uniqueId": "ff8323c6-c525-415a-be80-88de9c1bd53d",
"uniqueIdType": "locationStore"
},
"locations": [
{
"displayName": "טלפוני / במשרד",
"locationType": "default",
"uniqueId": "ff8323c6-c525-415a-be80-88de9c1bd53d",
"uniqueIdType": "locationStore"
}
]
}
}
"#odata.etag": "W/\"CQAAABQAAAC5VJWM6fuTTIIUqGiAHWMQAAEwug==\"",
"id": "AAMkADliYjE5MWViLWNlMGQtNDliYy05YThkLWM4YWZiNzY2ODdlNwBGAAAAAAA5_Z03NIx3SqoeFwQnhSEiBwDt8lpmQG0nRYbMU6WI2FVeAAAAAAEPAADt8lpmQG0nRYbMU6WI2FVeAAFkUv4FAAA=",
"createdDateTime": "2019-06-17T10:31:28Z",
"lastModifiedDateTime": "2019-06-17T10:28:24Z",
"changeKey": "CQAAABQAAAC5VJWM6fuTTIIUqGiAHWMQAAEwug==",
"categories": [],
"receivedDateTime": "2019-06-17T10:31:26Z",
"sentDateTime": "2019-06-17T10:31:30Z",
"hasAttachments": true,
"internetMessageId": "<DB7PR03MB39784FB9DE2927C185428518CFEB0#DB7PR03MB3978.eurprd03.prod.outlook.com>",
"subject": "FW: Recruitment briefing before 8200 conference ",
"bodyPreview": "",
"importance": "normal",
"parentFolderId": "AAMkADliYjE5MWViLWNlMGQtNDliYy05YThkLWM4YWZiNzY2ODdlNwAuAAAAAAA5_Z03NIx3SqoeFwQnhSEiAQDt8lpmQG0nRYbMU6WI2FVeAAAAAAEPAAA=",
"conversationId": "<ConversationId>=",
"isDeliveryReceiptRequested": false,
"isReadReceiptRequested": false,
"isRead": false,
"isDraft": true,
"webLink": "https://outlook.office365.com/owa/?ItemID=AAMkADliYjE5MWViLWNlMGQtNDliYy05YThkLWM4YWZiNzY2ODdlNwBGAAAAAAA5%2BZ03NIx3SqoeFwQnhSEiBwDt8lpmQG0nRYbMU6WI2FVeAAAAAAEPAADt8lpmQG0nRYbMU6WI2FVeAAFkUv4FAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
"inferenceClassification": "focused",
"toRecipients": [],
"ccRecipients": [],
"bccRecipients": [],
"replyTo": [],
"flag": {
"flagStatus": "notFlagged"
}
}
]
}
We expected to get each eventMessage with its own "version" of the event itself.
In the provided case, the start and end time should have been changed.
When accessing the webUrl property, we get the expected result.
As shown in the web url:
Original Message
Updated Message

Can't create a all-day repeated via Graph API

According to the document, I try to use Graph API to create a all-day repeated event on my calendar, but the server always responses 400: TimeZoneNotSupportedException.
Is there any wrong in my request?
Here is my request and server response.
POST /me/calendars/${one_of_my_calendar_id}/events
Request body:
{
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('6cb879ad-1d01-4aed-bcc5-763e3f51c535')/events/$entity",
"#odata.etag": "W/\"BfXylo4WykyAenTZICXL5AABk4B1gA==\"",
"id": "AAMkADVmMzE2MjY0LTZkOGYtNGI4MS1iNWMxLTljYzg3MWY5MWQxMQBGAAAAAABZMfR36TVMQ6yunaqZPvVRBwAF9fKWjhbKTIB6dNkgJcvkAACB0WDVAAAF9fKWjhbKTIB6dNkgJcvkAAGTapeDAAA=",
"createdDateTime": "2019-03-07T10:25:29.5732546Z",
"lastModifiedDateTime": "2019-03-07T10:25:29.6573241Z",
"changeKey": "BfXylo4WykyAenTZICXL5AABk4B1gA==",
"categories": [],
"originalStartTimeZone": "UTC",
"originalEndTimeZone": "UTC",
"iCalUId": "040000008200E00074C5B7101A82E00800000000FB7128DC464BD4010000000000000000100000006176917542798940B4FDBBFBA5B474A6",
"reminderMinutesBeforeStart": 0,
"isReminderOn": false,
"hasAttachments": false,
"subject": "Repeat-",
"bodyPreview": "",
"importance": "normal",
"sensitivity": "normal",
"isAllDay": true,
"isCancelled": false,
"isOrganizer": true,
"responseRequested": false,
"seriesMasterId": null,
"showAs": "free",
"type": "seriesMaster",
"webLink": "https://outlook.office365.com/owa/?itemid=AAMkADVmMzE2MjY0LTZkOGYtNGI4MS1iNWMxLTljYzg3MWY5MWQxMQBGAAAAAABZMfR36TVMQ6yunaqZPvVRBwAF9fKWjhbKTIB6dNkgJcvkAACB0WDVAAAF9fKWjhbKTIB6dNkgJcvkAAGTapeDAAA%3D&exvsurl=1&path=/calendar/item",
"onlineMeetingUrl": null,
"responseStatus": {
"response": "organizer",
"time": "0001-01-01T00:00:00Z"
},
"body": {
"contentType": "html",
"content": "<html><head><meta name=\"Generator\" content=\"Microsoft Exchange Server\">\r\n<!-- converted from text
-->\r\n<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; }
--></style></head>\r\n<body>\r\n<font size=\"2\"><span style=\"font-size:11pt;\"><div class=\"PlainText\"> </div></span></font>\r\n</body>\r\n</html>\r\n"
},
"start": {
"dateTime": "2018-09-25T00:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2018-09-26T00:00:00.0000000",
"timeZone": "UTC"
},
"location": {
"displayName": "",
"locationType": "default",
"uniqueIdType": "unknown",
"address": {},
"coordinates": {}
},
"locations": [],
"recurrence": {
"pattern": {
"type": "weekly",
"interval": 1,
"month": 0,
"dayOfMonth": 0,
"daysOfWeek": [
"tuesday"
],
"firstDayOfWeek": "monday",
"index": "first"
},
"range": {
"type": "endDate",
"startDate": "2018-09-25",
"endDate": "2019-03-12",
"recurrenceTimeZone": "",
"numberOfOccurrences": 0
}
},
"attendees": [],
"organizer": {
"emailAddress": {
"name": "MYNAME",
"address": "MYNAME#MYMAIL.com"
}
} }
Server response:
http code: 400
{
"error": {
"code": "TimeZoneNotSupportedException",
"message": "A valid TimeZone value must be specified. The following TimeZone value is not supported: ''.",
"innerError": {
"request-id": "4833ea1a-3371-4d3e-b28e-193fec18f723",
"date": "2019-03-07T11:01:36"
}
}
}
You're posting the entire object, including several read-only properties. This will always result in a failure of some kind.
When working with Microsoft Graph (most any REST API actually), you should only submit the properties you want to set:
{
"subject": "Repeat-",
"isAllDay": true,
"isReminderOn": false,
"showAs": "free",
"body": {
"contentType": "html",
"content": "<html><head><meta name=\"Generator\" content=\"Microsoft Exchange Server\">\r\n<!-- converted from text\r\n<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; }</style></head>\r\n<body>\r\n<font size=\"2\"><span style=\"font-size:11pt;\"><div class=\"PlainText\"> </div></span></font>\r\n</body>\r\n</html>\r\n"
},
"recurrence": {
"pattern": {
"type": "weekly",
"interval": 1,
"daysOfWeek": ["Tuesday"]
},
"range": {
"type": "endDate",
"startDate": "2018-09-25",
"endDate": "2019-03-12"
}
}
}
After I remove the 'recurrenceTimeZone' from the recurrence/range value, the server responses 200 OK and the new event is be created successfully.
It seems that the recurrenceTimeZone shouldn't be an invalid timezone value.

Microsoft Graph delta: recurring calendar events returning incorrect start/end

I have an app that loads calendar items into a database, and needs to stay in sync with the given user's calendar. Unfortunately, when querying Microsoft Graph for a given date range using Delta tokens, the original event's data is being returned. However, if the Delta call is removed from the query, recurring events are returned as expected.
The call without 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
Returns:
{
"#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"
}
}
However, when trying to add the "delta" call to the request using the same start/end dates, the event's ORIGINAL dates (and Id) are returned. Additionally, the SELECT columns are ignored, entirely.
The call with Delta:
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
Returns:
{
"#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"
}
}
},
Can anyone tell me how can I get the Delta query to return the recurring event's instance, as opposed to the "seriesMaster"?
Ah, I figured it out! The delta returns the seriesMaster, but also returns the instance details (occurrence) at the end. My bad for leaving it out of the results in the original post.
The missing link:
{
"#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"
}
},
Note that the "type" = "occurrence", and the "seriesMasterId" points back to the seriesMaster's Id field. This contains the correct start/end information for the event.

Resources