使用AQS按日期和时间在Exchange Web服务中搜索

时间:2017-03-21 11:43:38

标签: java exchangewebservices

我正在使用Java EWS API,而且我在使用AQS字符串搜索Exchange服务器中的邮件时遇到问题。

我需要在特定日期和时间之后收到所有消息。 只传递日期一切正常,问题就来了,当我打发时间。 我不确定我需要在查询中使用的格式,本文中缺少文档。

这是我的代码:

protected static void searchByCategoryAndDateOldVersion() throws Exception{
    ItemView view = new ItemView(Integer.MAX_VALUE);
    view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);

    String aqs = "category:categoryToSearch AND received:>=2017-03-21T10:35:00";

    FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox, aqs, view);

    service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);

    System.out.println("Items found: " + findResults.getTotalCount());

    for (Item item : findResults) {
        System.out.println(item.getSubject());
    }

}

正如我所说的,如果我在没有T10:35:00部分的情况下设置参数,那么一切正常。

如何告诉EWS在特定时间之后只检索消息?

P.S。我必须使用AQS作为Exchange版本我不支持使用SearchFilter进行类别搜索

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。

只需添加一个Calendar变量,使用DateFormat对其进行格式化并将其传递给查询字符串:

protected static void searchByCategoryAndDateOldVersion() throws Exception{
    ItemView view = new ItemView(Integer.MAX_VALUE);
    view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);

    Calendar calendar = new GregorianCalendar(2017, 2, 21, 10, 35, 0);
    Date time = calendar.getTime();

    DateFormat dateFormat = new SimpleDateFormat();
    String dateLimit = dateFormat.format(time);

    String aqs = String.format("category:categoryToSearch AND received:>=%s", dateLimit);

    FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox, aqs, view);

    service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);

    System.out.println("Items found: " + findResults.getTotalCount());

    for (Item item : findResults) {
            System.out.println(item.getSubject());
    }
}