Tenant.CreateSite – Invalid template! :(
avatar

Die Provisionierung von Site Collections ist ein wichtiges Thema im SharePoint-Umfeld. Die HanseVision hat sich über viele Jahre ein immenses Wissen rund um dieses Feature Set aufgebaut und bietet individuell skalierbare Lösungen diesbezüglich.

Auf programmatischem Wege werden Site Collections über die CSOM Tenant API angelegt; was sowohl im Online-Szenario als auch On-Premise solide funktioniert.

Auf einen Fallstrick möchte ich in diesem Artikel allerdings hinweisen, der mich kürzlich etwas Zeit und Nerven gekostet hat! Sad smile 

In den Einstellungen für die neue Site Collection muss u.a. das Template und die Sprache angegeben werden. Eigentlich ganz simple!

$primarySiteCollectionAdmin = $element[$Configuration.Columns.PrimarySiteCollectionAdmin.InternalName].LookupValue
$language = $configuration.Languages.Language | Where-Object { $_.Name -eq  $element[$Configuration.Columns.Language.InternalName] }
$tenantCtx = New-Object Microsoft.SharePoint.Client.ClientContext($element[$Configuration.Columns.TenantAdminUrl.InternalName])
$tenantCtx.ExecuteQuery()
$tenant = New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($tenantCtx)
$properties = New-Object Microsoft.Online.SharePoint.TenantAdministration.SiteCreationProperties
$properties.Url = $siteCollectionUrl
$properties.Owner = $primarySiteCollectionAdmin
$properties.Title = $element[$Configuration.Columns.Title.InternalName]
$properties.Template =  $element[$Configuration.Columns.SiteCollectionType.InternalName]
$properties.Lcid = $language.Lcid
$tenant.CreateSite($properties) | out-null
$tenantCtx.ExecuteQuery()

Instinktiv habe ich mir aus der Zentraladministration das Template (den Code) und die Sprache geholt und für die Erstellung neuer Site Collections konfiguriert.

image

Anschließend lies ich die Provisionierung laufen. Zu meinem Erstaunen bekam ich folgenden Fehler:

07/13/2018 03:53:03.35              w3wp.exe (0x10E4)                                     0x3204  SharePoint Foundation                       General                             al5nm    High      Invalid template               2a577a9e-887b-4034-22ad-a88aa28e5e4e

07/13/2018 03:53:03.35              w3wp.exe (0x10E4)                                     0x3204  SharePoint Foundation                       CSOM                                ahjq1     High      Exception occured in scope Microsoft.Online.SharePoint.Dedicated.TenantAdministration.Tenant.CreateSite. Exception=System.ArgumentException: SiteCreationProperties.Template  Parameter name: Specified value is not supported for the SiteCreationProperties.Template parameter

Völlig unverständlich! Template und Sprache waren richtig! Sad smile

Nachdem ich alles doppelt und dreifach kontrolliert hatte und auch im Internet keine Lösung finden konnte, habe ich den “SharePoint Architekten Joker” gezogen und unter die Haube geschaut. dnSpy sei gedankt!!! Smile

if (SPContext.Current != null && SPContext.Current.Site != null)
{
	SPWebTemplateCollection availableWebTemplates = SPContext.Current.Site.RootWeb.GetAvailableWebTemplates(scp.Lcid, true);
	bool flag = false;
	foreach (SPWebTemplate sPWebTemplate in availableWebTemplates)
	{
		if (string.Equals(sPWebTemplate.Name, scp.Template, StringComparison.OrdinalIgnoreCase))
		{
			flag = true;
			break;
		}
	}
	if (!flag)
	{
		ULS.SendTraceTag(3011404u, ULSCat.msoulscat_WSS_General, ULSTraceLevel.High, "Invalid template");
		throw SPUtility.GetStandardArgumentException("SiteCreationProperties.Template");
	}
}

Und die Lösung wurde offenbart: SharePoint erlaubt an dieser Stelle nur die Templates, die in der Site Collection über die der API Call (Tenant Context) läuft, verfügbar sind. Alle anderen sind für ihn ungültig!

Fazit: Don’t use the templates from central administration. Only templates available in the site collection of the API call (tenant context) are allowed!!!

image

Ich hoffe ich konnte euch helfen! Smile

Schreibe einen Kommentar