Microsoft Graph“消息”增量请求使用日期过滤器会截断太多结果

时间:2019-01-22 19:40:39

标签: microsoft-graph

我认为我在增量API上发现了日期过滤错误。

我发现在使用Office 365 Graph API的一个电子邮件帐户中,“消息”图形API增量请求返回的项目数与预期时间范围内文件夹中的实际数量不同。 。该文件夹中有15万个项目,涵盖了10年,但增量仅返回了过去60天左右的最后5,000项。

分页效果很好

在图形API中查询文件夹“收件箱”时,它总共有154,045个项目和57456个未读项目。

IUserMailFoldersCollectionPage foldersPage =
                await client.Users[mailboxid].MailFolders.Request().GetAsync();

我可以使用分页跳过10,000、50,000或更多消息。

model.messages = await client.Users[mailboxid].MailFolders[folderid].Messages.Request().Top(top)
                    .Skip(skip).GetAsync();

带有日期过滤器的增量不起作用

但是,当使用nextToken和deltaTokens循环时,deltaToken出现在5000条左右的电子邮件消息之后。基本上,即使过滤器说了过去20年的查找消息,它似乎似乎只返回最近几个月的结果。

以下是我们如何生成Delta请求的示例。时间在这里是硬编码的,但实际上它是一个变量。

var sFilter = $"receivedDateTime ge {DateTimeOffset.UtcNow.AddYears(-20).ToString("yyyy-MM-dd")}";
model.messages = await client.Users[mailboxid].MailFolders[folderid].Messages.Delta().Request()
                    .Header("Prefer", "odata.maxpagesize=" + maxpagesize)
                    .Filter(sFilter)
                    .OrderBy("receivedDateTime desc")
                    .GetAsync();

然后在每个分页操作中执行以下操作。 “ nexttoken”是下一个或增量链接,具体取决于从第一个请求返回的内容。

model.messages = new MessageDeltaCollectionPage();
                model.messages.InitializeNextPageRequest(client, nexttoken);
                model.messages = await model.messages.NextPageRequest
                    .Header("Prefer", "odata.maxpagesize=" + maxpagesize)
                    .GetAsync();

没有过滤器的Delta有效

如果我对上面的delta做完全相同的代码,但是删除了日期上的“ Filter”操作,那么我会在文件夹中得到所有消息。

这不是一个很好的解决方案,因为我通常只需要过去一年或两年的消息,如果有15年的消息,查询所有内容将是巨大的浪费。

1 个答案:

答案 0 :(得分:1)

Paul,我的同僚确认,如果将$ filter应用于消息资源的增量查询,则确实存在5000个项目的限制。 在第二天之内,docs也将使用此信息进行更新。感谢您的耐心配合和支持!