Eigene Tokens in der PnP Provisionierung
Vor kurzem musste ich in einem Template für das PnP Provisionierungs Framework (https://github.com/SharePoint/PnP-Sites-Core) eigene Tokens implementieren. Diese sollten zur Laufzeit für unterschiedliche Websites unterschiedliche Werte in das Template einfügen.
Ein Beispiel für solch ein Custom Token könnte die Antrags-ID in einer Provisionierung von Websites sein, wo die Antrags-ID in das Propertybag der Website hinzugefügt und indiziert werden soll.
Also habe ich mich im Source Code des Frameworks auf die Suche gemacht nach der Möglichkeit, die Provisionierung zu erweitern… und ich bin fündig geworden. In den Unit-Tests des Repositories ist enthalten, wie man einen eigenen Token Provider implementiert.
Dies habe ich in einem kleinen Beispiel nachgestellt.
Das Ziel ist, dass im Template der Token {customToken}
verwendet werden kann und ersetzt wird.
Um die entsprechenden Klassen in meiner .NET 4.7.2 Konsolenanwendung verwenden zu können, muss ich zuerst einige NuGet-Pakete installieren.
Zuerst installiere ich das Paket Microsoft.SharePoint2016.CSOM. Dieses ermöglicht den Zugriff auf das Client Side Object Model aus C# heraus.
Install-Package Microsoft.SharePoint2016.CSOM
Danach installiere ich das Paket SharePointPnPCore2016. In diesem Paket ist die OfficeDevPnP.Core.dll aus dem Github-Repository https://github.com/SharePoint/PnP-Sites-Core enthalten.
Install-Package SharePointPnPCore2016
In diesem XML Template ist definiert, dass eine neue Liste erstellt werden soll. Hierbei soll der Titel der Liste den Wert des Tokens {customToken}
entsprechen.
Um dies zu realisieren implementiere ich zuerst einen IProvisioningExtensibilityTokenProvider
, um meine TokenDefinition
beim Anwenden des Templates zu registrieren.
Im selben Zuge implementiere ich auch gleich die TokenDefinition
. Dabei soll der Wert des Tokens nicht statisch sein, sondern über den Parameter string configurationData
aus dem CustomTokenProvider definiert werden.
Den CustomTokenProvider
kann ich nun beim Anwenden des Templates auf der Website referenzieren und einen Wert für meinen Token über den Member Configuration
definieren.
An der Stelle kann ein beliebiger String hinterlegt werden und somit zum Beispiel die Antrags-ID im Template verwendet werden.
Wie erwartet, wird der Wert Custom Token Value als Titel für die angelegte Liste verwendet.