【问题标题】:How I can update a contact item in Exchange Web Api如何在 Exchange Web Api 中更新联系人项目
【发布时间】:2012-02-28 10:45:48
【问题描述】:

我尝试使用空字符串更新 EWS 中的联系人属性,但失败。我不知道为什么。

 // works fine
 contact.Company = "SomeCompany";
 contact.Update(ConflictResolutionMode.AlwaysOverwrite);

 // failed in Update with a service response exception
 contact.Company = "";
 contact.Update(ConflictResolutionMode.AlwaysOverwrite);

我尝试了 null 和 string.Empty 但效果相同。 我究竟做错了什么?

【问题讨论】:

    标签: c# exchangewebservices exchange-server ews-managed-api


    【解决方案1】:

    您确定Contact 类型上有Company 属性吗?我只看到一个CompanyName 属性,它可以通过以下方式更新而没有任何问题(至少在我尝试时):

    var service = GetService();
    var view = new ItemView(1);
    var searchFilter = new SearchFilter.IsEqualTo(ContactSchema.EmailAddress1, "test@domain.dk");
    var contacts = service.FindItems(WellKnownFolderName.Contacts, searchFilter, view);
    
    var contact = contacts.ElementAt(0) as Contact;
    
    // Works fine.
    contact.CompanyName = "SomeCompany";
    contact.Update(ConflictResolutionMode.AlwaysOverwrite);
    
    // Works fine as well.
    contact.CompanyName = "";
    contact.Update(ConflictResolutionMode.AlwaysOverwrite);
    

    【讨论】:

    • 感谢您的回复!哦,那是一个错误,当然我的意思是 CompanyName。这是一个简化的示例,我通过反射(CustomPropertyDescriptor)以及物理地址集合等更改了很多东西。如果我用“”(设置之前)替换所有 null/“”字符串,那么它可以与 Update() 一起正常工作。例外意味着一个项目只能有一个更改的元素(或类似元素)。我现在创建了一个真正简单的示例,没有模拟和所有额外的东西,看看会发生什么。如果你说这行得通,那么我还有另一个问题。请给我一天:)
    【解决方案2】:

    首先,您可以一次更新多个属性。

    其次,您可以尝试检查现有值是否与新值相同(如果是,则不要设置)。此外,如果它是一个空字符串,最好将值设置为 null。

    第三,找到您的联系人,获取项目 ID,然后将新联系人绑定到该项目 ID。

    ItemId itemId = contact.Id;
    Contact updateContact = Contact.Bind(service, itemId);
    

    这可能会有所帮助。谁知道。更新项目时,API 很难使用。

    查看此链接,我在此链接中提供了大量有关使用 EWS 更新联系人的信息: Updating a Contact with EWS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      相关资源
      最近更新 更多