【问题标题】:SharePoint 2013 App, access version history on host web list itemSharePoint 2013 应用程序,访问主机 Web 列表项上的版本历史记录
【发布时间】:2015-11-06 02:04:10
【问题描述】:

我正在为客户创建一个 Angular Sharepoint 托管应用程序。 我在主机网站上有一个列表,我将在其中存储信息,输入将在应用程序中。 我正在尝试从主机网络列表中获取项目的版本历史记录,但运气不佳。 我已经尝试了两个选项:
SPService 选项:

$().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"));
        });
    }
});


上面的代码不起作用,因为列表在主机 web 中,有人知道如何配置上面的代码来访问主机 web 列表吗?
“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;
}


上面的代码得到错误:
“请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”

我再次不确定如何配置代码以便它可以访问主机 Web 列表。 如果有人有其他方法可以将版本历史记录到应用程序中,我将不胜感激。

【问题讨论】:

    标签: angularjs sharepoint sharepoint-2013


    【解决方案1】:

    您可能需要编辑您的应用清单以允许您的应用访问“父”网络。这是一项安全功能 - 应用程序从与主站点不同的域运行(因此您会收到“跨域策略”错误)。用户必须首先(在安装时)同意所有请求的权限,然后才能使用 SharePoint API 访问父网站上的列表。

    也就是说,如果您的应用程序想要从父站点访问列表,则 manfiest 应该明确说明(在 VisualStudio 中,检查“AppManfiest.xml”文件)。

    另外,您可能会考虑使用标准 SharePoint API 与 SharePoint(客户端对象模型,又称 CSOM)进行通信?但我不确定你使用什么库来与 SharePoint 通信,也许它已经是这样了。

    【讨论】:

    • 我已经完全控制了应用清单,所以这不是问题。客户端对象模型不提供版本属性(仅在服务器端对象模型上可用)
    • 对不起,我错过了这一点。对,使用 CSOM 您可以获得文件的版本(File.Versions),但不能获得普通列表项的版本:(不知道该怎么做。
    猜你喜欢
    • 2018-09-20
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多