我使用 Microsoft Graph API 开发了一个 API。我遇到以下问题。
我拨打的网址:
/v1.0/sites/root/lists/cb32cc85-5351-423d-b2ec-bb418c1d9c64/items?
$filter=fields/Created gt '2018-1-1T00:00:00'
&expand=fields
&$orderby=createdDateTime
&$top=10
API 返回错误:
“Created”字段无法在过滤器或 orderby 中引用,因为它未建立索引。提供“allowthrottleablequeries”首选项以允许执行此操作,但请注意,此类查询可能会在大型列表上失败。
如何启用
allowthrottleablequeries
,正如它所说,我应该如何实现这一点?
恐怕这不是一个非常清晰或有用的错误消息。据我所知,实际上没有办法启用
allowthrottleablequeries
。
当 SharePoint 列表变得太大而无法处理非索引列的筛选或排序时,就会发生这种情况。解决方法是在列表设置中的
created
列中添加索引。您可以在向 SharePoint 列添加索引中找到有关如何完成此操作的说明。
尝试使用以下请求标头发送您的请求
首选:允许可调节查询
如果不起作用,请尝试以下请求标头
首选:HonorNonIndexedQueriesWarningMayFailRandomly
在 Java SDK 中,您可以通过将标头添加到图形调用的 .get(GetRequestConfiguration) 部分来将标头添加到请求中。
这里是获取网站中所有 pdf 文件的示例,其中包含设置标题、过滤和扩展的示例。
private final String siteIdProductDevelopment = "your site ID";
private final String sharedDocumentsListId = "you list id";
var result = graphServiceClient.sites()
.bySiteId(siteIdProductDevelopment)
.lists()
.byListId(sharedDocumentsListId)
.items()
.get(request ->
request.headers.add("Prefer",HonorNonIndexedQueriesWarningMayFailRandomly");
request.queryParameters.expand = new String []{"fields"};
request.queryParameters.filter = "fields/ContentType eq 'Document' and fields/DocIcon eq 'pdf'";
})
.getValue();