首页 > 解决方案 > 如何使用 SharePoint 2013 REST API 从当前主要版本(非草稿)获取页面标题

问题描述

我正在使用 SharePoint REST API

_api/web/GetFileByServerRelativeUrl('/Pages/file1.aspx')/majorversion

获取文件的主要版本,但我还需要获取与该主要版本关联的页面标题。草稿版本的标题与主要发布版本不同。我一直在尝试

_api/web/GetFileByServerRelativeUrl('/Pages/file1.aspx')/versions(majorversion)

或者_api/web/GetFileByServerRelativeUrl('/Pages/file1.aspx')?$select=title, versions&$filter=IsCurrentVersion%20eq%20true

但与主要版本相关的标题没有运气,查询只返回最新草稿版本的标题。我也尝试使用_api/web/GetFileByServerRelativeUrl('_vti_history/1536/Pages/file1.aspx'),但收到 HTTP 500 错误。有什么建议么?

标签: restsharepoint-2013

解决方案


You may check the JS function shared by shawnadrockleonard in github

function getListItemByVersionPage(listWebUrl, listId, listItemId, fieldName) {

    var glibvpdef = new jQuery.Deferred();

    var versionsUrl = listWebUrl + '/_layouts/versions.aspx?list=' + listId + '&ID=' + listItemId;

    jQuery.get(versionsUrl)
     .done(function (data) {

         var entries = [];
         var versionList = $(data).find('table.ms-settingsframe');
         if (typeof (versionList) !== typeof (undefined) && versionList !== null) {

             versionList.find('tbody > tr').each(function (i, trval) {
                 // pulls every 2 rows
                 if (i > 0 && (i - 1) % 2 == 0) {
                     try {
                         var verRow = $(this); //get version row
                         var versionLabel = verRow.find('td:first').html().trim();
                         var versionDateElement = verRow.find('table[ctxname=\"ctxVer\"] a'); // Date for modification
                         var versionUserElement = verRow.find('.ms-imnSpan a:nth-child(2)'); // User for Modification
                         if (versionLabel !== ""
                             && (versionDateElement !== null && versionDateElement.length > 0)
                             && (versionUserElement !== null && versionUserElement.length > 0)) {
                             var versionDate = versionDateElement.html().trim();
                             var versionUser = versionUserElement.html().trim();

                             var propsRow = verRow.next(); //get properties row
                             var properties = propsRow.find("table[role=\"presentation\"] tr").map(function (index, val) {

                                 var trproperty = jQuery(val);
                                 if (val.id.indexOf(fieldName) !== -1) {
                                     var entryProperties = {
                                         id: val.id,
                                         title: trproperty.find("td:first").html().trim(),
                                         FieldValue: trproperty.find("td:nth-child(2)").html().trim()
                                     };
                                     return (entryProperties);
                                 }
                             });
                             var entry = {
                                 Label: versionLabel,
                                 Modified: versionDate,
                                 Editor: versionUser,
                                 vprops: properties
                             };
                             entries.push(entry);
                         }
                     } catch (error) {
                         console.log("parse error " + error.message);
                     }
                 }
             });
         }
         glibvpdef.resolve(entries);
     })
    .fail(function (sender, args) {
        glibvpdef.reject(sender, args);
    });

    return glibvpdef.promise();
}

推荐阅读