Sunday, August 24, 2008

Creating child site while provisioning Root Site

Scenario:
As a part of site provisioning process you want to create some child sites also.

Solution:
Specify a provisioning provider while registering your Site Defintion as shown below.

Snippet:
Sample WebTemp* file :

<Template Name="ClientApplication" ID="10090">
<Configuration ID="0" Title="Client Application" Hidden="FALSE"
ImageUrl="/_layouts/1033/images/clientapplication.gif"
Description="This site will create a top level site and will create some sub level sites."
ProvisionAssembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
ProvisionClass="Microsoft.SharePoint.Publishing.PortalProvisioningProvider"
ProvisionData="xml\\ClientSiteHierrarchy.xml"
RootWebOnly="TRUE" DisplayCategory="Client Sites" >
</Configuration>
</Template>
Above example uses a PortalProvisioningPortal which supports ProvisionData attribute which is basically a XML file path relative to layout folder.

Sample ClientSiteHierrarchy.xml file :
<?xml version="1.0" encoding="utf-8" ?>
<portal xmlns="PortalTemplate.xsd">
<web name="Home"
siteDefinition="STS#0"
displayName="Root Site"
description="This is root site" >
<webs>
<web name="First Child Site"
siteDefinition="STS#1"
displayName="First Child Site"
description="This is First Child Site" />
<web name="Second Child Site"
siteDefinition="STS#1"
displayName="Second Child Site"
description="This is Second Child Site" />
</webs>
</web>
</portal>
Notes:
Above example has dependency upon Publishing assembly which is not a part of WSS. But you are not restricted by this assembly, you can write your own ProvisioningProvider by implementing Microsoft.SharePoint.SPWebProvisioningProvider

0 comments: