设为首页 收藏本站
查看: 747|回复: 0

[经验分享] SharePoint用REST方式访问查询列表

[复制链接]

尚未签到

发表于 2015-9-26 10:55:55 | 显示全部楼层 |阅读模式
REST的定义与作用  
  在SharePoint 2010中,基本上有如下几种数据访问方式:

  • 服务器端对象模型
  • LINQ to SharePoint
  • Web Service
  • 客户端对象模型
  • ADO.NET Data Service (REST协议)
  • ADO.NET Data Service (强类型)
  REST是SharePoint中一种数据访问方式,这种方式只支持列表数据访问接口,位于_vti_bin目录下的的listdata.svc。
  
REST的特点及原理
  REST协议的一个特点,就是可以把我们需要的操作都浓缩在一个URL中(比如通过:_vti_bin/listdata.svc/Test(3)就可以获取到Test这个列表中ID为3的那个条目的信息,当然也可以通过一些特殊的写法实现简单的查询、排序功能),并可以通过GET、POST、PUT、DELETE、MERGE这几种HTTP访问方式,来实现列表数据的增、删、查、改。
  
通过REST协议访问数据的原理如下图所示:
DSC0000.jpg
  
图 01
通过这种方式访问的时候,客户端使用JSON的格式把需要的数据通过某种HTTP方法发送至包含listdata.svc的Url地址上(如果是Get方法的话,就没有发送的数据),然后返回数据的时候,可以返回Xml格式(Atom协议),当然也可以返回JSON格式(如果不特别声明的话,默认使用Atom协议,也就是Xml格式)。
和客户端对象模型相同的是,我们通过Url,可以定义所需要返回的那些字段值,从而减少客户端和服务器端的数据传递大小。
  
REST数据访问常用语法   
  这里主要介绍GET方式访问数据的语法,即Url语法。
例如:获取Test表所有数
  http://localhost/_vti_bin/ListData.svc/Test()
  根据Id获取数据项
  http://localhost/_vti_bin/ListData.svc/Test(1)    //获取Test表Id为1的数据项
  获取指定字段数据  $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的项目
  按条件晒选 $filter
http://localhost/_vti_bin/ListData.svc/Test?$filter=substringof('xxx',Name)               //晒选Name中包含xxx的
  
REST支持的运算符   
  数字: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字段降序排列
  
REST语法注意事项   


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

  • 可以在List中拼接好字符然后搜索
  • 可以用translate(., "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")来转化成小写
  参考文档:
http://msdn.microsoft.com/zh-SG/library/fp142385
http://technet.microsoft.com/zh-cn/magazine/gg552613(office.14).aspx
http://msdn.microsoft.com/en-us/library/ff798339.aspx
   

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-119011-1-1.html 上篇帖子: .net 上传文档到sharepoint的2种方法 下篇帖子: 精彩sharepoint文章导读
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表