我正在尝试开发一个html/css/js前端,它允许我像搜索普通列表一样搜索SharePoint在线列表。这对MS Sharepoint来说是出乎意料的不可能。
通过反复试验和阅读稀疏的文档,我完成了以下操作:
- 我尝试使用搜索Rest API,但它不允许后缀匹配,因此*arepoint不会返回包含sharepoint等单词的项
- 我尝试使用CAML查询,但它不允许我跳转到页面,因为我无法定义起始行
- 我尝试使用列表过滤,但它的";子字符串";过滤器不允许我搜索多行文字
基本上,它们三个似乎都至少有一个明显的问题阻碍了正常使用。
我想知道是否有人找到了解决这三种方法中任何一种问题的方法。
我没有粘贴代码,因为我遇到的问题是API本身,但如果需要,我可以发布它们。微软Sharepoint直截了当地表示,它不支持后缀匹配,也不支持像打脸一样的进一步解释。
编辑:到目前为止,我的解决方法是将所有项目作为一个巨大的JSON,并在客户端进行搜索和过滤,但对于我的900行列表来说,这已经很慢了。
谢谢,
更新:哇,我一直在尝试CAML,因为它看起来是三个中最好的,但也是最难的。到目前为止,我最好的解决方法是两阶段同时搜索。。。
一个函数搜索前20-30行并很快返回结果,这样用户就可以快速滚动。
另一个功能同时启动并搜索整个列表。它只返回ID,只是为了构建分页按钮。它很慢,但我仍然很固执,不使用左右键而不分页,因为ew。
更新:以下是我的sharepoint搜索功能:git
您可以使用相同的sp_listSearch搜索前30个项目,然后使用sp_getRecordsFromList获取这30个项目的全部详细信息。
在没有行限制的情况下再次运行sp_listSearch,以便它返回所有匹配项的所有ID(可能需要很长时间(,然后为所有这些ID编程您自己的页面加载功能。。。比如在名为page1的按钮中每隔30个id放置一次,以此类推,然后在单击按钮时运行sp_getRecordsFromList。
我猜您使用的是旧的Sharepoint,因为您尝试了与我相同的caml查询。我有一个部分解决方案,但如果你想在向用户显示所有查询时搜索它们,你不能,因为caml查询没有告诉它前100行,然后从101到200行的选项。
您可以使用搜索输入过滤caml查询,然后,您可以应用datatablesjquery来搜索该结果和分页。像这个示例一样,u引入filter参数,并像SQL一样获得精确的结果。只需将视图数据发送到模型,然后从模型发送到查询。它在c上。
camlQuery.ViewXml = @"<View>
<Query>
<Where>
<Eq>
<FieldRef Name='CI' />
<Value Type='Text'>" + model.Carnet +"</Value></Eq></Where></Query></View>";
这会准确地返回指定的结果,所以您不会得到900行
尝试saketa-caml查询生成器来测试您的查询。
您可以使用行限制来限制查询,但要快速查询而不获取100000行,最快捷的解决方案是像以前一样使用搜索参数来限制查询。此外,我也没有找到停止100000行查询的解决方案。
这是允许分页和搜索的数据表,但它不会限制查询行。所有文档都在datatables.net 上
<script type="text/javascript" src="~/Scripts/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="~/Scripts/dataTables.bootstrap5.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#tblResultados').dataTable({
"language": {
"url": "//cdn.datatables.net/plug-ins/1.10.16/i18n/Spanish.json"
},
order: [[0, 'desc']],
"iDisplayLength": 25,
"lengthMenu": [25, 50, 100]
});
});
</script>