2.1.3.2.2 Recurrence Templates

The RRULE and X-MICROSOFT-RRULE properties MUST NOT be exported for non-recurring appointments or exceptions of recurring appointments.

Although the syntax permits a wide variety of recurrences, only RRULE properties and X-MICROSOFT-RRULE properties fitting the templates enumerated in this section SHOULD<269> be mapped into the AppointmentRecurrencePattern structure ([MS-OXOCAL] section 2.2.1.44.5) in the PidLidAppointmentRecur property ([MS-OXOCAL] section 2.2.1.44).

Implementations SHOULD gracefully fail to map any recurrences that do not fit the templates enumerated in this section.

Once a recurrence has been successfully mapped into the AppointmentRecurrencePattern structure, implementations SHOULD<270> also set the PidLidClipStart property ([MS-OXOCAL] section 2.2.1.14) to the value of the StartDate field of the AppointmentRecurrencePattern structure and set the PidLidClipEnd property ([MS-OXOCAL] section 2.2.1.15) to the value of the EndDate field of the AppointmentRecurrencePattern structure.

The following sections express the templates in ABNF notation, as specified in [RFC5234]. The following code shows common rules used in the templates.

 common-parts     = [interval-part] [byhour-part] [byminute-part]
                     [(until-part / count-part)] [wkst-part]
  
 interval-part       = ";INTERVAL=" 1*DIGIT          ; See 2.3.1.2
 byminute-part       = ";BYMINUTE=" 1*2DIGIT          ; See 2.3.1.3
 byhour-part         = ";BYHOUR=" 1*2DIGIT          ; See 2.3.1.4
 bymonthday-part     = ";BYMONTHDAY=" ["-"]1*2DIGIT     ; See 2.3.1.5
 byday-part          = ";BYDAY=" byday-list          ; See 2.3.1.6
 byday-nth-part      = ";BYDAY=" byday-nth-list     ; See 2.3.1.6
 bymonth-part        = ";BYMONTH=" 1*2DIGIT          ; See 2.3.1.7
 bysetpos-part       = ";BYSETPOS=" weeknum          ; See 2.3.1.8
 wkst-part           = ";WKST=" dayofweek          ; See 2.3.1.9
 until-part          = ";UNTIL=" datetime          ; See 2.3.1.10
 count-part          = ";COUNT=" 1*3DIGIT          ; See 2.3.1.11
  
 byday-list          = byday-elm *("," byday-elm)
 byday-elm           = [weeknum] dayofweek
 dayofweek           = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA"
  
 weeknum             = "-1" / "1" / "2" / "3" / "4"
 byday-nth-list      = dayofweek
 byday-nth-list      =/ "SA,SU"                    ; Any ordering
 byday-nth-list      =/ "MO,TU,WE,TH,FR"          ; Any ordering
 byday-nth-list      =/ "SU,MO,TU,WE,TH,FR,SA"          ; Any ordering
 datetime            = year month day "T" hour minute second ["Z"]
 year                = 4DIGIT
 month               = 2DIGIT
 day                 = 2DIGIT
 hour                = 2DIGIT
 minute              = 2DIGIT
 second              = "00"