© Kellie L. Folkerts/Shutterstock.com
Wie man mit JavaScript und den neuen APIs am besten umgeht

JSOM und REST im Vergleich


Microsoft hat mit der Einführung des App-Modells in SharePoint 2013 und dem Onlinebruder aus dem Office-365-Paket den Versuch gestartet, die Programmierung sicherer zu machen und hin zu mehr Standardisierung zu führen. Für die Programmierung von Apps, besonders von SharePoint-hosted Apps, kommt JavaScript mit den CSOM- und JSOM-APIs (Client-Side Object Model bzw. JavaScript Object Model) zum Tragen. Welche Vor- und Nachteile diese APIs haben und in welchen Situationen sie zum Einsatz kommen, soll der folgende Artikel exemplarisch an einer Search-driven App erläutern.

JavaScript wird von Entwicklern als so ziemlich alles bezeichnet, nur oftmals nicht als eine richtige Programmiersprache. In der SharePoint-Entwicklung fristete JavaScript bisher nur eine „Hack“- und „Workaround“-Daseinsberechtigung. Mit der Entwicklung der REST- [1] und JSOM-APIs [2] für SharePoint gibt uns Microsoft nun jedoch massiv ausgebaute Werkzeuge an die Hand, um mit JavaScript komplexe Apps zu programmieren. In Situationen mit verschiedensten Anforderungen stellen sich bzgl. der Entscheidung zwischen REST und JSOM folgende Fragen:

  1. Welche Technologien/Plattformen beziehe ich mit ein?
  2. Wie ist die Performance?
  3. Was ist die Vorerfahrung der Entwickler?

Bevor jedoch auf die Fragestellungen eingegangen wird, sollen die Ansatzmöglichkeiten mit REST und JSOM anhand des Beispiels einer Search-driven-SharePoint-hosted-App erklärt werden. Sie integriert eine Personensuche und zeigt relevante Dokumente des zuvor gesuchten Benutzers an. Zusätzlich zur Personensuche werden über die Suche zuvor definierte Bibliotheken angesprochen. Der Aufruf der Suche und das Verarbeiten der Ergebnisse erfolgt über die besagten SharePoint-APIs.

Im Folgenden wird vorausgesetzt, dass das App-Modell von SharePoint 2013 bekannt ist, genauso wie die Funktionsweise von App-Berechtigungen bzw. App-Web und Host-Web im Zusammenspiel mit der von Microsoft bereitgestellten Cross-Domain-Bibliothek. JavaScript selbst sollte ebenfalls kein komplettes Neuland sein.

Suche mit JSOM

JSOM ist eine clientseitige Abbildung von SSOM (Server-Side Object Model) und nutzt für das Abfragen von Daten in Listen die vom Servercode bekannten CAML-Querys. Reine SharePoint-Entwickler dürften mit dem API schnell zurechtkommen, da seine Struktur der aus SSOM sehr ähnlich ist.

In Listing 1 wird exemplarisch eine Suchanfrage veranschaulicht. Bevor eine Suche gestartet werden kann, benötigen wir ein KeywordQuery-Objekt, in dem der Suchtext übergeben wird. Dieses Objekt übergeben wir an den SearchExecutor, der die Suchanfrage durchführt. Die Anfrage wird zu diesem Zeitpunkt noch nicht versendet, denn es wird noch eine weitere in der Variable keywordQueryDoc für eine zusätzliche Quelle mit angegeben. Die Ergebnisse der asynchronen Suchanfrage werden an die vorher deklarierten Variablen resultsJsom und resultsJsomDoc übergeben. Da eine pauschale Suchanfrage immer (je nach vergebenen App-Berechtigungen) an das gesamte App-Web und Host-Web geht, kann die Suche mithilfe von Suchergebnisquellen (engl. Result Sources) auf einzelne Bereiche beschränkt werden. In diesem Fall geschieht dies einerseits durch die Eigenschaft set_sourceid (im Bespiel wird sourceid auf Personen beschränkt), andererseits wird im zweiten Teil der Suchanfrage der Inhaltstyp eingeschränkt. Zusätzlich wird explizit angegeben, dass nur die verwaltete Eigenschaft WorkEmail der Liste durchsucht wird. Zuletzt werden beide Suchanfragen mit nur einer Anfrage an den Server versendet.

var query = Microsoft.SharePoint.Client.Search.Query;
var personQuery = new query.KeywordQuery(context);

personQuery.set_sourceid = ‘B09A7990-05EA-4AF9-81EF-EDFAB16C4E31’);
personQuery.set_queryText(‘Suchtext einer Person’);

var keywordQueryDoc = new query.KeywordQuery(context);
keywordQueryDoc.set_queryText(‘ContentTypeId:*hier ContentTypeId*’);
var docProperties = docListQuery.get_selectProperties();
docProperties.add('WorkEmail');

var searchExecutor = new query.SearchExecutor(context);
resultsPerson = searchExecutor.executeQuery(keywordQuery);
resultsDoc = searchExecutor.executeQuery(keywordQueryDoc);

context.executeQueryAsync(onQuerySuccess, onQueryFail);...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang