I am updating an existing outlook calendar viewing feature in our custom ASP.NET web application that works well and displays all the events except the recurring ones. Since I am new to Outlook Calendar APIs, I am aggressively learning how to implement and integrate the recurrence in our current system. I got to know that if an event is recurring it would have a Recurrence object and if it is not null it will hold the Recurrence Pattern and Recurrence Range that will help me build the events to display in the calendar.
So, for an example, I have an event called FooEvent that's repeating itself daily for a year from 2 PM to 3 PM. from 19 August 2020 to 18 August 2021 as follows in the Outlook Calendar.
Through the Outlook Calendar API, while synching, I am receiving only one Microsoft.Graph.OutlookItem event object for FooEvent along with the property called Recurrence. Now, instead of creating every single event in the database based on this Recurrence rules (Recurrence.RecurrencePattern and Recurrence.Range), I am saving them in the SQL Server Database with this following schema so that the events can be built for a given period (i.e. 1 August 2020 to 31 August 2020) upon displaying.
So far no confusion until...
The Outlook calendar gives the user these three options to update the recurring event.
- This event
- This and all following events
- All events in the series
If I edit an occurrence of the recurring event using any of the first two options to update the time. How would I keep track of that particular altered event in my current database as I only have the recurrence logic in my database? This gives rise to the need for another table that will have the rules exceptions, something mentioned in this answer.
One last piece of information, that I am also making a delta request that will inform me if the whole event is deleted so the event in my database can be deleted (it's working fine). Also, I believe this delta request can also give me the data related to altering in the event but don't know how to implement that.
I am sure this must be a known problem but I couldn't find the legit solution online.
Also, here are some of the questions that look similar but are not.