使用 REST 获取 SharePoint 视图项

Posted

技术标签:

【中文标题】使用 REST 获取 SharePoint 视图项【英文标题】:Using REST to fetch SharePoint View Items 【发布时间】:2015-01-09 04:01:48 【问题描述】:

我正在尝试构建正确的 URL 以使用 REST api 在 SharePoint 视图中返回项目。

使用我的浏览器和以下 URL,我可以返回列表中的项目。

https://mysharepoint.sharepoint.com/sites/MySite/_api/web/lists/getbytitle('Announcements')/Items

我可以使用以下 URL 获取视图定义。

https://mysharepoint.sharepoint.com/sites/MySite/_api/web/lists/getbytitle('Announcements')/Views/getbytitle('Latest News')/

但我无法弄清楚我需要在该 URL 的末尾放置什么才能真正获取视图返回的项目。

【问题讨论】:

【参考方案1】:

SP.View object 确实包含任何操作列表项的方法。但是SP.View object 包含SP.View.viewQuery property,它指定列表视图使用的查询。这意味着可以使用以下方法来检索列表项以供查看:

使用SP.View.viewQuery property 执行第一个请求以获取列表视图的 CAML 查询 通过指定 CAML 查询执行第二个检索列表项的请求

如何使用 REST API 使用 javascript 返回列表视图的列表项

function getJson(url) 

    return $.ajax(       
       url: url,   
       type: "GET",  
       contentType: "application/json;odata=verbose",
       headers:  
          "Accept": "application/json;odata=verbose"
       
    );



function getListItems(webUrl,listTitle, queryText) 

    var viewXml = '<View><Query>' + queryText + '</Query></View>';
    var url = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/getitems"; 
    var queryPayload =   
               'query' : 
                      '__metadata':  'type': 'SP.CamlQuery' , 
                      'ViewXml' : viewXml  
               
    ;

    return $.ajax(
           url: url,
           method: "POST",
           data: JSON.stringify(queryPayload),
           headers: 
              "X-RequestDigest": $("#__REQUESTDIGEST").val(),
              "Accept": "application/json; odata=verbose",
              "content-type": "application/json; odata=verbose"
           
     );



function getListItemsForView(webUrl,listTitle,viewTitle)

     var viewQueryUrl = webUrl + "/_api/web/lists/getByTitle('" + listTitle + "')/Views/getbytitle('" + viewTitle + "')/ViewQuery";
     return getJson(viewQueryUrl).then(
         function(data)         
             var viewQuery = data.d.ViewQuery;
             return getListItems(webUrl,listTitle,viewQuery); 
         );

用法

getListItemsForView(_spPageContextInfo.webAbsoluteUrl,'Announcements','Latest News')
.done(function(data)

     var items = data.d.results;
     for(var i = 0; i < items.length;i++) 
         console.log(items[i].Title);
         
)
.fail(
function(error)
    console.log(JSON.stringify(error));
);

【讨论】:

感谢您提供如此详细的答复。顺便说一句,有人知道为什么没有一种方法可以在视图中返回项目吗? API 期望开发人员构造和执行查询似乎很奇怪。 @Vadim,这是一个很棒的答案。但是,是否可以只检索该视图的可见字段。因为上面的代码会检索到很多不需要的字段。理想情况下,我不想将字段名称传递为 items[i].Title 。有这种可能吗? @Mihir,我相信通过SP.View.viewFields property返回Gets a value that specifies the collection of fields in the list view.是可行的

以上是关于使用 REST 获取 SharePoint 视图项的主要内容,如果未能解决你的问题,请参考以下文章

text 更新项REST API调用SharePoint 2013

javascript 删除项REST API调用SharePoint 2013

SharePoint REST API 的 Expand 方法

SharePoint REST API 的 Expand 方法

如何使用 Rest 在 SharePoint 中获取多个模板类型列表

SharePoint 2013 - 通过 REST 获取 SPListItem 版本