© best_vector/Shutterstock.com
SPMeta2 vs. PnP Provisioning Engine

The Future of SP Provisioning


Die Provisionierung von SharePoint-Artefakten ist in Zeiten von SharePoint Online bzw. Office 365 ein wichtiges Thema. Welche Ansätze und Möglichkeiten existieren zur Provisionierung von Feldern, Inhaltstypen, Listen, Websites etc. in der Cloud? Und welche Auswirkungen hat das auf die On-Premise-Entwicklung? Bieten sich hier vielleicht gänzlich neue Impulse für die generelle Entwicklung mit SharePoint?

Die Provisionierung von Artefakten bildet die Grundlage für nahezu jedes SharePoint-Projekt. SharePoint-Artefakte wie beispielsweise Felder, Inhaltstypen, Listen, Websites oder Site Collections bilden die Basis, auf die jede beliebig komplexe Entwicklung aufbaut. Von einem simplen Workflow bis hin zu einer ausgereiften Intranet- oder Projektportallösung: Provisionierung ist stets ein zentrales Thema und wird in der Regel über serverseitigen Code realisiert.

Mit SharePoint Online/Office 365 (O365) hat Microsoft aber eine SharePoint-Plattform vorgestellt, in der serverseitiger Code nicht zugelassen ist. Zur Provisionierung stehen in O365 daher folgende alternative Optionen bereit:

  • CSOM-Code (Client-side Object Model)

  • JSOM-Code (JavaScript Object Model)

  • Frameworks

  • NCSS (No Code Sandboxed Solutions)

Ein direkter Zugriff auf die Server ist in O365 nicht möglich, daher kann die Provisionierung nur remote von externen Quellen oder gänzlich ohne programmatische Entwicklung durchgeführt werden, zum Beispiel über No Code Sandbox Solutions.

Viele alltägliche Szenarien in Kundenprojekten enthalten einen hohen Anteil an programmatischer Entwicklung, wie z. B. Managed Metadata, Masterpages, Custom Navigation oder Provisionierung von Artefakten. Über das in On-­Pre­mise-­Projekten vielfach genutzte Microsoft Feature Framework lassen sich solche Szenarien nicht abbilden, daher ist der Einsatz des SharePoint Object Models unerlässlich.

Neben den direkten clientseitigen Optionen über CSOM bzw. JSOM existieren zwei aktuelle Frameworks: „SPMeta2“ und „PnP Provisioning Engine“. Dieser Artikel beschäftigt sich im Folgenden mit diesen beiden Frameworks und vergleicht sie abschließend.

SPMeta2

SPMeta2, oder kurz M2, ist ein codebasiertes Open-Source-Framework des Unternehmens SubPointSolutions. Das API setzt auf dem SharePoint Object Model auf. SPMeta2 abstrahiert das SharePoint-API und bietet dadurch die Möglichkeit, Artefakte sowohl mittels Server-side Object Model (SSOM) als auch über CSOM für SharePoint 2010, 2013 und O365 zu provisionieren. Die grundlegende Idee dahinter ist, einfache POCO-Objekte, so genannte Definitionen, anzulegen. In einer Definition werden die jeweiligen Eigenschaften eines SharePoint-Artefakts festgelegt, beispielsweise eines Felds. Die Definitionen benötigen keinen Bezug zum SharePoint Object Model.

In einem zweiten Schritt werden zusammengehörende Definitionen miteinander in Relation gesetzt und bilden ein gemeinsames Modell. Abschließend wird ein solches Modell über einen „Provisioning Service“ auf einer Umgebung bereitgestellt. Abbildung 1 veranschaulicht die Zusammenhänge zwischen M2-Definitionen, Modellen und der Provisionierung innerhalb von SharePoint.

nitsch_sp_provisioning_1.tif_fmt1.jpgAbb. 1: Übersicht Funktionsweise M2

Um das Framework auszuprobieren, wird ein Paket über NuGet benötigt. Dort kann zwischen SSOM oder CSOM sowie zwischen Foundation- und Standardlevel gewählt werden. Weiterhin werden zwei Projekttem­plates für Visual Studio bereitgestellt, die mit Beispiel­implementierungen den Einstieg in das Framework erleichtern sollen.

Das Beispiel einer fiktiven „Publishing News“-Liste soll nun in die Möglichkeiten des M2-API einführen. Listing 1 zeigt das Anlegen von drei unterschiedlichen Feldtypen: ein Textfeld, ein Note-Feld und ein Datumsfeld.

Listing 1

const string Group = "ExampleCorporation"; //create field definitions for news list TextFieldDefinition TeaserText = new TextFieldDefinition { Id = new Guid("67F1D09B-8149-4AAC-B5A4-2673C72542F7"), Title = "Teaser Text", InternalName = "TeaserText", Group = Group, Required = true, MaxLength = 100, FieldType = BuiltInFieldTypes.Text }; NoteFieldDefinition FullText = new NoteFieldDefinition { Id = new Guid("07C03B5B-F655-4194-B40B-6BC...

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