Platform SDK: Exchange 2000 Server

Sending Meeting Updates

[This is preliminary documentation and subject to change.]

As the organizer of a meeting, you can send updates to the attendees of the meeting using a calendar message. CDO returns an error if you call the IAppointment.CreateRequest method for a meeting you are not the organizer of.

Attendees process the update messages the same way they process any other calendar message. The ICalendarMessage.CalendarParts.GetUpdatedItem method compares the new calendar message with the existing meeting. It returns an Appointment object that can be saved to the calendar folder The updated meeting overwrites the existing meeting. For more information on processing meeting updates, see Responding to a Meeting Request.

The basic process for sending meeting updates is as follows:

  1. Open the meeting and update the desired properties and fields as shown in Updating a Appointments and Meetings. Verify that you are the organizer of the meeting.
  2. Set the meeting configuration and create a Calendar Message object using the IAppointment.CreateRequest method. For a published appointment, use the Publish method instead of the CreateRequest method.
  3. Add any desired text to the Calendar Message object.
  4. Send the Calendar Message using the IMessage.Send method.
  5. Save the updated meeting to the calendar folder.

The following code example checks all of the meetings in the calendar of user12, located on server exsvr3, in the exchange.microsoft.com domain. For meetings originated by user12, it changes any meeting in the "Flamingo Room" to the "Mount Rainier Room," and it sends an update to all attendees.

[Visual Basic]
Dim CalendarURL As     String
Dim ItemURL     As     String
Dim Rec         As New ADODB.Record
Dim Rs          As New ADODB.Recordset
Dim iDsrc       As     CDO.IDataSource
Dim iAtnds      As     CDO.IAttendees
Dim Config      As New CDO.Configuration
Dim iAppt       As New CDO.Appointment
Dim iCalMsg     As     CDO.CalendarMessage
Dim iMsg        As     CDO.Message
Dim Target      As     String
Dim NewValue    As     String
Dim Location    As     String
Dim Address     As     String
Dim Index       As     Integer

Target = "Flamingo Room"
NewValue = "Mount Rainier Room"

  'Using the Exchange OLE DB provider
  CalendarURL = "file://./backofficestorage/exchange.microsoft.com/MBX/user12/calendar/"

'Set the configuration for the message
Config.Fields(cdoSendEmailAddress) = "user12@exchange.microsoft.com"
Config.Fields("CalendarLocation") = CalendarURL
Config.Fields.Update

'set address of user for comparing with attendee value
Address = "MAILTO:" & Config.Fields(cdoSendEmailAddress)

'Open a record set for the items in the calendar folder
Rec.Open CalendarURL
Set Rs.ActiveConnection = Rec.ActiveConnection
Rs.Source = "SELECT ""DAV:href"", ""urn:schemas:calendar:location"" from scope('shallow traversal of """ & CalendarURL & """')"
Rs.Open

'Enumerate the record set, checking each item's location
Rs.MoveFirst
Do Until Rs.EOF
  'get the location of each item
  Location = Rs.Fields(CdoCalendar.cdoLocation).Value
  'test for organizer and desired location
  If (Location = Target) Then
    'open appointment in read/write mode
    ItemURL = Rs.Fields(CdoDAV.cdoHref).Value
    Set iDsrc = iAppt
    iDsrc.Open ItemURL, , adModeReadWrite
    'verify this user is organizer by checking attendee property
    Set iAtnds = iAppt.Attendees
    'If appointment has attendess and this user is organizer send an update
    'otherwise just save update to calendar
    If iAtnds.Count > 1 Then
      For Index = 1 To iAtnds.Count
        If iAtnds.Item(Index).IsOrganizer And iAtnds.Item(Index).Address = Address Then
          'update the appointment location
          iAppt.Location = NewValue
          'save the appointment
          iDsrc.Save
          'set the configuration
          iAppt.Configuration = Config
          'create a calendar message
          Set iCalMsg = iAppt.CreateRequest
          'send the update to the attendees
          Set iMsg = iCalMsg.Message
          iMsg.TextBody = "Automated update - please note new location"
          iMsg.Send
        End If 'user is organizer
      Next Index
    Else 'appointment has only one attendee
      iAppt.Location = NewValue
      iDsrc.Save
    End If 'appointment has attendees
  End If 'location = target
  Rs.MoveNext
Loop