Sending Meeting Updates

Topic Last Modified: 2006-06-12

If you are the organizer of a meeting, you can send updates to the attendees of the meeting using a calendar message. Collaboration Data Objects (CDO) returns an error if you call the IAppointment.CreateRequest method for a meeting of which you are not the organizer.

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 about processing meeting updates, see Responding to a Meeting Request.

To send a meeting update

  1. Open the meeting, and then 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 then 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 text you want to the Calendar Message object.
  4. Send the Calendar Message using the IMessage.Send method.
  5. Save the meeting update to the calendar folder.

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

Example

Visual Basic

Note

The following example uses a file URL with the Exchange OLE DB (ExOLEDB) provider. The ExOLEDB provider also supports The HTTP: URL Scheme. Using The HTTP: URL Scheme allows both client and server applications to use a single URL scheme.

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.example.com/MBX/user12/calendar/"

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

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

'Open a recordset 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 recordset, 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