Data Binding of Recurring Events
This article explains the specifics of storing and data binding of recurring events.
The Scheduler uses the following model fields to support recurring events:
recurrenceRule
—A string representation of the recurrence. For more information, refer to the article on recurrence rules.recurrenceId
—The ID of the recurring event to which this occurrence belongs.
Recurring events require processing before they are ready to be displayed by the Scheduler. This is typically done by the data binding directive, but can also be handled by a remote service.
To perform the process, follow the steps:
-
Determine the currently visible time period.
The Scheduler fires a
dateChange
that contains the visible range of the current view. -
Evaluate the recurrence rules of all recurring events, and determine if they have occurrences in the current date range.
The evaluation of the recurrence rules is restricted to the current date range.
-
For each occurrence, create a copy of the event. On the copied event, set the following fields:
start
andend
are set to the occurrence time.recurrenceId
is set to theid
of the main recurring event.
Recurrence Exceptions
Recurrence exceptions are dates on which the original event does not occur. The occurrence may be entirely missing or can be replaced by an updated version following an edit.
The recurrenceExceptions
field stores the exceptions from the recurrence rule.
The field contains an array of dates which define when an recurring event must not occur. The dates are stored as strings in ISO 8601 format and are separated by comma. For example, if the FREQ=DAILY
recurrence rule is set, the event must not occur on 24 September, set the recurrenceExceptions
field to an array with a single Date
object.
public events: SchedulerEvent[] = [{
id: 1,
title: 'Repeat daily, except on 21th of October',
start: new Date('2020-10-19T09:00:00'),
end: new Date('2020-10-19T10:30:00'),
recurrenceRule: 'FREQ=DAILY;',
recurrenceExceptions: [new Date('2020-10-21T09:00:00')]
}];
The following example demonstrates how to set a recurrence rule and a recurrence exception.
Storage Considerations
The recurrence exceptions array contains one entry for each deleted or modified occurrence. As a result, the list can grow to a significant size.
To ensure the operations run as expected, allocate sufficient storage for the list. Relational databases have to use a column of type VARCHAR(MAX)
, TEXT
, or equivalent.
Server-Side Processing
To disable the built-in processing of recurring events, remove the data binding directive. This allows the recurring events to be expanded on the server or by a third-party library.
This feature is designed as an escape hatch for specific scenarios. We do not provide specific implementations for server-side processing of recurring events at the moment.
To enable the Scheduler to detect expanded recurring events:
- Set the
recurrenceId
field of occurrences to theid
of the main recurring event. - Set the
recurrenceRule
field on the occurrences to the same value as the main recurring event. Omit the field for recurrence exceptions. - Include the original event in the data set. This event will not be rendered, but is needed for editing to work correctly.
The following example simulates a server-side expansion of events by providing all of the occurrences together with the original recurring event.