c# - 如何使用 Microsoft 的 EWS API 从联系人获取/设置扩展属性?

标签 c# .net exchangewebservices

我认为我正在正确创建它,如下所示。 c 是一个联系人,考虑到 EWS 提供的 ItemId 不是静态的,我只是想存储一个唯一标识符...

propertySetId = System.Guid.NewGuid();
// Create a definition for the extended property.
ExtendedPropertyDefinition extendedPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, "itemGUID", MapiPropertyType.String);
c.SetExtendedProperty(extendedPropertyDefinition, propertySetId.ToString());
c.Update(ConflictResolutionMode.AlwaysOverwrite);

当我在基于其他内容(例如名字)搜索联系人时尝试将其撤回时,我得到了一个空值。我试图通过以下方式获得值(value):

foreach (Item c in findResults.Items)
{
      foreach(ExtendedProperty extendedProperty in c.ExtendedProperties)
      {
            if(extendedProperty.PropertyDefinition.Name == "itemGUID")
            {
                  results[i] = extendedProperty.Value.ToString();
            }
      }
}

编辑:findResults 的代码

List<SearchFilter> searchFilters = new List<SearchFilter>();
searchFilters.Add(new SearchFilter.IsEqualTo(itemGUID, value));
//can be more filters here depending on situation
SearchFilter filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilters.ToArray());
findResults = service.FindItems(WellKnownFolderName.Contacts, filter, view);

最佳答案

您需要在 ItemView 中分配 PropertySet 以告知 EWS 在您使用 FindItems 进行搜索时要包括哪些属性。如果您不将它包含在您的 ItemView 中,它将无法阅读。另一种方法是使用 Contact.Bind 并为每个联系人请求该属性有问题(更多的服务请求,但有时是必要的)。

参见 Viewing Extended Properties using EWS有关使用 Extended Properties 的完整示例在 EWS 中。

方法 #1:检索所有联系人的扩展属性

ExtendedPropertyDefinition propDef = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, "itemGUID", MapiPropertyType.String);
ItemView view = new ItemView(50) { PropertySet = new PropertySet(propDef) };

方法 #2:如果您有联系人 ID,一次绑定(bind)一个联系人

ExtendedPropertyDefinition propDef = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, "itemGUID", MapiPropertyType.String);
Contact contact = Contact.Bind(service, contactID, new PropertySet(propDef));

关于c# - 如何使用 Microsoft 的 EWS API 从联系人获取/设置扩展属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203574/

相关文章:

c# - 通过外键获取图像

exchangewebservices - EWS 托管 API - 如何将项目从一个邮箱复制到另一个邮箱

java - C# 到 Java for android

c# - 使用 PlayerPrefs 的 Unity Highscore 无法正常工作

.net - LinqToSql 在不同机器上为相同代码生成不同的 Sql 查询

c# - 如何在 'await' 引发 EventHandler 事件

c# - 读写name值文本文件的简单方法

c# - 使用 `GetConversationItems` 时抛出的调用者或应用程序无法使用请求的 Web 方法

c# - 如何匹配一个字符串,但前提是同一字符串尚未匹配或不匹配破折号?

c# - 如何仅在发布版本上请求管理员权限?