2.1.3.1.1.20.20 Property: RECURRENCE-ID

RFC Reference: [RFC2445] section 4.8.4.4

Number of Instances Allowed: 0, 1

Format: Date-Time ([RFC2445] section 4.3.5), Date ([RFC2445] section 4.3.4)

Brief Description: The original starting time of a moved exception of a recurring appointment.

Importing to Calendar objects

This property MUST be imported into PidLidExceptionReplaceTime, in UTC.

In addition, if the VCALENDAR contains a recurring VEVENT with the same UID, but no RECURRENCE-ID, this entire VEVENT SHOULD<179> be treated as an exception of the recurring VEVENT. In particular:

  • Instead of creating a new Calendar object in the Folder object for this VEVENT, a new Attachment object in the Recurring Calendar object SHOULD<180> be created (with properties specified in the following table), and PidTagAttachDataObject ([MS-OXPROPS] section 2.590) SHOULD<181> be opened as a Calendar object and used to import this VEVENT.

  • The PidTagMessageClass of this Calendar object SHOULD<182> be overwritten to 'IPM.OLE.CLASS.{00061055-0000-0000-C000-000000000046}'.

  • The recurring VEVENT SHOULD<183> treat this VEVENT's RECURRENCE-ID as an EXDATE, and this VEVENT's DTSTART as an RDATE. See section 2.1.3.1.1.20.18 for the effect of this exception on PidLidAppointmentRecur.

    Attachment Object Property

    Value

    PidTagAttachDataObject

    Open this property as a Calendar object interface and import the VEVENT

    PidTagAttachMethod

    Set to 0x00000005

    PidTagRenderingPosition

    Set to 0xFFFFFFFF

    PidTagDisplayName

    Set to the PidTagSubject of this Calendar object.

    PidTagExceptionStartTime

    Set to the PidLidAppointmentStartWhole of this Calendar object, local to the time zone specified by PidLidTimeZoneStruct of this Calendar object.

    PidTagAttachEncoding

    Set to an empty PtypBinary

    PidTagExceptionEndTime

    Set to the PidLidAppointmentEndWhole of this Calendar object, local to the time zone specified by PidLidTimeZoneStruct of this Calendar object.

    PidTagAttachmentFlags

    Set to 0x00000002

    PidTagAttachmentLinkId

    Set to 0x00000000

    PidTagAttachFlags

    Set to 0x00000000

    PidTagAttachmentHidden

    Set to TRUE

    PidTagAttachmentContactPhoto

    Set to FALSE

Exporting from Calendar objects

If PidLidExceptionReplaceTime is set, then it MUST be exported as a RECURRENCE-ID. Otherwise, if an InstanceDate can be parsed from the 17th, 18th, 19th, and 20th bytes of PidLidGlobalObjectId ([MS-OXPROPS] section 2.142) as specified in section 2.1.3.1.1.20.26, then that date combined with the time in PidLidStartRecurrenceTime ([MS-OXPROPS] section 2.304) in the time zone specified by PidLidTimeZoneStruct MUST be exported as a RECURRENCE-ID.

In addition, exceptions to recurring appointments SHOULD<184> be exported as a separate VEVENTs with a RECURRENCE-ID under either of the conditions below. Exceptions that do not fit either of these conditions MAY instead be exported as an RDATE (see section 2.1.3.1.1.20.18).

  • Exceptions stored as an Attachment object with PidTagAttachMethod set to 0x00000005 and with the bit denoted by 0x00000002 set to 1 in PidTagAttachmentFlags.

  • Exceptions which do anything other than, or in addition to, moving the start time of an instance without changing the duration.

The RECURRENCE-ID of new VEVENTs MUST be exported from the OriginalStartDate field of the corresponding ExceptionInfo block. Furthermore, the new VEVENTs MUST export the same UID as the recurring VEVENT. The remaining properties MUST be exported from the Calendar object embedded in PidTagAttachDataObject of the Attachment object. If no Attachment object exists for this exception, then the ExceptionInfo's fields MUST be exported as properties of the new VEVENT as specified in the following table.

ExceptionInfo Field

Export as...

StartDateTime / MeetingType

Export as DTSTART (see section 2.1.3.1.1.20.10)

EndDateTime / MeetingType

Export as DTEND (see section 2.1.3.1.1.20.8)

fOriginalStartDate

Export as RECURRENCE-ID

SubjectLength / Subject

Export as SUMMARY (see section 2.1.3.1.1.20.24), if Subject is set

ReminderDelta / ReminderSet

Export as a VALARM sub-component (see section 2.1.3.1.1.20.62), if ReminderDelta is set and if ReminderSet is not FALSE

LocationLength / Location

Export as LOCATION (see section 2.1.3.1.1.20.15), if Location is set

BusyStatus

Export as TRANSP (see section 2.1.3.1.1.20.25) and X-MICROSOFT-CDO-BUSYSTATUS (see section 2.1.3.1.1.20.31), if BusyStatus is set

If RECURRENCE-ID is exported (as specified above) and the recurring parent is not all-day, RECURRENCE-ID MUST be specified local to the time zone specified in PidLidTimeZoneStruct.

If RECURRENCE-ID is exported (as specified above) and the recurring parent is all-day, then the RECURRENCE-ID MUST be specified in the Date format ([RFC2445] section 4.3.4).