繁体   English   中英

如果联系人在GAL中,则Exchange Web服务(EWS)FindItems无效

[英]Exchange Web Service (EWS) FindItems does not work if contact is in GAL

我创建了一个小型应用程序,该应用程序从外部源获取Contact对象。 然后,根据某些配置,我必须在我们的交换服务器上的用户的联系人文件夹中创建/更新这些联系人,以便该用户下次打开其MS Outlook时,看到新的联系人(在交换服务器上,具有模拟功能的用户,因此无需担心安全性)。

为此,我使用了效果很好的EWS库的FindItems(folderId, filter, view)方法。 对于过滤器,我使用的是用户的电子邮件地址,这是一个很好的钥匙...如果返回结果,这仅意味着该联系人已经存在,并且我需要进行更新而不是创建。 一切正常,直到这里...

但是,当GAL(全局地址列表)中已经有联系人 (实际上是电子邮件地址)时,我遇到了一个问题。 在这种情况下,即使联系人存在于文件夹中, FindItems方法也不会返回任何结果! 似乎(这是一个假设)交换服务器为具有GAL中已经存在的电子邮件地址而不是新联系人的联系人创建了链接。 这可以解释为什么在这种情况下, FindItems方法不返回任何内容。 奇怪的是,如果我要过滤另一个属性(例如,名字和姓氏的组合),它将起作用!

当前,发生的情况是,对于GAL中已经存在的每个联系人 ,都完成了创建而不是更新的操作(因为FindItems方法不返回任何内容),结果,同一联系人被创建了X次(而不是创建了beeing)一次,然后更新X-1时间)。

问题当然是,当GAL中已经存在某个联系人时,如何知道该联系人是否存在于交换文件夹中?

当前代码:

ItemView view = new ItemView(5)
{
   PropertySet = new PropertySet(BasePropertySet.FirstClassProperties)
};
SearchFilter f = new SearchFilter.IsEqualTo(ContactSchema.EmailAddress1, email);
FindItemsResults<Item> contactItems = _service.FindItems(folderId, f, view);
int resultCount = contactItems.Count(); // Always 0 if GAL, otherwise it works

最后,我通过使用SetExtendedProperty方法解决了扩展属性的问题。 在这个扩展字段中,我只需输入一个Id解决问题。

但这并不能解释为什么搜索无法使用电子邮件地址 ...如果有人知道答案,我仍然很感兴趣:)

新的搜索如下所示:

ItemView view = new ItemView(nb);
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, _extendedPropDef);
SearchFilter f = new SearchFilter.IsEqualTo(_extendedPropDef, contact.Id);
FindItemsResults<Item> contactItems = _service.FindItems(folderId, f, view);

使用此代码,一切都按预期进行...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM