I noticed the following behavior for recurring events with reminders:
- If a reminder for an occurrence is dismissed the ReminderIsSet property remains true and the ReminderDueBy property is set to the date/time of the next occurrence
- When the last occurrence reminder has been dismissed ReminderIsSet still remains true and the ReminderDueBy property keeps the date/time of the last occurrence
- If the last occurrence reminder is not dismissed the same happens
In that last case, in a user interface like Outlook Web Access (OWA), there is an indicator of a pending reminder:
How does Exchange, and how can I, distinguish the last two cases? How can I know that the reminder for that last occurrence was not dismissed yet?
Below is the SOAP testdata that I see querying Exchange Web Services (EWS) for two recurring appointments. They have subjects App A
and App B
, both were set to repeat 7 and 8 March at 12:20-12:50 CET with a 10 minute reminder:
On 8 March (=last occurrence), I dismissed the reminder for App A
at 12:12, but did nothing with the reminder for App B
.
If I then do GetItem calls (with BaseShape AllProperties) for both occurrences I see differences in the lines marked * at the start below. I have no idea how to conclude from this that App B
still has a pending reminder. What am I missing?
Appointment A
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="1104" MinorBuildNumber="3" Version="V2_22" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:GetItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:Items>
<t:CalendarItem>
*ChangeKey <t:ItemId Id="AAMkAG[snip]AAAEA==" ChangeKey="DwAAABYAAACuuv05CWNWTKnqziXALsXrAACJ2zpT"/>
<t:ParentFolderId Id="AQMkA[snip]AAAA=" ChangeKey="AQAAAA=="/>
<t:ItemClass>IPM.Appointment.Occurrence</t:ItemClass>
* <t:Subject>App A</t:Subject>
<t:Sensitivity>Normal</t:Sensitivity>
<t:Body BodyType="Text"/>
* <t:DateTimeReceived>2016-03-08T11:06:34Z</t:DateTimeReceived>
* <t:Size>5243</t:Size>
<t:Importance>Normal</t:Importance>
<t:IsSubmitted>false</t:IsSubmitted>
<t:IsDraft>false</t:IsDraft>
<t:IsFromMe>false</t:IsFromMe>
<t:IsResend>false</t:IsResend>
<t:IsUnmodified>false</t:IsUnmodified>
* <t:DateTimeSent>2016-03-08T11:06:34Z</t:DateTimeSent>
* <t:DateTimeCreated>2016-03-08T11:06:33Z</t:DateTimeCreated>
<t:ResponseObjects>
<t:ForwardItem/>
</t:ResponseObjects>
<t:ReminderDueBy>2016-03-08T11:20:00Z</t:ReminderDueBy>
<t:ReminderIsSet>true</t:ReminderIsSet>
<t:ReminderMinutesBeforeStart>10</t:ReminderMinutesBeforeStart>
<t:DisplayCc/>
<t:DisplayTo/>
<t:HasAttachments>false</t:HasAttachments>
<t:Culture>nl-NL</t:Culture>
<t:EffectiveRights>
<t:CreateAssociated>false</t:CreateAssociated>
<t:CreateContents>false</t:CreateContents>
<t:CreateHierarchy>false</t:CreateHierarchy>
<t:Delete>true</t:Delete>
<t:Modify>true</t:Modify>
<t:Read>true</t:Read>
</t:EffectiveRights>
<t:LastModifiedName>Wendy Bakkertje</t:LastModifiedName>
* <t:LastModifiedTime>2016-03-08T11:11:56Z</t:LastModifiedTime>
<t:UID>040000[snip]CAFE1</t:UID>
<t:RecurrenceId>2016-03-08T11:20:00Z</t:RecurrenceId>
* <t:DateTimeStamp>2016-03-08T11:11:56Z</t:DateTimeStamp>
<t:Start>2016-03-08T11:20:00Z</t:Start>
<t:End>2016-03-08T11:50:00Z</t:End>
<t:OriginalStart>2016-03-08T11:20:00Z</t:OriginalStart>
<t:IsAllDayEvent>false</t:IsAllDayEvent>
<t:LegacyFreeBusyStatus>Busy</t:LegacyFreeBusyStatus>
<t:Location/>
<t:IsMeeting>false</t:IsMeeting>
<t:IsCancelled>false</t:IsCancelled>
<t:IsRecurring>true</t:IsRecurring>
<t:MeetingRequestWasSent>false</t:MeetingRequestWasSent>
<t:IsResponseRequested>true</t:IsResponseRequested>
<t:CalendarItemType>Occurrence</t:CalendarItemType>
<t:MyResponseType>Organizer</t:MyResponseType>
<t:Organizer>
<t:Mailbox>
<t:Name>Wendy Bakkertje</t:Name>
<t:EmailAddress>[email protected]</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Organizer>
<t:Duration>PT30M</t:Duration>
<t:TimeZone>(UTC+01:00) Amsterdam, Berlijn, Bern, Rome, Stockholm, Wenen</t:TimeZone>
<t:AppointmentSequenceNumber>0</t:AppointmentSequenceNumber>
<t:AppointmentState>0</t:AppointmentState>
</t:CalendarItem>
</m:Items>
</m:GetItemResponseMessage>
</m:ResponseMessages>
</m:GetItemResponse>
</s:Body>
</s:Envelope>
Appointment B
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="1104" MinorBuildNumber="3" Version="V2_22" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:GetItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:Items>
<t:CalendarItem>
*ChangeKey <t:ItemId Id="AAMkAG[snip]t6QAAEA==" ChangeKey="DwAAABYAAACuuv05CWNWTKnqziXALsXrAACJ2zpS"/>
<t:ParentFolderId Id="AQMkAG[snip]AAAA=" ChangeKey="AQAAAA=="/>
<t:ItemClass>IPM.Appointment.Occurrence</t:ItemClass>
* <t:Subject>App B</t:Subject>
<t:Sensitivity>Normal</t:Sensitivity>
<t:Body BodyType="Text"/>
* <t:DateTimeReceived>2016-03-08T11:07:08Z</t:DateTimeReceived>
* <t:Size>5469</t:Size>
<t:Importance>Normal</t:Importance>
<t:IsSubmitted>false</t:IsSubmitted>
<t:IsDraft>false</t:IsDraft>
<t:IsFromMe>false</t:IsFromMe>
<t:IsResend>false</t:IsResend>
<t:IsUnmodified>false</t:IsUnmodified>
* <t:DateTimeSent>2016-03-08T11:07:08Z</t:DateTimeSent>
* <t:DateTimeCreated>2016-03-08T11:07:08Z</t:DateTimeCreated>
<t:ResponseObjects>
<t:ForwardItem/>
</t:ResponseObjects>
<t:ReminderDueBy>2016-03-08T11:20:00Z</t:ReminderDueBy>
<t:ReminderIsSet>true</t:ReminderIsSet>
<t:ReminderMinutesBeforeStart>10</t:ReminderMinutesBeforeStart>
<t:DisplayCc/>
<t:DisplayTo/>
<t:HasAttachments>false</t:HasAttachments>
<t:Culture>nl-NL</t:Culture>
<t:EffectiveRights>
<t:CreateAssociated>false</t:CreateAssociated>
<t:CreateContents>false</t:CreateContents>
<t:CreateHierarchy>false</t:CreateHierarchy>
<t:Delete>true</t:Delete>
<t:Modify>true</t:Modify>
<t:Read>true</t:Read>
</t:EffectiveRights>
<t:LastModifiedName>Wendy Bakkertje</t:LastModifiedName>
* <t:LastModifiedTime>2016-03-08T11:07:08Z</t:LastModifiedTime>
* <t:UID>040000[snip]463B</t:UID>
<t:RecurrenceId>2016-03-08T11:20:00Z</t:RecurrenceId>
* <t:DateTimeStamp>2016-03-08T11:07:08Z</t:DateTimeStamp>
<t:Start>2016-03-08T11:20:00Z</t:Start>
<t:End>2016-03-08T11:50:00Z</t:End>
<t:OriginalStart>2016-03-08T11:20:00Z</t:OriginalStart>
<t:IsAllDayEvent>false</t:IsAllDayEvent>
<t:LegacyFreeBusyStatus>Busy</t:LegacyFreeBusyStatus>
<t:Location/>
<t:IsMeeting>false</t:IsMeeting>
<t:IsCancelled>false</t:IsCancelled>
<t:IsRecurring>true</t:IsRecurring>
<t:MeetingRequestWasSent>false</t:MeetingRequestWasSent>
<t:IsResponseRequested>true</t:IsResponseRequested>
<t:CalendarItemType>Occurrence</t:CalendarItemType>
<t:MyResponseType>Organizer</t:MyResponseType>
<t:Organizer>
<t:Mailbox>
<t:Name>Wendy Bakkertje</t:Name>
<t:EmailAddress>[email protected]</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Organizer>
<t:Duration>PT30M</t:Duration>
<t:TimeZone>(UTC+01:00) Amsterdam, Berlijn, Bern, Rome, Stockholm, Wenen</t:TimeZone>
<t:AppointmentSequenceNumber>0</t:AppointmentSequenceNumber>
<t:AppointmentState>0</t:AppointmentState>
</t:CalendarItem>
</m:Items>
</m:GetItemResponseMessage>
</m:ResponseMessages>
</m:GetItemResponse>
</s:Body>
</s:Envelope>