SharePoint 2013 - 通过REST获取SPListItem版本

Nik*_*kiy 7 sharepoint sharepoint-2013

我有一个启用了版本控制的SharePoint 2013列表.我需要通过REST获取SPListItem版本列表.我可以通过该请求获取SPListItem:http://spbreportportal/Projects/_api/lists/getbytitle('Projects')/Items(1) 但我无法在文档中找到并在响应中如何检索此项目的所有版本.可能吗?

Vad*_*hev 18

似乎不可能获得List Item通过REST/CSOM API的版本,但有其他选择

使用Versions.aspx应用页面

我们的想法是对Versions页面执行get请求: http://<server>/<site>/_layouts/versions.aspx?list={litsID}&ID=<itemID>

function getItemVersions(url,listId,itemId,success)
{
   var versionsUrl = url + '/_layouts/versions.aspx?list=' + listId + '&ID=' + itemId;  
   $.get( versionsUrl, function( data ) {
      var versionEntries = parseVersionList(data);
      success(versionEntries);
   });
}


function parseVersionList(data){
   var entries = {};
   var versionList = $(data).find('table.ms-settingsframe');


   versionList.find('tbody > tr').each(function(i){
     if(i > 0 && (i-1) % 2 == 0) {
        var verRow = $(this); //get version row
        var propsRow = verRow.next(); //get properties row
        var versionLabel = verRow.find('td:first').html().trim();
        entries[versionLabel] = {};
        //extract item properties from propsRow goes here
        //...
     }

   });   
   return entries;
}


//Usage
var webUrl = _spPageContextInfo.webAbsoluteUrl;
var listId = _spPageContextInfo.pageListId;
var listItemId = 1;
getItemVersions(webUrl,listId,listItemId,function(versionEntries){
  console.log(versionEntries);
});
Run Code Online (Sandbox Code Playgroud)

使用列表SharePoint Web服务

另一个选项是利用列表SharePoint Web服务公开Lists.GetVersionCollection方法返回SharePoint列表中指定字段的版本信息

SPServices示例:

$().SPServices({
  operation: "GetVersionCollection",
  async: false,
  strlistID: "Projects",
  strlistItemID: 1,
  strFieldName: "Description",
  completefunc: function (xData, Status) {
    $(xData.responseText).find("Version").each(function(i) {
      console.log("Name: " + $(this).attr("Description") + " Modified: " + $(this).attr("Modified"));
    });  
  }
}); 
Run Code Online (Sandbox Code Playgroud)


JLR*_*she 5

注意:这似乎在 2013 年不起作用。我已经在 SharePoint Online 中验证了它的工作原理,它可能在 2016 年以后工作,但我还没有验证后者。

自从这个问题最初发布以来,情况可能已经发生了变化,但现在可以使用 REST API 来获取任何列表/库项目的版本历史记录:

https://url/to/site/_api/web/Lists/getbytitle('MyListName')/items(ITEMID)/versions
Run Code Online (Sandbox Code Playgroud)

这将返回当前版本和所有过去版本的一系列结果,以及每个版本的项目列值。

与其他 REST 端点一样,您可以使用$select$filter等来进一步操作结果。