2013-09-25 50 views
1

我創建了一個小型應用程序,獲取聯繫從外部源對象。然後,根據一些配置,我要創建/ upadate在用戶的聯繫人文件夾這些接觸我們的Exchange服務器上,那麼該用戶打開它的MS Outlook的下一次,他看到了新的聯繫人(在Exchange服務器上,我有具有模擬能力的用戶,所以安全性不是問題)。的Exchange Web服務(EWS)FindItems不工作,如果接觸是在GAL

對於這一點,我使用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 

回答

0

最後,我通過使用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); 

使用此代碼,一切都按預期工作...

相關問題