web-dev-qa-db-ja.com

SharePoint2013-REST)を介してSPListItemバージョンを取得します

バージョン管理が有効になっているSharePoint2013リストがあります。 RESTを介してSPListItemバージョンリストを取得する必要があります。そのリクエストでSPListItemを取得できます:http://spbreportportal/Projects/_api/lists/getbytitle('Projects')/Items(1)しかし、ドキュメントとそれに応じて、このアイテムのすべてのバージョンを取得する方法が見つかりません。出来ますか?

REST/CSOMAPIを介してList Itemのバージョンを取得することはできないようですが、代替オプションがあります

Versions.aspxアプリケーションページの使用

アイデアは、バージョンページへの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);
});

リストの使用SharePointWebサービス

別のオプションは、公開するリスト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"));
    });  
  }
}); 
18

注:これは2013年には機能しないようです。SharePointOnlineで機能することを確認しましたが、mayで機能する可能性があります。 2016+ですが、後者については検証していません。

この質問が最初に投稿されてから状況が変わった可能性がありますが、REST APIを使用して、リスト/ライブラリアイテムのバージョン履歴を取得できるようになりました。

https://url/to/site/_api/web/Lists/getbytitle('MyListName')/items(ITEMID)/versions

これにより、現在のバージョンと過去のすべてのバージョンの一連の結果が返され、各バージョンのアイテムの列の値が返されます。

他のRESTエンドポイントと同様に、$select$filterなどを使用して、結果をさらに操作できます。

3
JLRishe

@Vadimに追加するにはGremyachevの「GetversionCollection」を使用するための優れた答え:このインターフェイスには、古い学校のSOAPを使用してアクセスすることもできます。残念ながら、一度に1つのフィールドしか返されません(したがって、多くの呼び出しを使用します...)。 C#スニペットは以下のとおりです。

        //https://blogs.msdn.Microsoft.com/pinch-perfect/2016/06/04/sharepoint-web-services-read-version-history-for-column-changes/
        //http://www.indy.gov/eGov/City/DCE/Permits/Signs/_vti_bin/lists.asmx?op=GetVersionCollection
        //https://www.codeproject.com/Articles/26338/Using-the-GetListItems-GetVersionCollection-and-Up
        string strSite = 
        string strListGuid = 
        string strListItemID = 
        string strFieldName = "Title" // or some other field name
        string requestXML = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" +
                            "<soap:Body>" +
                            "<GetVersionCollection xmlns='http://schemas.Microsoft.com/sharepoint/soap/'>" +
                            "<strlistID>"+ strListGuid + "</strlistID><strlistItemID>" + strListItemID + "</strlistItemID>" +
                            "<strFieldName>"+ strFieldName +"</strFieldName>" +
                            "</GetVersionCollection>" +
                            "</soap:Body>" +
                            "</soap:Envelope>";
        object xmlRequestObj = Activator.CreateInstance(Type.GetTypeFromProgID("Microsoft.XMLHTTP"));
        MSXML2.XMLHTTP xmlRequest = (MSXML2.XMLHTTP)xmlRequestObj;
        xmlRequest.open("Get", strSite + "/_vti_bin/Lists.asmx", false, null, null);
        xmlRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        xmlRequest.setRequestHeader("SOAPAction", "http://schemas.Microsoft.com/sharepoint/soap/GetVersionCollection");
        xmlRequest.send(requestXML);
        string responseText = xmlRequest.responseText;
1

REST APIでは、プロパティOData__UIVersionStringを選択できます。OData__ModerationStatusもサポートしています。

例:

GET http://site url/_api/web/lists/GetByTitle(‘Test')/items(item id)?$select=OData__UIVersionString,OData__ModerationStatus

詳細: https://msdn.Microsoft.com/en-us/library/office/dn292552.aspx

すべてのバージョンまたは特定のバージョンを取得することは解決策ではありませんが、バージョンに関する詳細情報です。

1
Philippe Lavoie