A recurring event is an event that occurs more than once at a regular interval. If you have ever worked with Outlook before, or any other calendar management system for that matter, you will have no trouble with understanding the implementation in Dime.Scheduler.
The appointment editor contains an extra combobox field in which the planner can construct the pattern. By default, recurring appointments are switched off, which makes it an optional field. If you don't need a recurrence pattern for an appointment, no action is required - just leave the repeat field set to 'None'.
As soon as an interval is selected, a button will be revealed:
The text inside this legend button shows the recurrence rule as a sentence rather than a pattern. In the example above, the rule is simple: a daily occurrences without a specified end time. It is particularly useful when the rule is more complex than this, like a two-monthly occurrence on the second weekend day.
The legend button reveals a window in which the user can construct the recurrence rule by selecting the frequency, the interval and the end time of the repeat:
- Frequency: Daily, weekly, monthly, yearly
- Interval: the options vary according to the selected frequency
- End time: on date or after a given amount of occurrences.
A daily recurring appointment is very straightforward. As the name suggests, the interval can be construed as "every x days".
This example can be interpreted as the instruction to create an appointment every day until the first of January in 2024.
The same logic applies for the weekly occurrences (and all the others for that matter). However, there is one extra variable: besides the frequency, the user can also choose the days. At least one day must be selected.
This example can be interpreted as the instruction to create an appointment every Wednesday until the first of January in 2024. The appointment that you create or update must also adhere to this rule. If you specify this rule for an appointment which starts on a Monday, Dime.Scheduler will update the original appointment to move to the first available date in the series.
There are two modes the user can select:
- Day picker
For instance, the user can choose to create appointments on the 1st, 3rd and 25th every other month. Alternatively, it is possible to select every second weekend day or every third day of the month.
This example effectively states to create an appointment on the 1st, 15th and 30th for every month until the first of January in 2024. The same remarks as the weekly occurrences apply here as well: every appointment needs to comply with the recurrence rule, even when the original appointment doesn't.
Finally, the yearly recurring appointments is very similar to the monthly recurring pattern, except for the scope: instead of days it's months.
It is possible (but completely optional) to specify the occurrence rule even further. For example, requesting appointments to be created "every 3rd Friday in March, July and November until May 2030" could be a perfectly valid recurrence pattern.
Updating recurring appointments and occurrences
When a recurring appointment is created, all occurrences will be created and published instantly. Occurrences are visualized in the planning board with a special icon:
Modifying a recurring appointment can either mean two things:
- Update the entire sequence
- Update the occurrence
An occurrence can be defined as an instance of the series of appointments that constitute the recurring appointment. When Dime.Scheduler creates such a sequence of appointments, they are created independently yet connected. This means appointments can move freely on the planning board while they are still linked together. Hence, removing or updating appointments independently does not break the link with the other occurrences in the range. These special occurrences are also referred to as "exception occurrences" and can be identified with the exclamation mark that preceeds the recurring icon.
All actions apart from the appointment editor that involves modifying records will result in an exception occurrence. For instance, changing the duration of an occurrence via drag-and-drop will flag the appointment automatically as an exception occurrence. It has been implicitly mentioned that the recurring appointment itself can only be managed via the appointment editor.
When the appointment is part of a set, Dime.Scheduler will need input from the planner to decide whether to update the whole series or this occurrence:
If the entire sequence is updated, all appointments (and assigned resources) are evaluated and updated or removed if necessary. This also means that any occurrences (exceptions to the sequence) will be reset so the recurrence pattern is applied. However, if the pattern or the duration of the sequence is unmodified, the occurrences' dates won't be overridden.
In conclusion, the rule for resetting the recurring appointment is simple: does the update involve a modified recurrence pattern or modified dates (or duration), then the recurring appointment will be recalculated. However, when fields like subject, resources or indicators are updated in the editor, the exception occurrences will keep their status (i.e. exception occurrence), dates and resources - only the master data will be updated.
When the entire series is selected, there is only one more issue to address; the start date of the series needs to be confirmed:
By default the date of the first occurrence in the series is used, but there are two ways to override this:
- Start the recurring appointment on the start date of the appointment that is currently being edited
- Select a different date
For example, let's assume a user updates the second occurrence of a recurring appointment, applies the "all" option and checks the "use appointment's start date". The result will be that the series will shift to the right by one occurrence. If the user didn't check this box and kept the original date in the start field, the first occurrence would start on the same day as before.
For reasons unique to Dime.Scheduler, there needs to be an end to a recurring appointment to prevent the ecosystem from overflowing. A never-ending series of appointments in the back office would yield undesirable results. Therefore, a recurring pattern needs to end at some point. There are two ways to define the end of a repeatable event:
- Amount of occurrences
- On date
The first option puts a limit on the amount of appointments whereas the second puts a stop on a date. The recurring pattern contains all the information on when to create the appointments, the end repeat setting indicates the maximum date of the final appointment in the series.
This value can be modified and just like the pattern, it triggers the system to recalculate the entire series. Clearly, this may result in appointments to be added, updated or removed.
Here is an example that shows the difference between the two for the
weekly on Monday pattern (start date is Tuesday 1 January 2019):
|Date||5 occurrences||Until February 1|
A word about iCalendar
Calendars in general are commonplace. You see them literally everywhere: they're on your phone, in your professional and private mailbox, on your computer, in the lobby of your organization, on your wall, etc. Now, imagine that every developer or company who creates a calendar widget uses a custom proprietary format for storing appointments. You don't need a degree in computer sciences to understand that this would be a very messy situation in which it would be virtually impossible of sharing calendars and meeting requests as we do now.
Like in many other areas in the field, standards and specifications enable interoperability as it gives the industry a common understanding on how to communicate with other systems. For calendars, the industry standard is the iCalendar (or RFC5545) specification. This specification also stipulates how to exchange recurring event information.
For example, the following is a rule that specifies 10 occurrences that occur every other day:
FREQ=DAILY;COUNT=10;INTERVAL=2. Dime.Scheduler is able to convert this string of text into a set of appointments. Conversely, it adheres to these rules when users create recurring appointments in the appointment editor. In other words, Dime.Scheduler is compliant with the RFC5545 specification.