<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Michael O'Donovan's SharePoint and Stuff : Windows SharePoint Services 3.0</title><link>http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx</link><description>Tags: Windows SharePoint Services 3.0</description><dc:language>en-GB</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>How to build a custom site definition which has child sites (webs)</title><link>http://blogs.msdn.com/modonovan/archive/2008/09/11/how-to-build-a-custom-site-definition-which-has-child-sites-webs.aspx</link><pubDate>Thu, 11 Sep 2008 11:48:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8943978</guid><dc:creator>modonovan</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/8943978.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=8943978</wfw:commentRss><description>&lt;p&gt;I did this for a customer over a year ago, and have simply just not had the chance to put key to screen and document it. Perhaps someone out there has already done this, but I thought it might still be useful looking at the way in which I did it. Grab some coffee, this post is long.&lt;/p&gt;  &lt;p&gt;In MOSS you get a Collaboration Portal definition and a Publishing Portal site definition, when you create a site from either of these the site automatically has sub-sites (sub-webs) provisioned. This is unlike the team site definition, which only creates a root site (web). The question which arose from this was &amp;quot;how do I create a site definition which automatically provisions sub-sites (webs) just like the collaboration portal and publishing portal site definitions?&amp;quot;&lt;/p&gt;  &lt;p&gt;I found two ways, an unsupported method and a supported method. In the unsupported technique you use an existing feature which is included in the collaboration and publishing site definitions which does the provisioning for you. The exact steps are described &lt;a href="http://suguk.org/blogs/sharepointhack/archive/2007/06/03/3595.aspx"&gt;here&lt;/a&gt;, on a blog post from &lt;a href="http://suguk.org/blogs/sharepointhack/archive/2007/06/03/3595.aspx"&gt;SharePointHack&lt;/a&gt;. It works, but is not officially supported by Microsoft.&lt;/p&gt;  &lt;p&gt;The second technique is essentially to develop a custom feature which does exactly what the unsupported feature does. Their are 2 advantages to this; 1 - it is supported :-), and 2 - you own the code so you can extend it, change it in anyway which makes sense to you e.g. you might want to add extra provisioning steps for the sub-sites that are created, such as setting a default master page and style sheet.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Lets assume that we want to have a team site definition which automatically creates sub sites, the result of which is shown in the graphic below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_18.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_8.png" width="644" height="293" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Lets look at how to do this&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In summary, you create a custom feature (lets call it a provisioning feature) which is executed when the root site is created i.e. team site in this scenario. This custom feature reads an XML file which holds the definition for the sub-sites (webs) to be created, and for each sub-site in the XML file the provisioning feature creates sub-sites (webs) using the WSS API. That's it! Sound simple enough? Now lets walk through the exact steps. All sample code can be found at the end of the post too.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Step 1 - create custom provisioning feature Visual Studio project &lt;/li&gt;    &lt;li&gt;Step 2 - add XML file for sub-site definitions, and add code to provision sub-sites &lt;/li&gt;    &lt;li&gt;Step 3 - deploy and install the new provisioning feature &lt;/li&gt;    &lt;li&gt;Step 4 - create a new site definition which references the provisioning feature &lt;/li&gt;    &lt;li&gt;Step 5 - create a new site ... done !!! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 1 - create custom provisioning feature Visual Studio project&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I am personally not a fan of using the Visual Studio extensions for WSS to create my custom features (can explain why another day), I prefer to create an empty Visual Studio class library project and then manually add all the elements I need. You might want to read &lt;a href="http://msdn.microsoft.com/en-us/library/cc263911.aspx"&gt;this article&lt;/a&gt; which explains the elements of a custom feature before continuing with this post.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_1.png" width="229" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This graphic above shows my custom feature project in Visual Studio. The template folder contains the feature definition files (feature.xml and subwebs.xml) which will be copied into the SharePoint features folder on successful compilation of the project. The CollabPortalFeature.cs class contains the provisioning code which reads the subwebs.xml file and creates the sub-sites. The Contoso.snk is used to sign the assembly (assembly gets deployed into GAC later) and install.bat is what copies the feature files into the SharePoint feature directory and installs the feature using STSADM.exe.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 2 - add XML file for sub-site definitions, and add code to provision sub-sites&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lets look at feature.xml. Here you will see the definition for the feature, the title and description. Importantly it is a hidden feature, this prevents users manually activating it from SharePoint administration screens. Why? Because the feature will be activated by the site definition which references it, more on that later. Also we have reference to the assembly and class which hosts the provisioning code. This is also discussed later.&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Feature&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;Title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Contoso Collaboration Portal Provisioning Handler&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;Id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;5664944F-24C5-4524-BABB-D1FAC37709CF&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;Description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;This feature is designed to be added to a custom site definition,and will create sub sites inside the new root web&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;Version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0.0.0&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;Scope&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Web&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;Hidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;TRUE&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;DefaultResourceFile&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;core&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;ReceiverAssembly&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Contoso.SharePoint.ProvisioningHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=179f3ffc3fc551f9&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;ReceiverClass&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Contoso.SharePoint.ProvisioningHandler.CollabPortalFeature&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ElementManifests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ElementFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;subwebs.xml&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ElementManifests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Feature&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now let's look at the XML inside of subwebs.xml. &lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;rootWeb&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;webs&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;web&lt;/span&gt; &lt;span style="color: #ff0000"&gt;url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Wiki&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;siteDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;WIKI#0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;displayName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Our Wiki&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Our teams wiki allows us to brainstorm online.&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;web&lt;/span&gt; &lt;span style="color: #ff0000"&gt;url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Blog&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;siteDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;BLOG#0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;displayName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Our Blog&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Our department's blog shows key updated information about our department.&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;web&lt;/span&gt; &lt;span style="color: #ff0000"&gt;url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Search&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;siteDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;SRCHCENTERLITE#0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;displayName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Search&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;We need to be able to search dont we&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;        &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;webs&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;rootWeb&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;What you can see if that in this scenario we are going to get 3 sub-sites created, a team wiki, a team blog and a search site. You can add, remove and edit as many nodes as you want here. Each sub-site needs a URL, a site definition name which it should be based on, a display name and a description. Of course you could extend this schema to include any custom fields or flags you may want to use during provisioning. e.g. inherit permissions from parent web. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;u&gt;Note&lt;/u&gt;&lt;/strong&gt;&lt;/em&gt;: some sub-sites require certain features to be activated on the parent site in order for them to work e.g. if you tried to create a report center under a team site it would break, unless the team site had the publishing feature activated.&lt;/p&gt;

&lt;p&gt;Now for the logic inside the class which does most of the work. Let's look at some code inside the featureactivated method. I have left out some code which I don't think needs explanation, but have kept the most important snippet to show you.&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;//get the file path to the path to subwebs.xml, this is where the subweb to create are defined&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; filePath = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.GetProvisioinerFilePath(properties.Definition);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;            &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (System.IO.File.Exists(filePath))&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;    XmlDocument doc = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlDocument();&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;    doc.Load(filePath);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;    XmlNode subWebs = doc.DocumentElement.SelectSingleNode(&lt;span style="color: #006080"&gt;&amp;quot;webs&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (subWebs != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;        CreateSubWebs(web, subWebs);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In the above code the first step is to get the path to the subwebs.xml file (you could hard code the path, but that probably wouldn't be a good idea). It then calls CreateSubWebs for each web node inside the subwebs.xml file. Let's now look at the CreateSubWebs method.&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.26%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 246px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CreateSubWebs(SPWeb web, XmlNode websNode)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (XmlNode webItem &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; websNode.ChildNodes)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;        &lt;span style="color: #008000"&gt;//only attempt to create it if XML node has all the information required&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;] != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;siteDefinition&amp;quot;&lt;/span&gt;] != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;            &amp;amp;&amp;amp; webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;displayName&amp;quot;&lt;/span&gt;] != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;]!=&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; url = webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; siteDefinition = webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;siteDefinition&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; displayName = webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;displayName&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; description = webItem.Attributes[&lt;span style="color: #006080"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;            Debug.WriteLine(&lt;span style="color: #006080"&gt;&amp;quot;ProvisioningHandler:CollabPortal, Creating sub web called &amp;quot;&lt;/span&gt; + displayName);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;            &lt;span style="color: #008000"&gt;//create the new subweb&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;            SPWeb newWeb = web.Webs.Add(url, displayName, description, web.Language, siteDefinition, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;            &lt;span style="color: #008000"&gt;//tell new subweb to use parents navigation&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;            newWeb.Navigation.UseShared = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;                                &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;            web.Properties[&lt;span style="color: #006080"&gt;&amp;quot;__IncludeSubSitesInNavigation&amp;quot;&lt;/span&gt;] = &lt;span style="color: #006080"&gt;&amp;quot;True&amp;quot;&lt;/span&gt;; &lt;span style="color: #008000"&gt;//make sure sub webs show their child sites in navigation&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;            &lt;span style="color: #008000"&gt;//update props&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;            web.Properties.Update();&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;            &lt;span style="color: #008000"&gt;//update new web created&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;            newWeb.Update();&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt; }     &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Once again, not rocket science, just a simple function which takes the attributes from the web node and uses them to create the sub-site (sub-web). You will also see that some defaults are set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 3 - deploy and install new provisioning feature&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To deploy the feature, you need to:&lt;/p&gt;

&lt;p&gt;1. Compile the project and take the assembly generated and add it to the GAC. I do this manually for now i.e. drag and drop it into the GAC&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_20.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_9.png" width="335" height="63" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;2. You must then copy the public key token and place it in your feature.xml on your receiver class definition file. This is so that your feature is referencing the correct assembly.&lt;/p&gt;

&lt;p&gt;3. Now it is time to install the feature, if I run install.bat this will do all that work for me i.e copy feature files to SharePoint feature directory and then run the feature install command (note: we do &lt;strong&gt;not&lt;/strong&gt; active the feature)&lt;/p&gt;

&lt;p&gt;Here is a snippet from install.bat&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; TEMPLATEDIR=&lt;span style="color: #006080"&gt;&amp;quot;c:\program files\common files\microsoft shared\web server extensions\12\Template&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; STSADM=&lt;span style="color: #006080"&gt;&amp;quot;c:\program files\common files\microsoft shared\web server extensions\12\bin\stsadm&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; Echo Copying files&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; xcopy /e /y TEMPLATE\* %TEMPLATEDIR%&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; Echo Installing features&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt; %STSADM% -o installfeature -filename  ContosoProvisioningHandler\feature.xml -force&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 4 - create a new site definition which references the provisioning feature&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that the feature is installed, we need to create a new custom site definition which references the custom provisioning feature. Therefore when a site is created from the new site definition, the custom provisioning feature will execute and create the sub-sites.&lt;/p&gt;

&lt;p&gt;I am not going to walk through the steps for creating a custom site definition, rather have a good read of the &lt;a href="http://msdn.microsoft.com/en-us/library/ms454677.aspx"&gt;following article&lt;/a&gt; which describes it in great detail.&lt;/p&gt;

&lt;p&gt;In my example, I copied and pasted the team site definition and then added a reference to the custom provision feature in ONET.xml. The snippet below shows that reference in the &amp;lt;WebFeatures&amp;gt; section of ONET.xml.&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;WebFeatures&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Feature&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;00BFEA71-4EA5-48D4-A4AD-7EA5C011ABE5&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;    &lt;span style="color: #008000"&gt;&amp;lt;!-- TeamCollab Feature --&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Feature&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;F41CC668-37E5-4743-B4A8-74D1DB3FD8A4&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;    &lt;span style="color: #008000"&gt;&amp;lt;!-- MobilityRedirect --&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;    &lt;span style="color: #008000"&gt;&amp;lt;!-- Custom provisioning handler feature--&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Feature&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;5664944F-24C5-4524-BABB-D1FAC37709CF&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;WebFeatures&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Here the feature ID is the one which is found in the feature.xml for the custom feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 5 - create a new site&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now if we try and create a new site, we should have the new site definition as an option in the create site page. This is shown below, where in my case my new site definition was called &amp;quot;Team site with sub sites&amp;quot;....boring but simple.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_8.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_3.png" width="259" height="315" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now if we navigate to the new site and select the sites link we will have the list of sub-sites under it.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_12.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_5.png" width="644" height="280" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Important&lt;/u&gt;&lt;/strong&gt;: &lt;strong&gt;Where is my top navigation with links to my sub-sites&lt;/strong&gt;? Because I chose to create the top level site as a team site and a team site doesn't have publishing features enabled the top navigation does not list the sub-sites. If you want it to, you could enable the publishing feature for the top site (site collection feature and site feature). Once that is done, you can edit the sites navigation to show sub-sites. If you started with your top site being the collaboration or publishing portal, they would already have these features enabled and you won't have this issue.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_14.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_6.png" width="402" height="262" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Once that is done, you will have the full top navigation.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_16.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_7.png" width="644" height="293" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Done!! :-)&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The full Visual Studio project with all the code used in this sample can be downloaded using the link below.&lt;/p&gt;
&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-7109b5634fc3f067.skydrive.live.com/embedrowdetail.aspx/Blog%20Stuff/ProvisioningHandler.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;You can imagine the power of the provisioning feature, where you could set default master page for sub-sites, set custom style sheet for sub-sites, permissions, add stuff the web property bags etc.&lt;/p&gt;

&lt;p&gt;I hope this made some sense and you found it useful. Happy Provisioning!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Debugging Tip&lt;/em&gt;: I scatter in my code debug output statements e.g. Debug.WriteLine(&amp;quot;some statement&amp;quot;);. Then I use &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx"&gt;DebugView&lt;/a&gt; tool from sysinternals to view those statements when the provisioning code executes. For example, if nothing shows it is probably because your provisioning assembly is not being called / loaded. The image below shows the code being executed and debugging statements showing that the 3 sub sites are being created.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_10.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/Howtobuildacustomsitedefinitionwhichhasc_7495/image_thumb_4.png" width="644" height="145" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Another options if for you to attach the Visual Studio debugger to the code, insert a break point and let the code break where you need to start debugging, just make sure you have the PDF file inside your local bin folder for the IIS site where you are creating the site from alternatively their is a wacky way to get the PDB into the GAC for this to work too.&lt;/p&gt;

&lt;p&gt;Michael&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8943978" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Developer/default.aspx">Developer</category></item><item><title>Content Management Interoperability Services (CMIS) proposed standard announced</title><link>http://blogs.msdn.com/modonovan/archive/2008/09/10/content-management-interoperability-services-cmis-proposed-standard-announced.aspx</link><pubDate>Wed, 10 Sep 2008 19:29:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8941077</guid><dc:creator>modonovan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/8941077.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=8941077</wfw:commentRss><description>&lt;p&gt;Today, EMC, IBM and Microsoft (along with other leading ECM industry vendors Alfresco, Open Text, Oracle and SAP) announced a jointly developed specification called the Content Management Interoperability Services (CMIS) specification. CMIS uses Web Services and Web 2.0 interfaces to enable applications to interoperate with multiple Enterprise Content Management (ECM) repositories by different vendors. The companies intend to submit the CMIS specification to OASIS (Organization for the Advancement of Structured Information Standards) for advancement through its rigorous standards development process.&lt;/p&gt;  &lt;p&gt;For more information, and to download a preview copy of the CMIS technical specification draft, please see the website of any of the contributing companies:&amp;#160; EMC Corporation (&lt;a href="http://www.emc.com/about/news/press/2008/091008-smr-content-management-interoperability-services.htm"&gt;www.emc.com/about/news/press/2008/091008-smr-content-management-interoperability-services.htm&lt;/a&gt;); IBM (&lt;a href="http://www.ibm.com/software/data/content-management/cm-interoperablity-services.html"&gt;www.ibm.com/software/data/content-management/cm-interoperablity-services.html&lt;/a&gt;); and Microsoft (&lt;a href="http://go.microsoft.com/fwlink/?LinkId=127855"&gt;http://go.microsoft.com/fwlink/?LinkId=127855&lt;/a&gt;)&lt;b&gt;. &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="CMIS Overview" border="0" alt="CMIS Overview" align="middle" src="http://blogs.msdn.com/photos/sptblog/images/8939107/original.aspx" width="640" height="480" /&gt;&lt;/p&gt;  &lt;p&gt;The SharePoint team have recently posted about this &lt;a href="http://blogs.msdn.com/sharepoint/archive/2008/09/09/announcing-the-content-management-interoperability-services-cmis-specification.aspx"&gt;here&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;View Video Interview of Jeff Teper Corp VP, Office SharePoint Server Group.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/presspass/events/cmis/default.mspx"&gt;http://www.microsoft.com/presspass/events/cmis/default.mspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8941077" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/ECM/default.aspx">ECM</category></item><item><title>Updates for SharePoint Released</title><link>http://blogs.msdn.com/modonovan/archive/2008/07/16/updates-for-sharepoint-released.aspx</link><pubDate>Wed, 16 Jul 2008 11:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8737420</guid><dc:creator>modonovan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/8737420.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=8737420</wfw:commentRss><description>
&lt;p&gt;Yesterday, the &lt;a href="http://blogs.msdn.com/sharepoint/archive/2008/07/15/announcing-availability-of-infrastructure-updates.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2008/07/15/announcing-availability-of-infrastructure-updates.aspx"&gt;SharePoint product team announced the release&lt;/a&gt; of important rollup updates for SharePoint Server 2007, Windows SharePoint Services 3.0, Project Server 2007, Search Server 2008, Search Server 2008 Express and Project Professional 2007.&lt;/p&gt;
  
&lt;p&gt;I strongly recommend reading their &lt;a href="http://blogs.msdn.com/sharepoint/archive/2008/07/15/announcing-availability-of-infrastructure-updates.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2008/07/15/announcing-availability-of-infrastructure-updates.aspx"&gt;release announcements&lt;/a&gt;, and start planning for the implementation of these ASAP.&lt;/p&gt;&lt;br&gt;&lt;a href="http://technorati.com/claim/nn2ygutxpj" rel="me"&gt;Technorati Profile&lt;/a&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8737420" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Search+Server+2008/default.aspx">Search Server 2008</category></item><item><title>SharePoint Introduction for .NET developers webcast series</title><link>http://blogs.msdn.com/modonovan/archive/2008/05/21/sharepoint-introduction-for-net-developers-webcast-series.aspx</link><pubDate>Wed, 21 May 2008 18:23:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8528388</guid><dc:creator>modonovan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/8528388.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=8528388</wfw:commentRss><description>&lt;p&gt;New to SharePoint development or want to brush up? Check out this free webcast series targeted at YOU!&lt;/p&gt;  &lt;p&gt;In this 10-part series, you will receive practical technical information from Robert Bogue and Andrew Connell, Microsoft SharePoint Most Valuable Professionals (MVPs), covering 10 fundamental developer topics on SharePoint Products and Technologies via Live Meeting Webcast&lt;/p&gt;  &lt;p&gt;About the series:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Every Tuesday and Wednesday from May 20 to June 18 &lt;/li&gt;    &lt;li&gt;Starts at 9:00 AM Pacific Standard Time (12:00 PM Eastern Standard Time)&lt;/li&gt;    &lt;li&gt;60 minutes long&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Click on the Register Today! links to learn more about the specifics covered in each webcast&lt;/p&gt;  &lt;p&gt;20-May-08 ... Introduction to SharePoint for .NET Developers: Web Parts. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378826&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;21-May-08 ... Introduction to SharePoint for .NET Developers: Data Lists. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378828&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;27-May-08 ... Introduction to SharePoint for .NET Developers: Silverlight and SharePoint. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378831&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;28-May-08 ... Introduction to SharePoint for .NET Developers: Using Event Handlers. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378833&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;03-Jun-08 ... Introduction to SharePoint for .NET Developers: Page Branding. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378835&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;04-Jun-08 ... Introduction to SharePoint for .NET Developers: Workflows. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378839&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;10-Jun-08 ... Introduction to SharePoint for .NET Developers: Web Services. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378841&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;11-Jun-08 ... Introduction to SharePoint for .NET Developers: Page Navigation. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378843&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;17-Jun-08 ... Introduction to SharePoint for .NET Developers: User Management. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378845&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;    &lt;br /&gt;18-Jun-08 ... Introduction to SharePoint for .NET Developers: Custom Content Types. &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032378824&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Register&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8528388" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Training/default.aspx">Training</category></item><item><title>SharePoint Communication Protocol Documentation Released</title><link>http://blogs.msdn.com/modonovan/archive/2008/04/18/sharepoint-communication-protocol-documentation-released.aspx</link><pubDate>Fri, 18 Apr 2008 09:10:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8406609</guid><dc:creator>modonovan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/8406609.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=8406609</wfw:commentRss><description>&lt;p&gt;Have you ever wondered how Microsoft Office communicates with SharePoint, for example how does Outlook create a meeting workspace? In the past you would need to put some type of IP tracing tool between the client and the server to see what was going on, which was pretty hard and not always that clear. &lt;/p&gt;  &lt;p&gt;Well now as part of the &lt;a href="http://www.microsoft.com/about/legal/intellectualproperty/protocols/default.mspx"&gt;Microsoft Protocol Program&lt;/a&gt; Microsoft has released the first version of the protocol documentation for SharePoint. This documentation can be viewed and downloaded from here: &lt;a href="http://msdn2.microsoft.com/en-us/library/cc339475.aspx"&gt;SharePoint Product and Technologies Protocols&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8406609" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Protocol/default.aspx">Protocol</category></item><item><title>Download SP1 for MOSS, WSS 3.0 and Office 2007 Now</title><link>http://blogs.msdn.com/modonovan/archive/2007/12/11/download-sp1-for-moss-wss-3-0-and-office-2007-now.aspx</link><pubDate>Tue, 11 Dec 2007 23:21:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6738138</guid><dc:creator>modonovan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/6738138.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=6738138</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Office 2007 SP1&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9EC51594-992C-4165-A997-25DA01F388F5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=9EC51594-992C-4165-A997-25DA01F388F5&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Designer SP1 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B57C805D-2821-4625-A6F1-80725267F887&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=B57C805D-2821-4625-A6F1-80725267F887&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WSS 3.0 SP1 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=4191A531-A2E9-45E4-B71E-5B0B17108BD2&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=4191A531-A2E9-45E4-B71E-5B0B17108BD2&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MOSS 2007 SP1&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=AD59175C-AD6A-4027-8C2F-DB25322F791B&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=AD59175C-AD6A-4027-8C2F-DB25322F791B&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6738138" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint+Designer/default.aspx">SharePoint Designer</category></item><item><title>SharePoint End-User Training Released</title><link>http://blogs.msdn.com/modonovan/archive/2007/12/10/sharepoint-end-user-training-released.aspx</link><pubDate>Mon, 10 Dec 2007 10:12:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6720436</guid><dc:creator>modonovan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/6720436.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=6720436</wfw:commentRss><description>&lt;p&gt;This is a great new resource to download and either install on a user's desktop or in you SharePoint environment for all users to access. It includes videos, tutorials, articles and more.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://office.microsoft.com/en-us/sharepointserver/HA102488011033.aspx" target="_blank"&gt;Download it now&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6720436" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Training/default.aspx">Training</category></item><item><title>Great SharePoint Designer Workflow How To's, Tips and Tricks</title><link>http://blogs.msdn.com/modonovan/archive/2007/11/15/great-sharepoint-designer-workflow-how-to-s-tips-and-tricks.aspx</link><pubDate>Thu, 15 Nov 2007 17:25:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6262619</guid><dc:creator>modonovan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/6262619.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=6262619</wfw:commentRss><description>&lt;p&gt;There are some &lt;a href="http://blogs.msdn.com/sharepointdesigner/archive/2007/11/05/sharepoint-designer-help-articles.aspx" target="_blank"&gt;great new articles&lt;/a&gt; on the &lt;a href="http://blogs.msdn.com/sharepointdesigner" target="_blank"&gt;SharePoint Designer team blog&lt;/a&gt; which are really useful if you are new to SharePoint Designer workflows, or are looking for some cool workflow tips and tricks.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/sharepointdesigner/archive/2007/11/05/sharepoint-designer-help-articles.aspx" target="_blank"&gt;Check it out&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6262619" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint+Designer/default.aspx">SharePoint Designer</category></item><item><title>SharePoint Pedia has Gone Live</title><link>http://blogs.msdn.com/modonovan/archive/2007/11/05/sharepoint-pedia-has-gone-live.aspx</link><pubDate>Mon, 05 Nov 2007 17:57:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5911076</guid><dc:creator>modonovan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/5911076.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=5911076</wfw:commentRss><description>&lt;p&gt;Check it out at &lt;a href="http://sharepointpedia.com"&gt;http://sharepointpedia.com&lt;/a&gt;, looks pretty cool. Another awesome example of a solution built on MOSS.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5911076" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category></item><item><title>SharePoint End User Training Kit (SLK) Released</title><link>http://blogs.msdn.com/modonovan/archive/2007/10/12/sharepoint-end-user-training-kit-slk-released.aspx</link><pubDate>Fri, 12 Oct 2007 17:36:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5423220</guid><dc:creator>modonovan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/5423220.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=5423220</wfw:commentRss><description>&lt;p&gt;For so long we have had minimal end-user training resources. Well, now the product team has released the SharePoint End User Training Kit - &lt;a title="http://blogs.msdn.com/sharepoint/archive/2007/10/11/sharepoint-end-user-training-kit-now-available.aspx" href="http://blogs.msdn.com/sharepoint/archive/2007/10/11/sharepoint-end-user-training-kit-now-available.aspx"&gt;http://blogs.msdn.com/sharepoint/archive/2007/10/11/sharepoint-end-user-training-kit-now-available.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Also, just a couple of other links which might be useful from an end-user perspective:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;End user &amp;#x201C;How To&amp;#x201D; site launched - &lt;a href="http://office.microsoft.com/en-us/sharepointserver/FX101211721033.aspx"&gt;http://office.microsoft.com/en-us/sharepointserver/FX101211721033.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;End user quick online video &amp;#x201C;How To&amp;#x2019;s&amp;#x201D; - &lt;a href="http://office.microsoft.com/en-us/training/CR102146081033.aspx"&gt;http://office.microsoft.com/en-us/training/CR102146081033.aspx&lt;/a&gt;. You could download them and add to your own SharePoint deployment for others in the company to view.&lt;/li&gt;    &lt;li&gt;&amp;#x201C;Get the Point&amp;#x201D; end user focused blog - &lt;a href="http://sharepoint.microsoft.com/blogs/GetThePoint"&gt;http://sharepoint.microsoft.com/blogs/GetThePoint&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5423220" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Use Windows Live Writer to create blog posts ... for MOSS</title><link>http://blogs.msdn.com/modonovan/archive/2007/09/14/use-windows-live-writer-to-create-blog-posts-for-moss.aspx</link><pubDate>Fri, 14 Sep 2007 14:54:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4909406</guid><dc:creator>modonovan</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/4909406.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=4909406</wfw:commentRss><description>&lt;p&gt;I have just recently downloaded Windows Liver Writer Beta (&lt;a title="http://get.live.com/betas/home" href="http://get.live.com/betas/home"&gt;http://get.live.com/betas/home&lt;/a&gt;), and have used it to create my previous blog post. The tool is very simple to use, and the best part about it is that it can be used to post entries to a MOSS hosted Blog site. And it Just Works, with proper in context previous, categories, uploading of images in the post and more!!! The screen shots below how simple it is to setup:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1: Choose SharePoint as the blog destination (other than Windows Live Space or Other)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/Live_1.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="298" alt="Live_1" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/Live_1_thumb.jpg" width="331" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2: Specify the path the SharePoint Blog site where blog posts should be created&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/Live_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="303" alt="Live_2" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/Live_2_thumb.jpg" width="339" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3: Configure the authentication mechanism&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/Live_3.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="316" alt="Live_3" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/Live_3_thumb.jpg" width="345" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 4: Create your blog post, preview it (this is really cool, check the image below of this blog post) and then hit &amp;quot;Publish&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="323" alt="image" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/UseWindowsLiveWritertocreateblog.forMOSS_C19D/image_thumb_1.png" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4909406" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/WSS+3.0/default.aspx">WSS 3.0</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+Live+Writer/default.aspx">Windows Live Writer</category></item><item><title>How to recover SharePoint document once deleted from recycle bin</title><link>http://blogs.msdn.com/modonovan/archive/2007/09/14/how-to-recover-sharepoint-document-once-deleted-from-recycle-bin.aspx</link><pubDate>Fri, 14 Sep 2007 14:07:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4908963</guid><dc:creator>modonovan</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/modonovan/comments/4908963.aspx</comments><wfw:commentRss>http://blogs.msdn.com/modonovan/commentrss.aspx?PostID=4908963</wfw:commentRss><description>&lt;p&gt;In the scenario whereby a document has been deleted from both levels of the SharePoint recycle bin, you may have a request to recover it. Assuming you have a SQL database backup of the content database which hosted the document, you can get it back with minimal effort by following the steps below.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Important:&lt;/b&gt; Do not run these steps on the production SQL Server deployment. The idea is that this is done on a development or testing SQL Server environment where the content database which holds the document you wish to extract is restored to. This is because these steps are not officially supported by Microsoft.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 1: Get TextCopy utility and make sure it works&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The textcopy utility comes with the SQL Server 2000 resource kit and is designed to run on SQL Server 2000. However it can be used on SQL Server 2005. Get textcopy.exe from the resource kit and place it in a folder on the SQL Server 2005 machine e.g. C:\Temp. Also add into this folder a file from a SQL Server 2000 installation called ntwdblib.dll. Both of these files need to be in the same folder to work.&lt;/p&gt;  &lt;p&gt;Run textcopy.exe to ensure it works, you should see a list of textcopy commands.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 2: Determine the content database to use for extracting the document&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In order to extract the document you need to know where the document was located in the site structure. For example, below we see a document titled &amp;#x201C;CoreIOModels&amp;#x201D;, which is hosted in the sub site &amp;#x201C;Docs&amp;#x201D; in the root site collection of &lt;a href="http://moss.litwareinc.com/"&gt;http://moss.litwareinc.com&lt;/a&gt; web application. The document is in the documents document library.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/HowtorecoverSharePointdocumentoncedelete_B873/clip_image002%5B6%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="209" alt="Document in document library" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/HowtorecoverSharePointdocumentoncedelete_B873/clip_image002%5B6%5D_thumb.jpg" width="561" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You now need to determine which content database holds the document. This is done easily through Site Collection List option in the central administration application. Here you can see that the root site collection for &lt;a href="http://moss.litwareinc.com/"&gt;http://moss.litwareinc.com&lt;/a&gt; is found in the content database WSS_Content_MOSS. You need the name of the content database because SQL scripts (and textcopy) will run against this database. Also, you now know which database to restore to a test / development environment instead of restoring all you SQL databases.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/HowtorecoverSharePointdocumentoncedelete_B873/clip_image004_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="229" alt="Site Collection List" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/HowtorecoverSharePointdocumentoncedelete_B873/clip_image004_thumb.jpg" width="535" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 3: Determine the record which holds the binary image of the document to extract&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Run the following script on the database, using SQL Query Analyser in SQL Server 2005. This script will return all the records which hold document that you are looking. You may get more than one record returned, as their might be several previous versions of the document.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;USE [@database]&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;SELECT AllDocStreams.Id, AllDocStreams.[Content], AllDocStreams.Size, AllDocs.Version, AllDocs.TimeLastModified, AllDocs.CheckoutUserId, &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;AllDocs.CheckoutDate, AllDocs.IsCurrentVersion, AllDocs.DirName, AllDocs.LeafName, AllDocs.[Level]&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;FROM AllDocs INNER JOIN&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;AllDocStreams ON AllDocStreams.Id = AllDocs.Id AND AllDocs.[Level] = AllDocStreams.[Level]&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;WHERE (AllDocs.DirName = @dirname) AND (AllDocs.LeafName = @leafname)&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Variables&lt;/p&gt;  &lt;p&gt;&lt;i&gt;@leafname = filename &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;@dirname = directory name of file&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;For example in my scenario above this would be &lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;USE WSS_Content_MOSS&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;SELECT AllDocStreams.Id, AllDocStreams.[Content], AllDocStreams.Size, AllDocs.Version, AllDocs.TimeLastModified, AllDocs.CheckoutUserId, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;AllDocs.CheckoutDate, AllDocs.IsCurrentVersion, AllDocs.DirName, AllDocs.LeafName, AllDocs.[Level]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;FROM AllDocs INNER JOIN&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;AllDocStreams ON AllDocStreams.Id = AllDocs.Id AND AllDocs.[Level] = AllDocStreams.[Level]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;WHERE (AllDocs.DirName = 'docs/documents') AND (AllDocs.LeafName = 'coreiomodels.doc')&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This returns the following records in my case:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/HowtorecoverSharePointdocumentoncedelete_B873/clip_image006_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="159" alt="SQL Query Results" src="http://blogs.msdn.com/blogfiles/modonovan/WindowsLiveWriter/HowtorecoverSharePointdocumentoncedelete_B873/clip_image006_thumb.jpg" width="607" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you get multiple records returned, you will want to use the Version field and the isCurrentVersion and perhaps the TimeLastModified fields to determine which record in the one you want to extract.&lt;/p&gt;  &lt;p&gt;Take note of the ID of the record any other unique field data from the AllDocStreams table so that you can uniquely identify the record in the AllDocStreams table.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 4: Extract the document using Textcopy&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;From the command prompt run the textcopy.exe command to extract the document (from the content field) in the AllDocStreams table.&lt;/p&gt;  &lt;p&gt;Example TextCopy cmd to extract file:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;textcopy /s @server /u @user /P @password /d &amp;#x201C;@database&amp;quot; /t docs /c content /F c:\temp\filename /O /Z /W &amp;quot;where ID= &amp;#x2018;@IdofRecord&amp;#x2019; and Level=&amp;#x2019;@levelofrecord&amp;#x2019;&amp;#x201D;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Variables &lt;/p&gt;  &lt;p&gt;&lt;i&gt;@database = content database &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;@server = name of SQL Server machine to use&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;@leafname = filename &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;@dirname = directory name of file&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;@IdofRecord = Id of the content record to extract&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;@levelofrecord = level of content record to extract&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;For example, in my scenario this would be:&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;textcopy.exe /S MOSS /D wss_content_moss /T alldocstreams /C content /U sa /P pass@word1 /F c:\temp\coreidmodels.doc /O /Z /W &amp;quot;where ID='2381F6A5-0AED-4F28-A031-BAC6E08B151F' and Level='255'&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This will dump the file into the C:\Temp folder and allow me to email or place the file onto the site for the user who needs it.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4908963" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/modonovan/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.msdn.com/modonovan/archive/tags/Windows+SharePoint+Services+3.0/default.aspx">Windows SharePoint Services 3.0</category></item></channel></rss>