使用REST获取SharePoint视图项

时间:2014-11-12 10:27:12

标签: rest sharepoint-2013

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

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

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

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

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

但我无法弄清楚我需要在该URL的末尾放置什么来实际获取View返回的项目。

1 个答案:

答案 0 :(得分:8)

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

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

如何使用JavaScript

使用REST API返回列表视图的列表项
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));
});