2015-11-05 42 views
0

我正在为客户端创建一个Angular Sharepoint托管的应用程序。 我有一个列表在主机网站,我将存储信息,输入将在应用程序。 我想从主机网站列表的项目获得版本历史,很幸运。 我已经尝试了两种选择:
的SPService选项:
SharePoint 2013应用程序,主机Web列表项上的访问版本历史

$().SPServices({ 
    operation: "GetVersionCollection", 
    async: false, 
    strlistID: "TestList", 
    strlistItemID: 36, 
    strFieldName: "Description", 
    completefunc: function (xData, Status) { 
     $(xData.responseText).find("Version").each(function (i) { 
      console.log("Name: " + $(this).attr("Description") + " Modified: " + $(this).attr("Modified")); 
     }); 
    } 
}); 


上面的代码不工作,因为名单是在主机的网络,任何人都知道如何配置上面的代码来访问主机网络清单?
的“Versions.aspx”选项:

function getItemVersions(url,listId,itemId,success) 
{ 
     var versionsUrl = url + '/_layouts/versions.aspx?list=' + listId + '&ID=' + itemId; 
     $.get(versionsUrl, function(data) { 
      var versionEntries = parseVersionsData(data); 
      success(versionEntries); 
     }); 
} 
    function parseVersionsData(data){ 
     var entries = {}; 
     var versionList = $(data).find('table.ms-settingsframe'); 


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

     }); 
     return entries; 
} 


上面的代码获得误差:
“否‘访问控制允许来源’标头出现在所请求的资源”

再次,我不确定如何配置代码,以便它可以访问主机的网络列表。 如果有人有另一种方式将版本历史记录到应用程序,我将不胜感激。

回答

0

可能您需要编辑您的应用清单以允许您的应用访问“父”网页。这是一项安全功能 - 应用程序从主站点以外的域运行(因此您会得到“跨源策略”错误)。用户必须首先(在安装时)同意所有请求的权限,然后才能使用SharePoint API访问父站点上的列表。也就是说,如果您的应用程序想要从父站点访问列表,则应该明确地这么说(在VisualStudio中,请检查“AppManfiest.xml”文件)。另外,您可能会考虑使用标准SharePoint API与SharePoint(客户端对象模型,又名CSOM)进行通信吗?但是我不确定你用什么库来与SharePoint通信,也许它已经是这样了。

+0

我在应用程序清单中给出了完全控制权,所以这不是问题。客户端对象模型不提供版本属性(仅在服务器端对象模型中提供) – Jenkaa

+0

对不起,我错过了这一点。对,使用CSOM你可以得到文件版本(File.Versions),但不是普通列表项:(: 不知道该怎么做。 – Nikolay

相关问题