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:
All-day events
Exchange does not use iCalendar
DATE
s, only DATE-TIME
s. 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
.
Free/Busy Transparency
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.
Priority
X-MICROSOFT-CDO-IMPORTANCE
essentially
duplicates PRIORITY
. It can be
MAPI_IMPORTANCE_HIGH
(0
),
MAPI_IMPORTANCE_NORMAL
(1
), or
MAPI_IMPORTANCE_LOW
(2
).
Recurrences
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.
Last Action Time
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.