Why doesn't my shared calendar event show the updated attendee response statuses in Office365? - outlook

If I create a calendar in Office365 and share it with user A, then create an event on that calendar with user A as an attendee, user A's response status is never reflected on the shared event. It always just says, "user A didn't respond." on my calendar. Even when viewing the shared event from user A's calendar, it says "You didn't respond."
For example:
I create an event on a shared calendar and add user A as an attendee
User A sees two calendar events, one on their default calendar and one on the shared calendar
User A declines the event on their default calendar (they have no response options on the shared calendar event)
The event on User A's default calendar disappears. The event on the shared calendar, as seen by User A does not show their response status
The event as seen on my calendar also does not show User A's response status
This happens regardless of the level of permission that User A has on the shared calendar. Even in the case where the calendar isn't shared with User A at all (they only see the event on their default calendar), their response status never shows on the shared calendar event.

Related

Organizer does not receive email notification when attendee declines the event

We use a service account to authenticate google calendar and programmatically create calendars and appointment events. However, when a customer declines an event, there's no notification whatsoever of the decline and we cannot find any email regarding the decline in the admin or organizer's email inbox. is it because the service account is a dummy user? How can we get the organizer to be tied to an actual email account so people can get notification of the response status of the attendee?
We tried
create the calendar and event programmatically, attendee declines, no notification (despite setSendNotification("all") in the API call)
create the calendar and event programmatically, move the organizer to a different calendar (new organizer), attendee declines, no notification for the new organizer (despite setSendNotification("all") in the API call)
update code
googleAPIHelper.executeWithThrottling(service.events().update(calendarId, remoteEvent.getId(), remoteEvent).setSendUpdates("all"), Event.class);
insert code
googleAPIHelper.executeWithThrottling(service.events().insert(calendarId, eventToInsert).setSendUpdates("all"), Event.class);
move organizer code
googleAPIHelper.executeWithThrottling(service.events().move(calendarId, remoteEvent.getId(), destinationCalendarId), Event.class);
As it turned out, for each calendar the organizer owns (found in "Other Calendars"), we have to toggle the "Other notifications" settings to receive an email (i.e. Event responses). The default is set to "None."
E.g.
See also: https://www.youtube.com/watch?v=wgbpsm82AaY

Event created on delegate calendar via EWS is not visible to the delegated user

I have 2 outlook users. Consider A & B. A has calendar (a) and B has calendar (b).
User B has given user A delegate access to calendar (b).
Now, using EWS API, when user A is creating event on calendar (b), the event is visible to user B only.
The same is not true for Microsoft Graph. If user A is creating event in calendar (b) then the event is visible to both the users.
I am not sure if it is the expected behavior or it's an issue.
Now, using EWS API, when user A is creating event on calendar (b), the event is visible to user B only.
What do you mean by Event is this an appointment or Meeting, if its a meeting you should be creating it in the organizers calendar A and inviting B, if its an appointment then if you want it to exist in both calendar then you will need to create it in both. Mailboxes are the boundaries so all your doing in both instance is creating an object in one store for it to be in the other store you need to either send and Invitation and have that accepted or create the object itself in both stores. What your seeing is the expected behavior (and what you would see if you just did it manually in Outlook or OWA)

Receiving Change Notifications From another user's Calendar

ENVIORNMENT
Outlook Desktop (Office 365);
Exchange Server;
Azure Cloud
INITIAL CONDITIONS
USER_A is USER_B's assistant and manages USER_B's calendar (Outlook Shared Calendar). We would like to track the changes in USER_B's calendar. In Outlook/Exchange speak, USER_A is a delegate of USER_B.
GOAL
When certain Outlook Calendar Items are modified, we'd like to call a Function App which will update a database. The calendar could be a Shared Calendar, but not necessarily a shared Calendar.
USE CASE
USER_B is not logged in, but USER_A creates an appointment in USER_B's calendar.
Even though USER_B is not logged in, we'd like to capture the change made by USER_A and update our database. In other words, a change notification should fire for the shared calendar, even though the owner of that calendar is not logged in.
QUESTION
Does the Function App need "App" level permissions to do this?
Would the code look something like:
POST https://graph.microsoft.com/v1.0/subscriptions
Content-type: application/json
{
"changeType": "created",
"notificationUrl": "https://webhook.azurewebsites.net/api/send/UpdateDataBase",
"resource": "users/{a-user-id}/events",
"expirationDateTime":"2020-10-20T19:23:45.9376913Z",
"clientState": "bigSecret",
"latestSupportedTlsVersion": "v3"
}
In order to get change notification in shared calendars, "Application" level permissions are required.
I found this here How to subscribe calendar event if calendar is given delegated permission using ms-graph api

Exchange EWS ErrorCalendarIsNotOrganizer despite being the organizer

I'm trying to cancel a meeting I created by using an EWS XML CreateItem request (against a 2013 server):
<ns2:CreateItem MessageDisposition="SendAndSaveCopy"><ns2:Items>
<ns1:CancelCalendarItem>
<ns1:ReferenceItemId Id="AAMkA...." ChangeKey="DwAAA..."/>
</ns1:CancelCalendarItem>
</ns2:Items></ns2:CreateItem>
So far so good, however Outlook denies me access with the ResponseCode "ErrorCalendarIsNotOrganizer" / "User must be an organizer for CancelCalendarItem action".
A look in the event detail by using GetItem with BaseShape=ALL_PROPERTIES reveals that the account I use is set as Organizer, however at the same time:
the IsOrganizer field is set to false
in EffectiveRights the fields Read, Modify and Delete are true.
I can delete the appointment lateron using a DeleteItem request and it works, however it only removes the appointment from the room's calendar but not from the mailboxes of the attendees.
What causes this? There is no impersonation in use, only the service account I use has delegation access to every room mailbox (to be able to see all appointments).
I can delete the appointment lateron using a DeleteItem request and it works, however it only removes the appointment from the room's calendar but not from the mailboxes of the attendees.
It sounds like your accessing the appointment in the Room Mailboxes calendar ? this is why even if your using the account that is the organizer of that appointment the isOrganizer will return as false because this property is only true on the copy of the Appointment in the Organizers calendar. To correctly cancel the meeting you need to do that on the calendar of the Organizer (not the rooms or any attendee instance of the meeting). This will still only delete the appointment in the organizer calendar and send cancellation messages to the attendees.
An important point is that all instances of the meeting stored in the Attendees and Meeting Room calendars are separate Exchange Store items with no direct link. So deleting the organizer instance (or any attendee instance) has no affect on the other attendees instances these must be processed separately by the attendees themselves based on the cancellation message that is received.

Google Calendar Resource: How to get calendar ID from event instance?

If you list Google Calendar events using this API or particular event using this API specifying Calendar Resource room ID instead of calendar ID, you get list of all events associated to that Calendar Resource.
If you then want to delete or modify that event using domain-wide delegation of authority you can get event owner form creator.email field.
The question is how to get calendar ID where the event is created to be able to delete or modify it?
Of course you can try to use creator's e-mail or primary for the calendar ID but this fails if the user created the event in any other than default calendar.

Resources