我认为我在增量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做完全相同的代码,但是删除了日期上的“ Filter”操作,那么我会在文件夹中得到所有消息。
这不是一个很好的解决方案,因为我通常只需要过去一年或两年的消息,如果有15年的消息,查询所有内容将是巨大的浪费。
答案 0 :(得分:1)
Paul,我的同僚确认,如果将$ filter应用于消息资源的增量查询,则确实存在5000个项目的限制。 在第二天之内,docs也将使用此信息进行更新。感谢您的耐心配合和支持!