SharePoint 2003 用REST方式访问列表 Filter等高级操作。

原创 2016年05月30日 11:44:28

首先为了方便在chrome 里调试Rest 结果。这里先介绍如URL

https://xxx.xxx.com.cn/itc/_api/web/GetFolderByServerRelativeUrl('JSdocs')/files?$filter=Title%20eq%20%27test%27

说明:使用这个句子: https://xxx.xxx.com.cn/itc/_api/web/GetFolderByServerRelativeUrl('JSdocs')/files 是检查文档库 JSdocs 下面的所有文件。

整个代码是 查找文库Tilte 等于 test 其结果如下图。


其中REST的一些高级操作,在前面的文章里有介绍,这里再复制一下。

高级操作

SharePoint 2013 REST 接口功能强大,但有一定的复杂性。 该接口支持对其返回的数据执行排序、筛选和排列操作。 此外,它还支持大量的 SharePoint 特有操作。 较之标准的 REST 实现,这些附加能力丰富了功能,拉大了优势。 下面的章节将探讨一些您在使用 REST 和 SharePoint 时会遇到的最重要的因素。

筛选、选择和排序 可以使用 OData 系统查询选项控制返回何种数据及如何对其排序。 图 2 列出了支持的选项。

图 2 数据筛选和排序选项

选项 用途
$select 指定在返回的数据中包含哪些字段。
$filter 指定返回集合中的哪些成员(如列表中的项目)。
$expand 指定返回联接列表中的哪些投射字段。
$top 仅返回集合或列表的前 n 个项目。
$skip 跳过集合或列表的前 n 个项目并返回其余项目。
$orderby 指定用于在返回前对数据排序的字段。

例如,要从名为 Books 的列表中返回作者、标题和 ISBN,可以使用:


          _api/web/lists/getByTitle('Books')/items?$select=Author,Title,ISBN
        

如果未使用 $select 选项,则返回所有字段(耗用较多服务器资源才能返回的字段除外)。 如果需要这些字段,则需使用 $select 选项并指定其名称。 要获取所有字段,可使用 $select=‘*’。

要获取马克·吐温 (Mark Twain) 的所有书籍,可使用:


          _api/web/lists/getByTitle('Books')/items?$filter=Author eq 'Mark Twain'
        

有关 $filter 选项支持的所有运算符的列表,请参阅 bit.ly/Zlqf3e 处的 MSDN 库文章“使用 SharePoint 2013 REST 服务编程”。

要按标题升序排序书籍,可使用:


          _api/web/lists/getByTitle('Books')/items?$orderby=Title asc
        

要指定降序,请使用“desc”代替“asc”。 要按多个字段排序,请指定一个以逗号分隔的字段列表。

可以使用“&”运算符结合多个选项。 要仅获取马克·吐温的前两部书籍的标题,可使用:


          _api/web/lists/getByTitle(
  'Books')/items?$select=Title&$filter=Author eq 'Mark Twain'&$top=2
        

该服务会待前一个选项解析完成,再开始应用下一个。 也就是说,每个选项仅应用于由 URL 中其左边的选项所产生的数据集。 因此,选项的应用顺序会产生不同的结果。 例如,下面的 URL 将返回 3-10 的项目:


          _api/web/lists/getByTitle('Books')/items?$top=10&$skip=2
        

但颠倒这两个选项则将返回 3-12 的项目:


          _api/web/lists/getByTitle('Books')/items?$skip=2&$top=10
        

使用降序 $orderby 和 $top 选项(按该顺序指定选项)可获取最后 n 个项目。 下面的 URL 可获取最后两个项目:


          _api/web/lists/getByTitle('Books')/items?$orderby=ID desc&$top=2
        

当 SharePoint 列表拥有到其他列表的查找字段时,它实际上会用作两个列表的联接。 可以使用 $expand 选项返回该联接列表的投射字段。 例如,如果 Books 列表有一个查找 Publisher 列表中 Name 字段的 PublishedBy 字段,则可使用下面的 URL 返回这些名称:


          _api/web/lists/getByTitle(
  'Books')/items?$select=Title,PublishedBy/Name&$expand=PublishedBy
        

请注意,可使用语法 lookup_column_display_name/foreign_column_name 而不是 foreign_list_name/foreign_column_name 引用外部列表中的列。 还有一点很重要的是,选择查找字段名称就一定会展开它。

操作文件和文件夹 访问文档库的最佳方式是借助在 /_api/web 处可用的 GetFolderByServerRelativeUrl 方法。 向文档库中添加文件时,需要在请求正文中发送文件内容,并在 URL 中传递文件的名称:


          http://<site url>/_api/web/GetFolderByServerRelativeUrl(
  '/Shared Documents')/Files/add(url='a.txt',overwrite=true)
        

更新文件时的一个重要注意事项是只能使用 PUT HTTP 方法。 因此,无法将一个文件的内容合并到已存储在文档库中的文件中。 这样做的结果是使用该文件的某个版本替换掉另一个。 另外,请务必在 URL 中使用 $value 运算符,以便访问文件本身的内容,而非与该文件关联的元数据:


          http://<site url>/_api/web/GetFileByServerRelativeUrl(
  '/Shared Documents/a.txt')/$value
        

在对文件作出任意更改前将其签出是 SharePoint 中的一个最佳做法,因此,应该在更新文件前将其签出,并在完成操作后将其重新签回。 下面的操作需要向这些 URL 发送 POST 请求(请求正文为空):


          http://<site url>/_api/web/GetFileByServerRelativeUrl(
  '/Shared Documents/a.txt')/CheckOut()
http://<site url>/_api/web/GetFileByServerRelativeUrl(
  '/Shared Documents/a.txt')/CheckIn(comment='Comment', checkintype=0)
        

CheckIn 方法有两个参数。 comment 参数的作用是向签入操作添加注释,checkintype 参数则用于指定此次操作为次要 (0) 还是主要 (1) 签入。



REST协议的一个特点,就是可以把我们需要的操作都浓缩在一个URL中(比如通过:_vti_bin/listdata.svc/Test(3)就可以获取到Test这个列表中ID为3的那个条目的信息,当然也可以通过一些特殊的写法实现简单的查询、排序功能),并可以通过GET、POST、PUT、DELETE、MERGE这几种HTTP访问方式,来实现列表数据的增、删、查、改。


通过REST协议访问数据的原理如下图所示:图来自于 MSDN


通过这种方式访问的时候,客户端使用JSON的格式把需要的数据通过某种HTTP方法发送至包含listdata.svc的Url地址上(如果是Get方法的话,就没有发送的数据),然后返回数据的时候,可以返回Xml格式(Atom协议),当然也可以返回JSON格式(如果不特别声明的话,默认使用Atom协议,也就是Xml格式)。
和客户端对象模型相同的是,我们通过Url,可以定义所需要返回的那些字段值,从而减少客户端和服务器端的数据传递大小。


获取指定字段数据  $select 
http://localhost/_vti_bin/ListData.svc/Test?$select=*       //获取Test表所有可用字段


http://localhost/_vti_bin/ListData.svc/Test?$select=Name,Url,Description        //获取Test表中字段名称为Name、Url、Description三个字段


获取前n条数据 $top

http://localhost/_vti_bin/ListData.svc/Test?$top=n       //获取Test表中的前n条数据   n为大于0的正整数


根据某字段排序  $orderby 支持多字段排序,字段间以逗号隔开 
http://localhost/_vti_bin/ListData.svc/Test?$orderby=PublishDate asc            //按PublishDate字段升序 支持asc/desc 


按条件晒选 $filter 
http://localhost/_vti_bin/ListData.svc/Test?$filter=Id le 10                 //晒选Id小雨等于10的项目

 

支持的运算符
数字:Lt、Le、Gt、Ge、Eq、Ne 
字符串:startsWith、substringof、Eq、Ne 
日期时间:day()、month()、year()、hour()、minute()、second() 
实现比较复杂的查询


http://localhost/_vti_bin/ListData.svc/Test
       ?$select=* 
             &$orderby=PublishDate,Id desc 
                    &$top=10 
                         &$filter=Id Ge 3


//选择Test表所有可用字段Id大于等于3的项目中的前10条记录,并按照PublishDate字段、Id字段降序排列

    • 利用$select选择指定列的数据、$orderby按某字段排序、$filter晒选数据时,若字段为系统内置字段,则字段名称为当前语言环境下的字段名称。例如中文「标题」字段,不能写为Title。必须为「标题」。
    • 用户自己添加的英文字段,字段名称首字母必须为大写。例如,新建字段命名为name,此字段作为url一部分时必须写为Name。
    • 另外,若用中文当做Url的一部分,会发生异常,此时要先把中文字段编码,然后把编码后的字段名称变量拼接到Url中

例如:var createDate = encodeURIComponent("标题"); 
var url = "/_vti_bin/ListData.svc/Test?$select=* 
&$orderby=" + createDate + " asc 
&$top=10& 
$filter=Name ne 'bear'"; 

  • 利用$filter晒选数据时,只能有一个晒选条件。
  • 复杂查询时,拼接Url时,须按照$select->$orderby->$top->$filter的顺序。

 

REST的使用方法                                                                                               


本节只介绍Jquery ajax以get方式异步请求。如果不指定数据的请求格式,则REST默认返回数据格式为XML格式。若要返回格式为json,则指定ajax请求的dataType:’json’或contentType:’application/json’即可。
调用代码如下: 
var createDate = encodeURIComponent("标题"); 
var url = "/_vti_bin/ListData.svc/Test?$select=* 
             &$orderby=" + createDate + " asc 
                      &$top=10& 
                            $filter=Name ne 'bear'";

$.ajax({ 
        type: 'get', 
        dataType: 'json', 
        url: url, 
        success: function (data) { 
            //result = data.d.results;  //查询所有列表项 
            result = data.d; //带条件查询 或$top=n 
        }, 
        error: function (a, b, c) { 
            alert(a + b + c); 
        }, 
        complete: function () { 
            callback(result); 
        } 
    });

注:当查询所有列表项为全部是result = data.d.results; 
带$filter或者$top时,result = data.d



问题:由于$filter只支持单个条件,所以对于复杂的查询要求可能无法直接达到要求。 
妥协方式:先根据Url按某条件筛选,然后在ajax请求完成后对结果进行进一步加工处理

 

重点实例:

 //var date = new Date('2015-08-17T03:39:07Z');
 //paramFilter += " and Modified ge datetime('" + new Date().toISOString() + "') ";

参考文档: 
http://msdn.microsoft.com/zh-SG/library/fp142385
http://blog.sina.com.cn/s/blog_5d93d7aa0101c5lt.html
http://technet.microsoft.com/zh-cn/magazine/gg552613(office.14).aspx
http://msdn.microsoft.com/en-us/library/ff798339.aspx


官方视频介绍

https://msdn.microsoft.com/library/office/jj860569%28v=office.15%29.aspx?f=255&MSPPError=-2147217396




相关文章推荐

如何在REST API中使用查阅项的值作为过滤条件

原文地址:点击打开链接
  • shrenk
  • shrenk
  • 2014年12月04日 09:44
  • 1223

SharePoint—用REST方式访问列表 Filter

REST的定义与作用                                                                                          ...

一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别

一、这四个方法的用处 1、用来编码和解码URI的 统一资源标识符,或叫做 URI,是用来标识互联网上的资源(例如,网页或文件)和怎样访问这些资源的传输协议(例如,HTTP 或 FTP)的字...
  • dz45693
  • dz45693
  • 2016年03月15日 14:11
  • 949

SharePoint REST API - 概述

博客地址:http://blog.csdn.net/FoxDaveSharePoint REST API不同于传统的Server Object Model和Client Object Model,是一...
  • FoxDave
  • FoxDave
  • 2017年05月01日 11:46
  • 1089

SharePoint—用REST方式访问列表 Filter

REST的定义与作用                                                                                          ...

sharepoint 2013 如何创建一个webservice获取sharepoint列表数据

我们在做sharepoint 2013的项目开发过程中,有时候需要用到webservice,webservice的好处就是方便其它应用系统直接或间接地操作sharepoint的列表数据。下面我们通过一...

SharePoint—用REST方式访问列表

REST的定义与作用                                                                                          ...

SharePoint REST API - 基本操作(一)

博客地址:http://blog.csdn.net/FoxDave 你可以使用SharePoint提供的REST接口执行基本的增删查改操作。REST接口暴露了所有的SharePoint客户端API中可...
  • FoxDave
  • FoxDave
  • 2017年08月04日 16:55
  • 708

SharePoint 2013 图文开发系列之列表定义高级篇

SharePoint列表库,是我们使用过程中最常用的库,下面,我们简单介绍下代码定义自定义列表,主要是如何使用列表模板修改自带的几个展示页面。 1、新建项目,SharePoint空项目,如下图: 2...

sharepoint隐藏列表操作项

  • 2014年10月29日 09:34
  • 35KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SharePoint 2003 用REST方式访问列表 Filter等高级操作。
举报原因:
原因补充:

(最多只允许输入30个字)