EWS按主题搜索约会

时间:2014-10-02 15:54:07

标签: c# asp.net exchangewebservices ews-managed-api

我正在使用EWS托管API 2.0。我希望将来可以搜索日历以换取预约的主题。

警告是:

  1. 仅返回与主题匹配的未来约会=" test"
  2. 仅在接下来的90天内返回未来的约会
  3. 我可以让CalendarView在接下来的90天内返回约会,但无法弄清楚如何使用SearchFilter进行过滤。为了获得最佳性能,我宁愿不返回所有约会,然后过滤。

    我可以使用ItemView和SearchFilter按主题过滤约会。但是,这并没有过滤掉已经发生的约会。它返回与过滤器匹配的所有内容。

    理想情况下,如果我可以在SearchFilter中使用CalendarView,但收到错误"可能没有为CalendarView指定限制和排序顺序,那就太好了。"

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

    任何帮助都会很棒......谢谢!

2 个答案:

答案 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>

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

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