Updating Contacts (Exchange Web Services)

Topic Last Modified: 2007-09-14

You can use Exchange Web Services to update a contact item in the Exchange store.

Example

The following example shows you how to update a contact item in the Exchange store.

static void UpdateContact()
{
    // Create the bindings and set the credentials.
    ExchangeServiceBinding esb = new ExchangeServiceBinding();
    esb.Url = "http://fqdn/ews/exchange.asmx";

    esb.Credentials = new NetworkCredential("UserName", "Password", "Domain");

    // Create an object of update item type.
    UpdateItemType updateItemType = new UpdateItemType();
    updateItemType.ConflictResolution = ConflictResolutionType.AlwaysOverwrite;

    updateItemType.ItemChanges = new ItemChangeType[1];
    ItemChangeType changeType = new ItemChangeType();

    // Get the ID and change key from the contact item that you btained by using FindItem or CreateItem.
    ItemIdType contactId = new ItemIdType();
    contactId.Id = "AAAt=";
    contactId.ChangeKey = "EQAA";

    changeType.Item = contactId;

    changeType.Updates = new ItemChangeDescriptionType[1];

    // Create a set item field to identify the type of update.
    SetItemFieldType setItem = new SetItemFieldType();
    PathToIndexedFieldType indexedField = new PathToIndexedFieldType();

    // Update EmailAddress1 for the contact.
    indexedField.FieldIndex = "EmailAddress1";
    indexedField.FieldURI = DictionaryURIType.contactsEmailAddress;

    setItem.Item = indexedField;

    // Create a contact item to contain the update.
    ContactItemType contact = new ContactItemType();
    contact.EmailAddresses = new EmailAddressDictionaryEntryType[1];

    // Specify the e-mail address to be modified, and specify the new e-mail address.
    EmailAddressDictionaryEntryType emailAddress = new EmailAddressDictionaryEntryType();
    emailAddress.Key = EmailAddressKeyType.EmailAddress1;
    emailAddress.Value = "donhall@example.com";

    contact.EmailAddresses[0] = emailAddress;

    setItem.Item1 = contact;
    changeType.Updates[0] = setItem;
    updateItemType.ItemChanges[0] = changeType;

    // Send the update item request and receive the response.
    UpdateItemResponseType updateItemResponse = esb.UpdateItem(updateItemType);

    // Access the response.
    if (updateItemResponse.ResponseMessages.Items.Length > 0 &&
        updateItemResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Success)
    {
        ItemInfoResponseMessageType responseMessage = updateItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType;
        ContactItemType contactResponse = responseMessage.Items.Items[0] as ContactItemType;
        Console.WriteLine("Created Contact Item with Id {0} and ChangeKey {1}", contactResponse.ItemId.Id, contactResponse.ItemId.ChangeKey);
    }
}

The following XML example shows the XML request message that is sent from the client to the server.

<?xml version="1.0" encoding="utf-8"?>
<UpdateItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                ConflictResolution="AlwaysOverwrite">
  <ItemChanges xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <ItemChange xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
      <ItemId Id="AAAt=" ChangeKey="EQAA" />
      <Updates>
        <SetItemField>
          <IndexedFieldURI FieldURI="contacts:EmailAddress" FieldIndex="EmailAddress1" />
          <Contact>
            <EmailAddresses>
              <Entry Key="EmailAddress1">donhall@example.com</Entry>
            </EmailAddresses>
          </Contact>
        </SetItemField>
      </Updates>
    </ItemChange>
  </ItemChanges>
</UpdateItem>

The following XML example shows the XML response message that is sent from the server to the client.

<?xml version="1.0" encoding="utf-8"?>
<UpdateItemResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ResponseMessages xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <UpdateItemResponseMessage ResponseClass="Success">
      <ResponseCode>NoError</ResponseCode>
      <Items>
        <Contact xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
          <ItemId Id="AAAt=" ChangeKey="vom6O" />
        </Contact>
      </Items>
    </UpdateItemResponseMessage>
  </ResponseMessages>
</UpdateItemResponse>

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 Microsoft 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.

Note

The item identifier and change key have been shortened to preserve readability.

Compiling the Code

For information about compiling the code, see Exchange Web Services Client Development.