Im Folgenden wird erläutert wie die Dokumente einer SharePoint Bibliothek mit dem JavaScript Clientobjektmodell (JSOM) in einem SharePoint Add-In Part aufgelistet werden können. Die SharePoint Bibliothek befindet sich auf einer Projektwebsite. Auf einer Projektdetailseite sollen die Dokumente der Projektwebsite aufgelistet werden.
Um an die Dokumente der Projektwebsite zu kommen, benötigen wir zunächst die UID des Projekts. Da ein Add-In Part nur ein iframe auf der Projektdetailseite darstellt, kann die UID nicht direkt mittels JavaScript aus dieser ermittelt werden. Mittels des folgenden Postmessage-Aufrufs des Add-Ins und einem entsprechenden Onmessage-Eventhandler kann diese jedoch abgefragt werden:
window.parent.postMessage(‚getprojectuid‘, hostUrl);
Die Antwort der Projektdetailseite wird in folgendem Format zurückgeliefert:
<PDPProjectUid>2eb47916-8615-e511-9450-00155d280c01</PDPProjectUid>
Mit Hilfe der Project UID kann nun die URL der Projektwebsite abgefragt werden:
var projContext = PS.ProjectContext.get_current();
projContext.set_isPageUrl(SP.ClientContext.get_current().get_isPageUrl());
project = projContext.get_projects().getByGuid(projectUid);
projContext.load(project, ‚Id‘, ‚Name‘, ‚ProjectSiteUrl‘);
projContext.executeQueryAsync(onGetProjectSucceeded, onGetProjectFailed);
Bei der Abfrage der Dokumente handelt es sich hier um einen Cross-Site Call, da sich die Dokumentenbibliothek nicht auf der Host Website des Add-In Parts bzw. der Projektdetailseite befindet, sondern auf der Projektwebsite. Aus diesem Grund muss die Dokumentenbibliothek mit Hilfe des AppContextSite Objekts abgefragt werden:
var spContext = new SP.ClientContext(appWebUrl);
var appContextSite = new SP.AppContextSite(spContext, projectSiteUrl);
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(‚<View><RowLimit>100</RowLimit></View>‘);
libItems = appContextSite.get_web().get_lists().getByTitle(‚Projektdokumente‘).getItems(camlQuery);
spContext.load(libItems, „Include(Id,DisplayName,Title,Created,Author)“);
spContext.executeQueryAsync(onGetDocumentsSuccess, onGetDocumentsFail);
Nun können die Dokumente auf der Projektdetailseite aufgelistet werden:
Um nun noch die Größe des Add-In Parts dynamisch an die Anzahl der Dokumente anzupassen, kann wieder ein Postmessage-Aufruf verwendet werden:
window.parent.postMessage(„<message senderId=“ + senderId + „>resize(“ + height + „,“ + width + „)</message>“, hostUrl);
Der Parameter senderId wird hierbei aus dem gleichnamigen URL-Parameter des Add-In Parts ermittelt.