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 部件。
我在 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 部件。