none
How can I update all contact fields in exchange server public folder RRS feed

  • Question

  • I'm looking for a sample .NET code to update the contacts in the public folder under Exchange 2010 so far i was able to update some fields like the e-mail, but not the Business, Home & Other Addresses. Please note that i'm getting the contacts info from a custom Sharepoint List. This is my code:

    static void UpdateContact(ExchangeServiceBinding esb)
    {
        // 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);
        }
    } 

    how can i programmatically update the business, Home & other addresses for a given contact email address.


    Regards, Jamil

    Wednesday, June 27, 2012 5:22 AM

Answers

  • I would suggest you download and use the EWS Managed api from http://www.microsoft.com/en-us/download/details.aspx?id=30141 which will save you many hours of coding. You can then you can use the code samples out of http://msdn.microsoft.com/en-us/library/ee693007(v=exchg.80).aspx which demonstrates how to set the address and phone details.

    To do this using Proxy Code like you have you need to use a seperate SetItem for each Property you update eg

                SetItemFieldType setItem = new SetItemFieldType();
                PathToIndexedFieldType pa1indexedField = new PathToIndexedFieldType();
                pa1indexedField.FieldIndex = PhysicalAddressIndexType.Business.ToString();
                pa1indexedField.FieldURI = DictionaryURIType.contactsPhysicalAddressCity;
    
                PhysicalAddressDictionaryEntryType peType = new PhysicalAddressDictionaryEntryType();
                peType.City = "New York";
    
                ContactItemType cnContact = new ContactItemType();
                cnContact.PhysicalAddresses = new PhysicalAddressDictionaryEntryType[1];
                cnContact.PhysicalAddresses[0] = peType;
                setItem.Item = pa1indexedField;
                setItem.Item1 = cnContact;
    Cheers
    Glen

    • Marked as answer by Jamil Hallal Tuesday, July 10, 2012 10:48 AM
    Wednesday, June 27, 2012 6:32 AM