|  |  |  | Evolution Connector for Microsoft Exchange Programmer’s Reference Manual |  | 
|---|
| Calendar Architecture | 
    For the most part, Connector uses iCalendar for
    Exchange calendaring. Many iCalendar
    properties are also automatically promoted to WebDAV properties in
    the urn:schemas:calendar: namespace. In
    particular:
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
These (and others) can be used in searches to find specific events or ranges of events.
The iCalendar data can be found in either of two ways:
By doing a GET and parsing the iCalendar data out of the returned message body
	    By retrieving the object's
	    PR_INTERNET_CONTENT property via a
	    PROPFIND or
	    BPROPFIND.
	
    The second method only works on objects that were created as
    iCalendar objects (ie, created in
    Evolution). Objects created by
    Outlook will not have the
    PR_INTERNET_CONTENT property set, so we have to
    fall back to using GET. Also note that for some
    reason, PR_INTERNET_CONTENT will not be
    returned by the SEARCH command. Only by
    PROPFIND and BPROPFIND.
Exchange uses some non-standard iCalendar properties, and uses some properties in non-standard ways. Here are some of the things we know:
    Exchange does not use iCalendar
    DATEs, only DATE-TIMEs. To
    represent an all-day event, it sets the DTSTART
    and DTEND to UTC values corresponding to the
    boundaries of the day in the local time zone, and then sets the
    X-MICROSOFT-CDO-ALLDAYEVENT property to
    TRUE.
    Exchange allows an event to have any of
    four different free/busy status: FREE,
    TENTATIVE, BUSY, or
    OUTOFOFFICE. This information is kept in the
    X-MICROSOFT-CDO-BUSYSTATUS property.
    Sometimes events created by Outlook or
    OWA will not have an iCalendar
    TRANSP property, so we must fake it based on
    the value of X-MICROSOFT-CDO-BUSYSTATUS.
    Meeting requests sent from Outlook also
    have an X-MICROSOFT-CDO-INTENDEDSTATUS
    property. This seems to be used to indicate what
    BUSYSTATUS value the organizer intended the
    recipient to use.
    X-MICROSOFT-CDO-IMPORTANCE essentially
    duplicates PRIORITY. It can be
    MAPI_IMPORTANCE_HIGH (0),
    MAPI_IMPORTANCE_NORMAL (1), or
    MAPI_IMPORTANCE_LOW (2).
An object in an Exchange calendar folder can be one of four different kinds of "instance":
A non-recurring event.
The master entry for a recurring appointment.
A single instance of a recurring appointment. These objects are generated when you view your calendar in OWA, but are redundant with the information in the appointment's master entry.
An exception to a recurring appointment. (It is not clear that these actually appear in WebDAV.)
    The instance type of an object is stored in its
    X-MICROSOFT-CDO-INSTTYPE iCalendar property,
    which is also visible as the
    urn:schemas:calendar:instancetype (aka
    E2K_PR_CALENDAR_INSTANCE_TYPE) WebDAV property,
    with one of the values cdoSingle
    (0), cdoMaster
    (1), cdoInstance
    (2), or cdoException
    (3), corresponding to the four types
    described above.
    Outlook/Exchange
    keep track of the last time an action was taken with respect to a
    meeting request in the
    X-MICROSOFT-CDO-REPLYTIME property. When
    accepting a meeting request, it should be set in both the saved
    meeting and the reply to the organizer. It must also be set in a
    direct booked
    meeting. Outlook displays this
    timestamp to the user when viewing the meeting.