Blogserie: Apps in SharePoint 2013 – Teil 5: SharePoint Hosted Apps –AppContext bei CSOM und REST
Im heutigen Blogartikel möchte ich näher auf die Entwicklung innerhalb einer SharePoint Hosted App reden. Meistens werden diese Apps nicht dazu verwendet um Wetter oder das aktuelle Fernsehprogramm sondern andere Daten aus dem SharePoint anzuzeigen. Genau hier kommt es aber zu einer Problematik namens Cross-Domain-Scripting.
Wie bisher bekannt, wird die App aus einem App-Catalog heraus gestartet (Sie erinnern sich an die Blase?). Nun möchte im einfachsten Fall Daten aus dem HostWeb holen. Um dies tun zu können muss ein AppContext verwendet werden.
Dieser AppContext kann über verschiedene Methoden etabliert werden.
CSOM
- this.clientContext = SP.ClientContext.get_current();
- var hostcontext = new SP.AppContextSite(this.clientContext, siteUrl);
Hier wird zunächst der derzeitige Context über das Client-Side Object Model (CSOM) aufgebaut. Der Context zum Host wird über die Funktion SP.AppContextSite zwischen dem derzeitigen Kontext und einer siteUrl hergestellt.
REST
- var url = appweburl + “/_api/SP.AppContextSite(@target)/web/lists/getbytitle(‘” + listName + “‘)/Items?@target='” + hostweburl + “‘&$select=Title,TitleLink, ,IsActive”;
- var executor = new SP.RequestExecutor(appweburl);
- executor.executeAsync(
- {
- url: url,
- method: “GET”,
- headers: { “Accept”: “application/json; odata=verbose” },
- success: function (data) {
- var results = eval(JSON.parse(data.body));
- var items = results.d.results;
- GetRssTiles(items);
- },
- error: function (data, errorcode, errormessage) {
- $(‘#rssTiles’).empty();
- $(‘#rssTiles’).append(“Ooops an error occured. Error: “ + errormessage);
- }
- })
Bei der Verwendung von REST wird zunächst eine URL erstellt. Hier werden verschiedene ListItems einer Liste abgefragt. Der AppContext wird hierbei in die Url mit „SP.AppContextSite(@target)/“ integriert. Ganz wichtig ist dabei die Angabe des Targets „?@target='” + hostweburl“.
Zur Ausführung wird zusätzlich die Funktion SP.RequestExecutor benötigt, die das Fenster in ein anderes Web öffnet. Mittels assynchroner Ausführung des Executors werden die Daten geladen.
In vielen Quellen wird davon gesprochen, dass auch andere Webs außer dem HostWeb aufgerufen werden können. Mir ist es aufgrund von Berechtigungen bisher nicht gelungen. Denn bei der Bereitstellung können nur Berechtigungen auf das entsprechende HostWeb zugeteilt werden.
Eine Alternative die sich bisher etabliert hat, ist dafür die Suche zu verwenden und sie auf einen Pfad einzuschränken. Aber Achtung dann sind für die Bereitstellung der App auch schon Mandantenadministratoren- bzw. (Farmadministratoren-) Berechtigungen benötigt. Auf die Verwendung der Suche und des REST-Modells möchte ich im nächsten und letzten Blogartikel genauer eingehen.
- Vorbereitung und Bereitstellung einer Provider Hosted App
- Provider Hosted Apps und ASP.Net MVC
- Bereitstellung und Entwicklung der Applikation auf einem IIS
- SharePoint Hosted Apps – Zugriff auf das HostWeb
- SharePoint Hosted Apps – AppContext bei CSOM und REST
- SharePoint Hosted Apps – Entwicklung mit CSOM und REST