SharePoint 2010 - 是否可以使用 REST 填充数据表单 Web 部件?

SharePoint 2010 - is it possible to populate a dataform web part with REST?

我在 SharePoint 2010 中有一个自定义页面,它使用 DataFormWebPart 来显示一个非常大的列表(将近 5000 个项目)中的数据。我在 DataFormWebPart 中的 XSL 中定义了一个查询,该查询从列表中查询数据。当我将列表的大小增加到超过 5000 个项目时,我收到一条错误消息,提示我超出了列表视图阈值。

我正在使用一个简单的 CAML 查询来过滤列表中的数据。我的查询不应该 return 甚至接近 5000 个项目。我已经为我在查询中过滤的列打开了索引。除了可能尝试不同的数据源之外,我不确定此时还能尝试什么。

是否可以用 REST 调用替换对列表的 SPDataSource 调用?

编辑:这是 CAML 查询

<Query><Where><Contains><FieldRef Name='Location' /><Value Type='Lookup'>{$Location}</Value></Contains></Where></Query>

好的,这就是我的发现。

针对查找列的 文本值 进行过滤 在 CAML 查询中与超出列表视图的列表相比较阈值。

似乎索引查找列只会索引列值的 查找 ID,而不是查找值本身。

但是,您可以根据 CAML 查询中查找列的查找 ID 进行过滤。

示例:在 Timbuku 上过滤

例如,假设您要查询 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>

注意在 FieldRef 元素中添加 LookupId=\"true\"

即使超过了列表视图阈值,这仍然有效。

这对您意味着什么

总的来说,这对您的 web 部件来说不是个好消息。

您需要先在位置查找列表中查询与所需值相对应的任何项目,然后使用这些项目的 ID 来过滤您的实际数据。

这实际上用 REST 或 JavaScript 对象模型以编程方式完成并不难,但这意味着您可能需要废弃现有的 XSLT Web 部件。