Dokumentenabfrage einer SharePoint Bibliothek mit dem JavaScript Clientobjektmodell

Veröffentlicht am 17.11.2016 | Lesezeit 2 Min.

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.

JSOM
  • Ermitteln der Project UID
  • Abfragen der URL der Projektwebsite
  • Erstellen des AppContextSite Objekts
  • Abfragen und Anzeigen der Dokumente mittels AppContextSite Objekt
  • Anpassen der Größe des Add-In Parts

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:

Projektdetailseite

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.