我正在使用EWS托管API 2.0。我希望将来可以搜索日历以换取预约的主题。
警告是:
我可以让CalendarView在接下来的90天内返回约会,但无法弄清楚如何使用SearchFilter进行过滤。为了获得最佳性能,我宁愿不返回所有约会,然后过滤。
我可以使用ItemView和SearchFilter按主题过滤约会。但是,这并没有过滤掉已经发生的约会。它返回与过滤器匹配的所有内容。
理想情况下,如果我可以在SearchFilter中使用CalendarView,但收到错误"可能没有为CalendarView指定限制和排序顺序,那就太好了。"
FindItemsResults<Item> findResults = svc().FindItems(fId, filter, cView);
任何帮助都会很棒......谢谢!
答案 0 :(得分: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 :(得分:1)
请注意,使用复合搜索过滤器时,如果主元素超出指定的时间范围,则不会出现重复序列。
这是因为定期系列中的事件(和例外)不是邮箱中的实际项目,而是作为附加到定期主服务器的内部存储。 ExchangeService.FindItems 方法不查看每个日历项的附件表以查找出现和异常。 (来源:http://msdn.microsoft.com/en-us/library/office/dn495614(v=exchg.150).aspx#bk_recurring)
因此,如果您正在处理重复发生的事件,那么您最好使用CalendarView和 CalendarFolder.FindAppointments 方法,该方法会针对定期约会执行重复扩展。< / p>
缺点是它不支持搜索过滤器...所以你必须单独过滤主题。
有人有更好的解决方案吗?任何帮助将不胜感激。感谢。