Montag, 6. Oktober 2008

WebTemplates löschen

Mir stellte sich folgender Anwendungsfall: Unterhalb einer SiteCollection sollen eigene SubWebs erstellt werden können; unterhalb dieser jedoch keine weiteren also ausschließlich Websites eine Ebene unterhalb der SiteCollection.

Programmatisch löste ich das ganze mit Hilfe eines FeatureReceivers, dessen Feature (Web-Scope) in der onet.xml aktiviert wird:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
// remove all site templates to prevent, users create more subwebs beneath the current one
if (properties.Feature.Parent is SPWeb)
{
try
{
using (SPWeb currentWeb = (SPWeb)properties.Feature.Parent)
{
currentWeb.SetAvailableWebTemplates(new Collection(), (uint)1031);
currentWeb.Update();
}
}
catch (Exception e)
{
}
}
}

In dem obigen Codebeispiel werden die verfügbaren WebTemplates des aktuellen Webs einfach neu gesetzt und zwar mit einer leeren Collection des Typs SPWebTemplate. Anschließend wird das Web geupdated damit die Änderung wirksam wird. Die 1031 steht hier übrigens für den deutschen Sprachraum.

Wiederherstellen lassen sich die Standard-Templates natürlich auch mit Hilfe dieser zwei Zeilen:

currentWeb.AllowAllWebTemplates();
currentWeb.Update();

Keine Kommentare: