簡體   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