2014-10-02 58 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方法,即执行定期约会复发扩张。

缺点是它不支持搜索过滤器...所以你必须单独过滤主题。

有没有人有更好的解决方案?任何帮助将不胜感激。谢谢。