我在SharePoint 2010中有一个自定义页面,它使用DataFormWebPart显示来自非常大的列表(近5000个项目)的数据。我在DataFormWebPart中的XSL中定义了一个查询,该查询从列表中查询数据。当我将列表的大小增加到超过5000个项目时,我收到一条错误消息,说我超出了列表视图阈值。
我使用简单的CAML查询来过滤列表中的数据。我的查询永远不会返回甚至接近5000项。我已为我在查询中过滤的列启用了索引编制功能。我不知道还有什么可以尝试,除了可能尝试不同的数据源。
是否可以使用REST调用将SPDataSource调用替换为列表?
编辑:这是CAML查询
onCreate
答案 0 :(得分:1)
好的,这是我发现的。
根据查询列的文本值进行过滤,不在CAML查询中对比超出列表视图阈值的列表。
对索引列建立索引似乎只会索引列值的查找ID ,而不是查找值本身。
但是,您可以在CAML查询中过滤查阅列的查找ID。
例如,我们假设您要查询Location
查找列设置为" Timbuktu"的任何项目。
您可以使用此查询:
<Where>
<Eq>
<FieldRef Name=\"Location\" />
<Value Type=\"Lookup\">Timbuktu</Value>
</Eq>
</Where>
该查询将一直有效,直到列表达到列表视图阈值5000,此时它将失败,即使Location
列已编入索引。
要解决此问题,您可以在外国列表中找到Timbuktu的相应项目并确定其ID。让我们说它是42.您可以在查询中使用ID号,如下所示:
<Where>
<Eq>
<FieldRef Name=\"Location\" LookupId=\"true\" />
<Value Type=\"Lookup\">42</Value>
</Eq>
</Where>
请注意在LookupId=\"true\"
元素中添加了FieldRef
。
即使超过列表视图阈值,它也能正常工作。
总的来说,这对你的网络部分来说不是好消息。
您需要首先查询位置查找列表中与所需值对应的任何项目,然后使用这些项目的ID来过滤您的实际数据。
使用REST或JavaScript对象模型,以编程方式实现这一点并不困难,但这意味着您可能需要废弃现有的XSLT Web部件。