【发布时间】:2019-11-30 15:30:17
【问题描述】:
使用 Caml,我试图从 SharePoint Online 网站中撤回去年已修改的所有项目。查询导致错误指出:“禁止尝试的操作,因为它超出了管理员强制执行的列表视图阈值。”此阈值是 SharePoint Online 上的 5000 个项目,据我与 SharePoint 管理员讨论后无法修改。
这个错误有据可查,但我看过的解决方案都没有解决我的问题。
我以前通过在我的 Caml 查询中使用 <RowLimit></RowLimit> 标记并设置一个 $position 变量来跟踪我在每块 5000 个项目之后的位置,从而解决了这个问题。有关适用于超过 5000 个项目的列表的查询,请参见下文:
$query = @"
<View Scope="RecursiveAll">
<Query>
<OrderBy><FieldRef Name="Created" Ascending="false"/></OrderBy>
</Query>
<RowLimit Paged="TRUE">5000</RowLimit>
</View>
"@
以上工作。但是,它只是从某个库中获取所有内容。我现在要做的是获取过去一年中修改过的所有内容。这是我所拥有的:
$oneYearAgo = (Get-Date).AddDays(-365)
$oneYearAgoString = $oneYearAgo.ToString("yyyy-MM-ddTHH:mm:ssZ")
$query = @"
<View Scope='RecursiveAll'>
<Query>
<OrderBy><FieldRef Name='Modified' Ascending='false'/></OrderBy>
<Where>
<Geq>
<FieldRef Name="Modified"/>
<Value Type="DateTime">
$oneYearAgoString
</Value>
</Geq>
</Where>
</Query>
<RowLimit Paged="TRUE">5000</RowLimit>
</View>
"@
此返回“尝试的操作被禁止,因为它超出了管理员强制执行的列表视图阈值”错误,尽管两个 Caml 查询之外的逻辑几乎相同。
我的 Caml 查询有问题吗?
【问题讨论】:
-
Modified 列是否已编入索引?您可以在列表设置页面的列部分底部找到列表的索引列。
-
我遇到了我们的一位 SharePoint 管理员,但该列尚未编入索引。但现在是这样,不幸的是,我们仍然看到同样的错误。
标签: powershell sharepoint sharepoint-online caml