| Ximian 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.