2014-10-02 73 views
3

我正在使用EWS託管API 2.0。我希望能夠在將來就任命主題交換日曆。EWS按主題搜索約會

的告誡是:

  1. 只能回到未來的約會相匹配的主題=「測試」
  2. 只有在未來90天內

回到未來的約會,我可以得到CalendarView返回約會在接下來的90天內,但無法弄清楚如何使用SearchFilter進行過濾。爲了獲得最佳性能,我寧願不返回所有約會,然後過濾。

我可以按主題使用ItemView和SearchFilter過濾約會。但是,這不會過濾出已經發生的約會。它返回匹配過濾器的所有內容。

理想情況下,如果我可以在SearchFilter中使用CalendarView但我收到錯誤「可能不會爲CalendarView指定限制和排序順序」。

FindItemsResults<Item> findResults = svc().FindItems(fId, filter, cView); 

任何幫助將是偉大的......謝謝!

回答

2

我想通了....

使用複合搜索過濾器,像這樣

 SearchFilter.SearchFilterCollection coll = new SearchFilter.SearchFilterCollection(LogicalOperator.And);    
     SearchFilter subjectFilter = new SearchFilter.ContainsSubstring(AppointmentSchema.Subject, "test"); 
     SearchFilter dateFilter = new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, DateTime.Today); 
     coll.Add(subjectFilter); 
     coll.Add(dateFilter); 

     FindItemsResults<Item> findResults = svc().FindItems(fId, coll, view); 
1

小心,使用複合搜索過濾器時,你不會得到一個反覆出現的一系列事件,如果主元件超出指定的時間範圍。

這是因爲重複序列中的發生次數(和例外次數)不是郵箱中的實際項目,而是作爲附件存儲在循環主數據中。 ExchangeService.FindItems方法不會查看每個日曆項目的附件表以查找出現和異常。 (來源:http://msdn.microsoft.com/en-us/library/office/dn495614(v=exchg.150).aspx#bk_recurring

所以,如果你正在處理的重複事件你(恕我直言)最好使用CalendarView和CalendarFolder.FindAppointments方法,即執行定期約會復發擴張。

缺點是它不支持搜索過濾器...所以你必須單獨過濾主題。

有沒有人有更好的解決方案?任何幫助將不勝感激。謝謝。