2015-11-05 27 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

相關問題