Platform SDK: Exchange 2000 Server |
[This is preliminary documentation and subject to change.]
When a meeting organizer sends a meeting request, Exchange stores the calendar message in the recipient’s inbox. Responses to meeting requests, meeting updates, and cancellations are all received as calendar messages in the inbox. You can use ADO and CDO to get calendar messages from the inbox and process them.
You can identify an item in an Exchange folder by the item's content class. The content class is a property of items in the Web Store. The content class of calendar messages is contained in the "DAV:contentclass" field of the message. All calendar messages have the content class "urn:content-classes:calendarmessage."
You typically open calendar messages using the ICalendarPart.GetUpdatedItem method. This method checks the Web Store to see if the meeting in the calendar message already exists. If the meeting already exists, the calendar message is probably an update to the meeting. The GetUpdatedItem method returns an Appointment object in memory that contains the most current meeting information, either from the Web Store or the calendar message. When you save the meeting, it overwrites the existing meeting in the Web Store.
Note If the calendar part contains an exception to an existing recurring meeting, the GetUpdatedItem method returns the exception in memory. If you accept or decline the exception, the meeting response is based on the exception. However, when you call the IDataSource.Save method on the exception, it merges the exception into the master recurring meeting and saves the updated master to the Web Store.
This topic explains how to identify and open calendar messages. Other topics in this section explain how to process the calendar message once it has been opened.
To open calendar messages in the inbox
The following code example gets all calendar messages from the inbox of a specific user. It prints the subject of each calendar part and deletes the message. Examples for other topics in this section show how to actually process the calendar parts.
Dim InboxURL As String Dim CalendarURL As String Dim ItemURL As String Dim Rs As New ADODB.Recordset Dim Rec As New ADODB.Record Dim iCalMsg As New CalendarMessage Dim iCalPart As ICalendarPart Dim iAppt As Appointment Dim Index As Integer Dim ContentClass As String InboxURL = "file://./backofficestorage/" & DomainName & "/MBX/" & UserName & "/inbox/" CalendarURL = "file://./backofficestorage/" & DomainName & "/MBX/" & UserName & "/calendar/" 'Open the record set for the calendar messages in the inbox folder Rec.Open InboxURL Set Rs.ActiveConnection = Rec.ActiveConnection Rs.Source = "SELECT ""DAV:href"",""DAV:contentclass"" " & _ "FROM scope('shallow traversal of """ & InboxURL & """')" & _ "WHERE (""DAV:contentclass"" = 'urn:content-classes:calendarmessage')" Rs.Open , , , adLockOptimistic 'Enumerate the record set and process each calendar message Rs.MoveFirst Do Until Rs.EOF 'Open the calendar message ItemURL = Rs.Fields(CdoDAV.cdoHref).Value iCalMsg.DataSource.Open ItemURL 'Get each calendar part For Index = 1 To iCalMsg.CalendarParts.Count Set iCalPart = iCalMsg.CalendarParts(Index) Set iAppt = iCalPart.GetUpdatedItem(CalendarURL) 'Process the appointment as necessary Debug.Print "Subject: " & iAppt.Subject Next Index 'Delete the calendar message from the inbox Rs.Delete Rs.MoveNext Loop