Angularjs SharePoint 2013应用程序,访问主机web列表项上的版本历史记录
我正在为客户端创建Sharepoint托管的应用程序。 我在主机网站上有一个列表,我将在其中存储信息,输入将在应用程序中。 我试图从主机web列表中获取项目的版本历史记录,但运气不佳。 我尝试了两种选择: SPService选项: 上面的代码不起作用,因为列表位于主机web中,有人知道如何配置上面的代码以访问主机web列表吗? Versions.aspx选项: 上面的代码获取错误: 请求的资源上不存在“Access Control Allow Origin”标头 然而,我仍然不确定如何配置代码,以便它可以访问主机web列表。Angularjs SharePoint 2013应用程序,访问主机web列表项上的版本历史记录,angularjs,sharepoint,sharepoint-2013,Angularjs,Sharepoint,Sharepoint 2013,我正在为客户端创建Sharepoint托管的应用程序。 我在主机网站上有一个列表,我将在其中存储信息,输入将在应用程序中。 我试图从主机web列表中获取项目的版本历史记录,但运气不佳。 我尝试了两种选择: SPService选项: 上面的代码不起作用,因为列表位于主机web中,有人知道如何配置上面的代码以访问主机web列表吗? Versions.aspx选项: 上面的代码获取错误: 请求的资源上不存在“Access Control Allow Origin”标头 然而,我仍然不确定如何配置代
如果有人有其他方法获取应用程序的版本历史记录,我将不胜感激。您可能需要编辑应用程序清单,以允许应用程序访问父网站。这是一项安全功能-应用程序运行于与主站点不同的域,因此会出现跨源策略错误。用户必须首先在安装时同意所有请求的权限,然后才能使用SharePoint API访问父网站上的列表 也就是说,如果您的应用程序希望从父站点访问列表,那么它的manfiest应该在VisualStudio中明确表示,请检查AppManfiest.xml文件
此外,您可能会考虑使用标准SharePoint API与SharePoint客户端对象模型AKA CSOM进行通信?但我不确定您使用什么库与SharePoint通信,可能它已经是这样了。
我已经在应用程序清单中提供了完全控制权,所以这不是问题所在。客户端对象模型不提供仅在服务器端对象模型上可用的版本属性抱歉,我错过了这一点。好的,使用CSOM您可以获取文件的版本File.Versions,但不能获取普通列表项的版本:不知道如何做到这一点。$().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"));
});
}
});
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;
}