Search code examples
exchangewebservicesewsjavaapi

How to set the contact title using the EWS Java API (Exchange Web Service)?


I would like to achieve the exact same thing as asked in this question, but in java: How to set the contact title using Exchange Web Services Managed API

I am using the EWS Java API 1.2 (http://archive.msdn.microsoft.com/ewsjavaapi). I can create a contact with all fields exposed in the API, but not the title (or Email1DisplayName). I tried these combinations (no errors, but title remains empty in the created contact when looking at it in Outlook):

contact.setExtendedProperty(new ExtendedPropertyDefinition(UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x3A45, MapiPropertyType.String), value);
contact.setExtendedProperty(new ExtendedPropertyDefinition((UUID) null, 0x3A45, MapiPropertyType.String), value);
contact.setExtendedProperty(new ExtendedPropertyDefinition(0x3A45, MapiPropertyType.String), value);

Solution

  • Ok I don't know what I did wrong before, but one of the options in my question does work for the title. Here's the complete example code (I wish I had that before):

    ExchangeService mailbox = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
    mailbox.setUrl(new URL("https://remote.domain.com/EWS/exchange.asmx").toURI());
    ExchangeCredentials credentials = new WebCredentials("user.name", "password", "domain");
    mailbox.setCredentials(credentials);
    
    ExtendedPropertyDefinition titlePropDef = new ExtendedPropertyDefinition(0x3A45, MapiPropertyType.String);
    
    Contact c = new Contact(mailbox);
    c.setGivenName("GivenName");
    c.setSurname("Surname");
    c.getEmailAddresses().setEmailAddress(EmailAddressKey.EmailAddress1, new EmailAddress("[email protected]"));
    c.setExtendedProperty(titlePropDef, "TitleXYZ");
    c.save(WellKnownFolderName.Contacts);
    
    Contact result = (Contact) mailbox.findItems(WellKnownFolderName.Contacts, new ItemView(1)).iterator().next();
    
    PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties);
    propertySet.add(titlePropDef);
    result = Contact.bind(mailbox, result.getId(), propertySet);
    
    System.out.println("count: " + result.getExtendedProperties().getCount());
    
    for(ExtendedProperty p : result.getExtendedProperties())
    {
       System.out.println(p.toString());
    }