Creating Appointments in Exchange 2010

Last modified: May 21, 2009

Applies to: Exchange Server 2007 | Exchange Server 2010

You can use Exchange Web Services to create appointments in a user's mailbox.

Example

The following example shows you how to create an appointment by using proxy objects that are generated from MicrosoftVisual Studio 2005.

static void CreateAppointment(ExchangeServiceBinding esb)
{
    // Create the appointment.
    CalendarItemType appointment = new CalendarItemType();

    // Add item properties to the appointment.
    appointment.Body = new BodyType();
    appointment.Body.BodyType1 = BodyTypeType.Text;
    appointment.Body.Value = "Agenda Items....";
    appointment.Categories = new string[] { "Category1", "Category2" };
    appointment.Importance = ImportanceChoicesType.High;
    appointment.ImportanceSpecified = true;
    appointment.ItemClass = "IPM.Appointment";
    appointment.Subject = "Advance Design Presentation";

    // Add calendar properties to the appointment.
    appointment.Start = System.DateTime.Parse("2006-11-06T14:00:00Z");
    appointment.StartSpecified = true;
    appointment.End = System.DateTime.Parse("2006-11-06T15:00:00Z");
    appointment.EndSpecified = true;

    // Identify the destination folder that will contain the appointment.
    DistinguishedFolderIdType folder = new DistinguishedFolderIdType();
    folder.Id = DistinguishedFolderIdNameType.calendar;
   
    // Create the array of items that will contain the appointment.
    NonEmptyArrayOfAllItemsType arrayOfItems = new NonEmptyArrayOfAllItemsType();
    arrayOfItems.Items = new ItemType[1];

    // Add the appointment to the array of items.
    arrayOfItems.Items[0] = appointment;

    // Create the CreateItem request.
    CreateItemType createItemRequest = new CreateItemType();

    // The SendMeetingInvitations attribute is required for calendar items.
    createItemRequest.SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone;
    createItemRequest.SendMeetingInvitationsSpecified = true;

    // Add the destination folder to the CreateItem request.
    createItemRequest.SavedItemFolderId = new TargetFolderIdType();
    createItemRequest.SavedItemFolderId.Item = folder;

    // Add the items to the CreateItem request.
    createItemRequest.Items = arrayOfItems;

    try
    { 
        // Send the request and get the response.
        CreateItemResponseType createItemResponse = esb.CreateItem(createItemRequest);

        // Get the response messages.
        ResponseMessageType[] rmta = createItemResponse.ResponseMessages.Items;

        foreach (ResponseMessageType rmt in rmta)
        {
            ArrayOfRealItemsType itemArray = ((ItemInfoResponseMessageType)rmt).Items;
            ItemType[] items = itemArray.Items;
            
            // Get the item identifier and change key for each item.
            foreach (ItemType item in items)
            {
                Console.WriteLine("Item identifier: " + item.ItemId.Id);
                Console.WriteLine("Item change key: " + item.ItemId.ChangeKey);
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("Error Message: " + e.Message);
    }
}

The SOAP messages that are passed between the Exchange Web Services client and server are defined by the XML schema and WSDL files. The XML schema and WSDL files define the contract between the client and server. Proxy class generators create an object-model abstraction of those SOAP messages, which can simplify programming. This code example uses a proxy class library that was generated by Visual Studio 2005. Different proxy class generators create different object models for a given Web service. This proxy class code example is an illustration only. Refer to the proxy class generator documentation for support for proxy classes.