<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>SPDeploymentWizard Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home</link><description>SPDeploymentWizard Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>https://spdeploymentwizard.codeplex.com/wikipage?version=28</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This tool is for moving content in &amp;#42;SharePoint 2007&amp;#47;2010&amp;#47;2013&amp;#42; - within an environment &amp;#40;or across similar envs&amp;#41;. NOT an &amp;#42;upgrade&amp;#42; tool &amp;#40;e.g. 2010 to 2013&amp;#41;.&lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard provides the means to deploy the following content:&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items (including files/documents)&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API as a .cmp file&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;As discussed above, this tool is NOT an upgrade tool. It can only be used to move/copy content within a SharePoint environment, or across multiple SharePoint environments which are &lt;b&gt;at the same version&lt;/b&gt;. It &lt;b&gt;cannot&lt;/b&gt; be used to move content from SP2007 to SP2010, or SP2010 to SP2013 etc&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;All versions of this tool work with SharePoint 2010 (and probably SP2013, but not tested) though you must edit a file (one time) to do this - see notes on version 2.8 page. Also note that v2.8 (or later) provides the best install experience on 2010&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See &amp;#39;permissions&amp;#39; note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check &amp;#39;Exclude dependencies of selected objects&amp;#39; to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check &amp;#39;Retain object IDs and locations&amp;#39; to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the &amp;#39;Import web URL&amp;#39; textbox&lt;br /&gt;- ensure &amp;#39;Retain object IDs and locations&amp;#39; is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the &amp;#39;Run as..&amp;#39; feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select &amp;#39;Run as..&amp;#39;).&lt;br /&gt;&lt;br /&gt;See my blog post &amp;#39;Introducing the SharePoint Content Deployment Wizard&amp;#39; for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O&amp;#39;Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien"&gt;http://feeds.feedburner.com/ChrisObrien&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 17 Apr 2013 14:34:12 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130417023412P</guid></item><item><title>Updated Wiki: Home</title><link>https://spdeploymentwizard.codeplex.com/wikipage?version=27</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE: This tool is NOT an upgrade tool. It can only be used to move/copy content within a SharePoint environment, or across multiple SharePoint environments which are &lt;b&gt;at the same version&lt;/b&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;All versions of this tool work with SharePoint 2010 (and probably SP2013, but not tested) though you must edit a file (one time) to do this - see notes on version 2.8 page. Also note that v2.8 (or later) provides the best install experience on 2010&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for &amp;#42;SharePoint 2007&amp;#47;2010&amp;#42; which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API as a .cmp file&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See &amp;#39;permissions&amp;#39; note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check &amp;#39;Exclude dependencies of selected objects&amp;#39; to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check &amp;#39;Retain object IDs and locations&amp;#39; to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the &amp;#39;Import web URL&amp;#39; textbox&lt;br /&gt;- ensure &amp;#39;Retain object IDs and locations&amp;#39; is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the &amp;#39;Run as..&amp;#39; feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select &amp;#39;Run as..&amp;#39;).&lt;br /&gt;&lt;br /&gt;See my blog post &amp;#39;Introducing the SharePoint Content Deployment Wizard&amp;#39; for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O&amp;#39;Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien"&gt;http://feeds.feedburner.com/ChrisObrien&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 17 Apr 2013 14:19:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130417021914P</guid></item><item><title>Updated Wiki: Home</title><link>https://spdeploymentwizard.codeplex.com/wikipage?version=26</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE: This tool is NOT an upgrade tool. It can only be used to move/copy content within a SharePoint environment, or across multiple SharePoint environments which are &lt;b&gt;at the same version&lt;/b&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;All versions of this tool work with SharePoint 2010 (and probably SP2013, but not tested) though you must edit a file (one time) to do this - see notes on version 2.8 page (linked above). Also note that v2.8 (or later) provides the best install experience on 2010&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for &amp;#42;SharePoint 2007&amp;#47;2010&amp;#42; which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API as a .cmp file&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See &amp;#39;permissions&amp;#39; note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check &amp;#39;Exclude dependencies of selected objects&amp;#39; to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check &amp;#39;Retain object IDs and locations&amp;#39; to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the &amp;#39;Import web URL&amp;#39; textbox&lt;br /&gt;- ensure &amp;#39;Retain object IDs and locations&amp;#39; is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the &amp;#39;Run as..&amp;#39; feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select &amp;#39;Run as..&amp;#39;).&lt;br /&gt;&lt;br /&gt;See my blog post &amp;#39;Introducing the SharePoint Content Deployment Wizard&amp;#39; for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O&amp;#39;Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien"&gt;http://feeds.feedburner.com/ChrisObrien&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 17 Apr 2013 14:18:40 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130417021840P</guid></item><item><title>Updated Wiki: Home</title><link>https://spdeploymentwizard.codeplex.com/wikipage?version=25</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE: This tool is NOT an upgrade tool. It can only be used to move/copy content within a SharePoint environment, or across multiple SharePoint environments at the same version.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;All versions of this tool work with SharePoint 2010 (and probably SP2013, but not tested) though you must edit a file (one time) to do this - see notes on version 2.8 page (linked above). Also note that v2.8 (or later) provides the best install experience on 2010&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for &amp;#42;SharePoint 2007&amp;#47;2010&amp;#42; which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API as a .cmp file&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See &amp;#39;permissions&amp;#39; note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check &amp;#39;Exclude dependencies of selected objects&amp;#39; to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check &amp;#39;Retain object IDs and locations&amp;#39; to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the &amp;#39;Import web URL&amp;#39; textbox&lt;br /&gt;- ensure &amp;#39;Retain object IDs and locations&amp;#39; is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the &amp;#39;Run as..&amp;#39; feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select &amp;#39;Run as..&amp;#39;).&lt;br /&gt;&lt;br /&gt;See my blog post &amp;#39;Introducing the SharePoint Content Deployment Wizard&amp;#39; for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O&amp;#39;Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien"&gt;http://feeds.feedburner.com/ChrisObrien&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 17 Apr 2013 14:17:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130417021720P</guid></item><item><title>Updated Wiki: Home</title><link>http://spdeploymentwizard.codeplex.com/wikipage?version=24</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;UPDATE: Release 2.8 beta released 07 April 2010 with source code - see &lt;a href="http://spdeploymentwizard.codeplex.com/releases/view/42380" class="externalLink"&gt;Release 2.8 beta page&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes. Note also that this has now become the default release - previous reviews and download stats can be found under older releases.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NOTE: All versions of this tool work with SharePoint 2010 though you must edit a file (one time) to do this - see notes on version 2.8 page (linked above). Also note that v2.8 (or later) provides the best install experience on 2010&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for &amp;#42;SharePoint 2007&amp;#47;2010&amp;#42; which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API as a .cmp file&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See &amp;#39;permissions&amp;#39; note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check &amp;#39;Exclude dependencies of selected objects&amp;#39; to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check &amp;#39;Retain object IDs and locations&amp;#39; to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the &amp;#39;Import web URL&amp;#39; textbox&lt;br /&gt;- ensure &amp;#39;Retain object IDs and locations&amp;#39; is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the &amp;#39;Run as..&amp;#39; feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select &amp;#39;Run as..&amp;#39;).&lt;br /&gt;&lt;br /&gt;See my blog post &amp;#39;Introducing the SharePoint Content Deployment Wizard&amp;#39; for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O&amp;#39;Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 07 Apr 2010 22:03:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100407100301P</guid></item><item><title>Updated Wiki: Home</title><link>http://spdeploymentwizard.codeplex.com/wikipage?version=23</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;UPDATE: Release 2.8 beta released 07 April 2010 with source code - see &lt;a href="http://spdeploymentwizard.codeplex.com/releases/view/42380" class="externalLink"&gt;Release 2.8 beta page&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes. Note also that this has now become the default release - previous reviews and download stats can be found under older releases.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See &amp;#39;permissions&amp;#39; note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check &amp;#39;Exclude dependencies of selected objects&amp;#39; to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check &amp;#39;Retain object IDs and locations&amp;#39; to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the &amp;#39;Import web URL&amp;#39; textbox&lt;br /&gt;- ensure &amp;#39;Retain object IDs and locations&amp;#39; is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the &amp;#39;Run as..&amp;#39; feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select &amp;#39;Run as..&amp;#39;).&lt;br /&gt;&lt;br /&gt;See my blog post &amp;#39;Introducing the SharePoint Content Deployment Wizard&amp;#39; for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O&amp;#39;Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 07 Apr 2010 21:56:55 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100407095655P</guid></item><item><title>Updated Wiki: Home</title><link>http://spdeploymentwizard.codeplex.com/wikipage?version=22</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;UPDATE: Release 2.7 beta released 16 October 2009 with source code - see &lt;a href="http://spdeploymentwizard.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34518" class="externalLink"&gt;Release 2.7 beta page&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes. Note also that this has now become the default release - previous reviews and download stats can be found under the 1.1 release.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt;&lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Fri, 16 Oct 2009 01:46:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20091016014648A</guid></item><item><title>Updated Wiki: Home</title><link>http://spdeploymentwizard.codeplex.com/Wiki/View.aspx?title=Home&amp;version=21</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;UPDATE: Release 2.6 beta released 29 August 2009 with source code - see &lt;a href="http://spdeploymentwizard.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32161" class="externalLink"&gt;Release 2.6 beta page&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes. Note also that this has now become the default release - previous reviews and download stats can be found under the 1.1 release.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt;&lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Sat, 29 Aug 2009 19:27:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090829072711P</guid></item><item><title>Updated Wiki: Home</title><link>http://spdeploymentwizard.codeplex.com/Wiki/View.aspx?title=Home&amp;version=20</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;UPDATE: Release 2.5 beta released 16 August 2009 with source code - see &lt;a href="http://spdeploymentwizard.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31628" class="externalLink"&gt;Release 2.5 beta page&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes. Note also that this has now become the default release - previous reviews and download stats can be found under the 1.1 release.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.&lt;br /&gt;&lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" title="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" title="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;
&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;
&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;
&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;
&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;
&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;
&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;
&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt;&lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt;&lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Sun, 16 Aug 2009 17:49:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090816054901P</guid></item><item><title>Updated Wiki: Home</title><link>http://spdeploymentwizard.codeplex.com/Wiki/View.aspx?title=Home&amp;version=19</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;UPDATE: Release 2.0 beta released 25 March 2009 with source code - see &lt;a href="http://spdeploymentwizard.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25271" class="externalLink"&gt;Release 2.0 beta page&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes. This is &lt;b&gt;not&lt;/b&gt; the default release since it's in beta, so you need to use this link to download this version.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Sun, 29 Mar 2009 15:50:56 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090329035056P</guid></item><item><title>Updated Wiki: Home</title><link>http://spdeploymentwizard.codeplex.com/Wiki/View.aspx?title=Home&amp;version=18</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;UPDATE: Release 2.0 beta released 25 March 2009 with source code - see &lt;a href="http://spdeploymentwizard.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25271" class="externalLink"&gt;Release 2.0 beta page&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes. This is &lt;b&gt;not&lt;/b&gt; the default release since it's in beta, so you need to use the link above to download this version.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Sun, 29 Mar 2009 15:48:50 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090329034850P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=17</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;UPDATE: Release 1.1 version released 22 September 2008 with source code - see Release 1.1 page for release notes&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Sun, 21 Sep 2008 23:38:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080921113849P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=16</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Attention Project Owner,&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;We have been informed by CodePlex users that your project does not meet the &lt;a href="http://www.codeplex.com/CodePlex/Wiki/View.aspx?title=Project%20hosting%20requirements&amp;amp;referringTitle=CodePlex%20Help%20Wiki" class="externalLink"&gt;CodePlex project hosting requirements&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.  To be hosted on CodePlex, the source code to your project must be included.  We have unpublished your project in order for you to post the source code.  After doing so, you may republish your project.&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Please &lt;a href="https://www.codeplex.com/ContactUs.aspx" class="externalLink"&gt;contact us&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; with any questions.&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Thank you,&lt;/b&gt;&lt;br /&gt;&lt;b&gt;CodePlex Administration&lt;/b&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;UPDATE: Release 1.0 version released 22 June 2008 - see Release 1.0 page for release notes&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>jwanageladmin</author><pubDate>Wed, 17 Sep 2008 21:03:54 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080917090354P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=15</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;UPDATE: Release 1.0 version released 22 June 2008 - see Release 1.0 page for release notes&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://www.sharepointnutsandbolts.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Sun, 22 Jun 2008 19:39:23 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080622073923P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=14</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;UPDATE: Release 1.0 version released 22 June 2008 - see Release 1.0 page for release notes&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. The import operation overwrites your site data, always take a backup before importing.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Sun, 22 Jun 2008 19:30:51 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080622073051P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=13</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;UPDATE: beta 2 version released 28 Feb 2008 - see beta 2 page for release notes&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. In this beta version, not all possible deployment scenarios have been tested. Please take a backup before performing imports.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Mon, 03 Mar 2008 15:26:27 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080303032627P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=12</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;+ UPDATE: beta 2 version released 28 Feb 2008 - see &lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=SPDeploymentWizard&amp;amp;ReleaseId=11148" class="externalLink"&gt;http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=SPDeploymentWizard&amp;amp;ReleaseId=11148&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; for release notes +&lt;br /&gt; &lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- folders&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exported using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. In this beta version, not all possible deployment scenarios have been tested. Please take a backup before performing imports.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Mon, 03 Mar 2008 15:24:46 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080303032446P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=11</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exporting using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. In this beta version, not all possible deployment scenarios have been tested. Please take a backup before performing imports.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/ChrisObrien" class="externalLink"&gt;http://feeds.feedburner.com/ChrisObrien&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 05 Dec 2007 15:51:53 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20071205035153P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exporting using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. In this beta version, not all possible deployment scenarios have been tested. Please take a backup before performing imports.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;div class="rss"&gt;
&lt;div class="accentbar"&gt;
&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;NEWS FEED&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/190405968/part-2-blending-publishingcollaboration.html"&gt;Part 2 : Blending publishing/collaboration functionality in SharePoint&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, November 25, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;div&gt; &lt;p&gt;A couple of months ago I wrote an article on some of the issues around &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/09/blending-publishingcollaboration.html" target="_blank"&gt;building sites which are not pure publishing or collaboration solutions&lt;/a&gt;, but which mix features of the two. I mentioned at the time that I would follow up on these issues and any others we came across at the end of the project, so here it is.&lt;/p&gt; &lt;p&gt;As a quick recap, we said that characteristics of a site which blends publishing/collab features could be:&lt;/p&gt; &lt;li&gt;site has completely bespoke look and feel/navigation &lt;li&gt;users will work with document libraries, discussions, calendars etc. &lt;li&gt;site templates or definitions are used to create several sites with the same content/functionality &lt;li&gt;custom workflow is used to support a business process (other than standard content publishing), perhaps with InfoPath forms&lt;br&gt;&lt;br&gt; &lt;p&gt;So let's cover&amp;nbsp;some of the issues you may face in projects like this:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;strong&gt;&lt;u&gt;&lt;u&gt;&lt;strong&gt;Look and feel of system pages&lt;/strong&gt;&lt;/u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;This refers to the fact that whilst pages you create will&amp;nbsp;happily use your custom master page, any 'system' pages in the '_layouts' directory will not share this look and feel by default since they reference a separate master page, 'application.master', which is also stored on the filesystem in '_layouts'. Such pages are often seen due to the use of collaboration functionality in our site, examples being when a user uploads or edits metadata for a file,&amp;nbsp;starts a workflow etc.&lt;br&gt;&lt;br&gt;In fact this turned out to be less of an issue than I anticipated because: &lt;ul&gt; &lt;li&gt;a quick test showed that the use of a HTTP module to switch the master page of these pages works fine. Several people have &lt;a href="http://weblogs.asp.net/soever/archive/2006/11/14/SharePoint-2007_3A00_-using-the-masterpage-from-your-site-in-custom-_5F00_layouts-pages.aspx#comments" target="_blank"&gt;documented this approach&lt;/a&gt;, and I note that Ted Pattison has provided a &lt;a href="http://www.codeplex.com/SuperBranding" target="_blank"&gt;Codeplex feature&lt;/a&gt; for those who would prefer not to write their own code for this. (N.B. though not strictly supported, the idea behind the HTTP module approach is that it is better than modifying files installed with SharePoint such as 'application.master', and can be disabled with a switch if we need to fall back in line with official support.)  &lt;li&gt;our client decided this was a low priority item, that we may or may not deal with further down the line&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;On this subject, I see that Microsoft have themselves released KB article &lt;a href="http://support.microsoft.com/kb/944105" target="_blank"&gt;How to customize application pages in the Layouts folder in SharePoint Server 2007 and in Windows SharePoint Services 3.0&lt;/a&gt;. Bizarrely, the proposed solutions are modifying the standard files but taking backups of the originals, or duplicating the 'layouts' virtual directory in IIS - the HTTP module idea is not mentioned. Without dwelling on this too much, this seems crazy to me and &lt;a href="http://www.binarywave.com/blogs/eshupps/Lists/Posts/Post.aspx?ID=67" target="_blank"&gt;I'm not the only one&lt;/a&gt;. I still much prefer the HTTP module solution and will use this on my projects where it is required, though will be sure to regression test thoroughly.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;br&gt;Use of InfoPath with forms authentication&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This is an interesting illustration of blending the two types of functionality - collaboration solutions may well use InfoPath for forms, but publishing sites typically use forms auth for a customized/branded login experience. Straight away we ran into problems&amp;nbsp;using InfoPath&amp;nbsp;with forms auth&amp;nbsp;- essentially&amp;nbsp;the link to create&amp;nbsp;a new instance of an InfoPath form in a forms library would disappear (example link shown below [Windows auth enabled here]):&lt;/p&gt;&lt;br&gt; &lt;p&gt;&lt;a href="http://bp0.blogger.com/_DPonmXhJQ4g/R0lh-eOM0GI/AAAAAAAAAFM/2pvU6Ig1Re8/s1600-h/ClientIntegrationLinks.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5136744575885168738" style="cursor: hand" alt="" src="http://bp0.blogger.com/_DPonmXhJQ4g/R0lh-eOM0GI/AAAAAAAAAFM/2pvU6Ig1Re8/s320/ClientIntegrationLinks.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;It took a while for me to track down that this is related to the 'Client Integration' switch in Central Admin. For a forms auth site, this gets set to 'off' by default, but defaults to 'on' for windows auth sites. Unfortunately, resolving the problem isn't as simple as flicking the switch back, since what the switch does is remove certain links and disable ActiveX controls which integrate with the browser for link-handling. With the switch&amp;nbsp;enabled again, the InfoPath link reappears on the content type, but when&amp;nbsp;a link to say, a Word document is followed, the browser&amp;nbsp;now shows the basic prompt to download or save the file. This means the&amp;nbsp;more sophisticated 'do you want to check out or open as read-only' prompt is lost and users must work with documents offline and upload to SharePoint &lt;em&gt;at the end of editing&lt;/em&gt;, rather than being able to save back directly to the SharePoint repository. In other words, unacceptable to most&amp;nbsp;for a SharePoint&amp;nbsp;2007 collaboration solution.&lt;/p&gt; &lt;p&gt;In the end I found others in the same position, but didn't find a solution in a short timeframe. Microsoft support tells me "they were unaware of any instances of&amp;nbsp;of these two features working together&amp;nbsp;in this way", so the disappointing conclusion is that these two bits of functionality don't play well together. Our client thus decided to accept windows authentication (our authentication store was always going to be AD&amp;nbsp;rather than SQL anyhow).&amp;nbsp;&lt;strong&gt;However, &lt;/strong&gt;I'm actually convinced it would be possible to get this working given more time - I think the way forward would be to amend the site design to have a link to the InfoPath form in the standard content of a page rather than relying on SharePoint to supply the link. The information supplied in &lt;a href="http://msdn2.microsoft.com/en-gb/library/ms772417.aspx" target="_blank"&gt;How to: Use Query Parameters to Invoke Browser-Enabled InfoPath Forms&lt;/a&gt;&amp;nbsp;would be used here. I'm sure this must be possible and others have done it, I'd be interested to hear from anyone who has.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;br&gt;Overidden control&amp;nbsp;not appearing on standard collaboration pages&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Our client had requested some customizations to the search box, and going through our bug list towards the end of development, I realised that our customized version&amp;nbsp;was&amp;nbsp;present&amp;nbsp;on pages we had created, but not existing list&amp;nbsp;pages such as [MyList]/Forms/AllItems.aspx or similar. This seemed strange given that&amp;nbsp;all pages were using our custom&amp;nbsp;master&amp;nbsp;and shared the same header! Digging deeper, this is caused by the fact that SharePoint uses a &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/06/using-delegate-control.html" target="_blank"&gt;delegate control&lt;/a&gt;&amp;nbsp;to load the search box .ascx file, and to properly override the control across the site, we needed to create a Feature to specify that &lt;em&gt;our&lt;/em&gt; .ascx file should be used in preference to the standard control. If we had directly replaced the existing control on the filesystem this would not be required, but when adding custom files in order&amp;nbsp;to avoid modifications to existing files, this extra piece is required. One to look out for when building sites of this nature.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;strong&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I read some blogs/discussion threads&amp;nbsp;earlier this week which suggest customizing SharePoint in this way is nigh on impossible, but our project (and surely many others) prove this isn't the case. As is often the case with such a functional platform, there's perhaps a greater chance of success if you understand the nuts and bolts of what SharePoint is doing, but extensive customizations to collaboration-focused sites are inherently possible!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/190405968" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/183286942/change-sharepoint-site-url.html"&gt;Change a SharePoint site's URL&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, November 11, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Something you may find yourself tasked with at some point, is changing the URL of an existing SharePoint 2007&amp;nbsp;site. This is a fairly interesting scenario, and it's fair to say the relationship between SharePoint and IIS makes this more complex than for a standard .Net site. However, there are&amp;nbsp;several&amp;nbsp;possible&amp;nbsp;solutions. The first things many of us would think of as potential approaches would probably be:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;extending the web application onto another URL&lt;/li&gt; &lt;li&gt;using Alternate Access Mappings somehow&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Depending on your site both could be valid methods, but as with anything SharePoint-related, there are different things to watch out for with the different approaches. As an example, extending the web application wasn't the right approach for our scenario for the following reasons:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;the site shouldn't actually exist at the old URL, but a redirect &lt;em&gt;was&lt;/em&gt; required&lt;/li&gt; &lt;li&gt;InfoPath forms don't seem to deal well with the&amp;nbsp;'extended web application' configuration. (Problem detail&amp;nbsp;- on one URL everything will be fine, but&amp;nbsp;if the two web applications use&amp;nbsp;separate site collections,&amp;nbsp;on the other you're likely to see security errors when opening forms. This is because the form templates are referenced in the other site collection - a document library can only have one URL to the document template, and publishing a form to a content type stores an absolute link in the content database.)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Additionally some quick tests with Alternate Access Mappings didn't seem to give the expected results for me, so I decided on another approach since I knew it would work and didn't have much time for experimentation. So this was my process:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Changing a site's URL&amp;nbsp;by recreating the site (downtime required)&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Stop old IIS site. &lt;/li&gt; &lt;li&gt;Create new web application in SharePoint, bind to&amp;nbsp;new&amp;nbsp;IP address in IIS.&lt;/li&gt; &lt;li&gt;Apply SSL certificate if appropriate.&lt;/li&gt; &lt;li&gt;Create new site collection for this web application using the &lt;strong&gt;blank site template&lt;/strong&gt;.&lt;/li&gt; &lt;li&gt;Export content using the SharePoint's content migration API (I have a tool which does this, which will shortly be on Codeplex) ensuring all security data is exported. &lt;strong&gt;Alternatives&amp;nbsp;to this step include STSADM -O BACKUP and STSADM-O EXPORT. *&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;Import content into the new site collection, ensuring to include security.&lt;/li&gt; &lt;li&gt;Amend any absolute URLs in .udcx data connection files used by InfoPath.&lt;/li&gt; &lt;li&gt;Republish any InfoPath forms to the new site.&lt;/li&gt; &lt;li&gt;Configure search:&lt;/li&gt; &lt;ol&gt; &lt;li&gt;Ensure new URL is a content source.&lt;/li&gt; &lt;li&gt;Update any crawl rules which use absolute URLs.&lt;/li&gt; &lt;li&gt;Update 'authoritative pages' as appropriate.&lt;/li&gt; &lt;li&gt;Start full crawl.&lt;/li&gt; &lt;li&gt;Update scopes.&lt;/li&gt; &lt;li&gt;Go to Site Settings &amp;gt; Site collection administration &amp;gt; Search scopes, add any custom scopes to search dropdown (if using standard search web parts).&lt;/li&gt; &lt;li&gt;Ensure search web parts use relative URLs/do not reference old site URLs.&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;If a redirect from old URL is required, create new IIS site to implement this:&lt;/li&gt; &lt;ol&gt; &lt;li&gt;Create new site in IIS&amp;nbsp;and bind to old IP address.&lt;/li&gt; &lt;li&gt;On 'Home directory' tab, specify content should come from 'A redirection to a URL' and enter the URL.&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Ensure DNS/firewalls are configured appropriately for new URL, remembering to allow appropriate time for DNS propagation.&lt;/li&gt; &lt;li&gt;Perform testing.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;*&amp;nbsp;N.B. Between&amp;nbsp;the content migration API and STSADM&amp;nbsp;export, I prefer the former&amp;nbsp;since this allows control over whether object GUIDs are retained&amp;nbsp;(more information in &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/10/stsadm-export-content-deployment.html"&gt;STSADM export, Content Deployment, Content Migration API, Features/Solutions - deployment options compared&lt;/a&gt;). STSADM backup/restore is discussed in next section.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Considerations to this approach&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;When using the content migration API or STSADM backup/restore, the following items are not included - alerts, workflows, recycle bin state or site collection properties. These must be migrated/recreated separately. &lt;/li&gt; &lt;li&gt;Regression testing is absolutely required&amp;nbsp;since the site is effectively recreated&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;As a way to improve on the first consideration, another option would be&amp;nbsp;STSADM backup/restore (though I've not tried this approach). Notably this method &lt;em&gt;does&lt;/em&gt;&amp;nbsp;collect&amp;nbsp;data for the items which the other approaches exclude, however due to the nature of our site,&amp;nbsp;none of these were significant problems.&lt;/p&gt; &lt;p&gt;So this method was successful, and hopefully this information allows folks to see some of the pros and cons without having to spend the time going through it themselves. However, I also note an &lt;a href="http://faraz-khan.blogspot.com/2007/11/how-to-change-sharepoint-site-url.html" target="_blank"&gt;approach based on Alternate Access Mappings suggested by Faraz Khan&lt;/a&gt;. Since this was only published in the&amp;nbsp;few days before this article&amp;nbsp;it was too late for my scenario, though I'd encourage you to take a look. Note that Faraz also points out&amp;nbsp;considerations such as certain links not being updated to new URL without fix-ups, though this doesn't seem to be a major issue. It does echo my point about there being&amp;nbsp;different things to watch out for with the different approaches, but both methods provide valid techniques for changing a&amp;nbsp;SharePoint site's URL.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/183286942" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/178449610/master-pagespage-layouts-deployed-as.html"&gt;Master pages/page layouts deployed as Feature not updating&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Thursday, November 01, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Since &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/04/deploying-master-pages-and-page-layouts.html" target="_blank"&gt;Deploying master pages and page layouts as a Feature&lt;/a&gt; has been the most heavily commented article on this blog, and several of the posters seem to have run into the same problem, I wanted to write a quick post with some more information from my experiences on this.&lt;/p&gt; &lt;p&gt;So this is something of a non-standard post, feel free to tune out if it doesn't affect you ;-)&lt;/p&gt; &lt;p&gt;Anyway, I decided to do some more testing to see if either I'd got something wrong or if perhaps I was doing something differently to the people having problems. My test was basically to knock up a publishing site with a master page and page layout (associated with a custom content type as it often would be), then go through the update process. This is what I found:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;making updates to the files (outside of the 12 folder) and then XCOPYing these to overwrite the files in the 12\TEMPLATE\features\MyFeature\ directory successfully updated the site. &lt;strong&gt;No need to deactivate/activate the Feature.&lt;/strong&gt; &lt;li&gt;using a &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/07/building-and-deploying-sharepoint.html" target="_blank"&gt;Solution package&lt;/a&gt; to deploy the files (when using Features this is generally what I do since I'm in a farm environment) -&amp;nbsp;again this updated the site correctly when I upgrade the Solution (stsadm -o upgradesolution). This is to be expected since underneath the exact same thing is happening as in the previous test. (However, I also noticed occasionally the directory would complete disappear even after the solution upgrade had completed, or was there but still locked by another process, meaning the files could not be accessed even in Windows Explorer - this is slightly irritating but running the Solution upgrade again always succeeded.) &lt;li&gt;after causing the file to be customized (e.g. modifying or even just checking out with SPD), any subsequent updates to the files via the Feature/Solution did &lt;strong&gt;not&lt;/strong&gt; appear on the site (though further updates in SPD are fine).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In short, this is all what I expected. Assuming the file has not been customized, anything which updates the copy on the filesystem will cause an update to the site. If it &lt;em&gt;has &lt;/em&gt;been customized, updates on the filesystem will not (since the file has now been added to the content database, and the filesystem version is no longer used). If you've not come across this before, &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/07/considerations-when-using-features-to.html" target="_blank"&gt;Considerations when using Features to deploy SharePoint files - ghosting/unghosting&lt;/a&gt; may help. &lt;/p&gt; &lt;p&gt;So, I'm guessing that if your master pages etc. are not updating when you overwrite the Feature files, it's because the files have become customized somehow. Unfortunately it's not so easy to tell for publishing files - for other files, SharePoint Designer provides a handy blue dot next to the file in it's Explorer view if the file is customized, but alas this doesn't happen for master pages/page layouts. The blue dot can be seen next to the AllItems.aspx file below (click to enlarge):&lt;/p&gt; &lt;div&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/RypS8FfvleI/AAAAAAAAAE8/o3zVTj2r2nA/s1600-h/SPDCustomizedFile.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5128002317935678946" style="cursor: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/RypS8FfvleI/AAAAAAAAAE8/o3zVTj2r2nA/s320/SPDCustomizedFile.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Unfortunately this also means reverting to the file on the filesystem is not straightforward either (we can't right-click the file in SPD and select 'Reset to site definition' as we can with other SharePoint files). So this can be a pain if you do want to keep your page layouts referenced from the filesystem (e.g. because performance is critical), but you've ended up in this state. It is possible to revert the files using the API though. I've not needed to do this myself, but the property to check is &lt;font face="Courier New"&gt;SPFile.CustomizedPageStatus &lt;/font&gt;and if this returns &lt;font face="Courier New"&gt;SPCustomizedPageStatus.Customized&lt;/font&gt;, then the&amp;nbsp;&lt;font face="Courier New"&gt;SPFile.RevertContentStream()&lt;/font&gt; method can be used - this should cause SharePoint to henceforth use the version on the filesystem (though&amp;nbsp;note you may lose some updates which had been made&amp;nbsp;after the file was&amp;nbsp;unghosted (customized) - you will need to re-apply these to the filesystem file after the reversion. And remember, don't use SPD for this or you'll be back where you started!)&lt;/p&gt; &lt;p&gt;So far, so (reasonably) straightforward.&lt;/p&gt; &lt;p&gt;However, one poster (deelpunt) had an &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/04/deploying-master-pages-and-page-layouts.html#c6844803187246346336" target="_blank"&gt;interesting question about updating page layouts with web parts&lt;/a&gt;. As far as I can see, updating all page instances to have web parts &lt;em&gt;in web part zones &lt;/em&gt;by updating the layouts will not be possible. This is because if web part zones are used, the web part is associated with the page &lt;em&gt;instance&lt;/em&gt; rather than the page layout. Indeed, this can be the power of the architecture. It &lt;em&gt;is &lt;/em&gt;possible to either:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;have default web parts added to a zone when a page instance is created from a page layout. This can be done by deploying the page layout using a Feature, and using the &lt;font face="Courier New"&gt;AllUsersWebPart&lt;/font&gt; tag. This would not affect pages already created however. &lt;li&gt;add web parts to all the pages by adding them directly to the page markup in SPD, rather than in a zone. Of course, this then means the settings for the web part can only be modified by the page designer in SPD, rather than site users.  &lt;li&gt;use the API to iterate through all pages in the site to add/modify webparts using SPFile.GetLimitedWebPartManager(). Needless to say, this is the kind of operation which requires a lot of care and planning in production!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;As I've mentioned before, because of these issues the web part zone architecture is often not the best choice for scenarios such as WCM site development, since here we want our changes to apply across all pages which use the layout.&lt;/p&gt; &lt;p&gt;Hopefully this has been of some use. As always, leave a comment if you've had different experiences to those detailed here, I'd definitely be interested to hear.&lt;/p&gt; &lt;p&gt;[I also wanted to say sincere apologies to the commenters on the original post (and any others I've been slow in replying to) that it took a couple of weeks for me to come back. Something to do with my project going live and moving house at the same time, hopefully normal service now resumed&amp;nbsp;;-) ]&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/178449610" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/176606567/stsadm-export-content-deployment.html"&gt;STSADM export, Content Deployment, Content Migration API, Features/Solutions - deployment options compared&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Monday, October 29, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Back in May I wrote a post titled &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/05/sharepoint-deployment-optionsfeatures.html"&gt;SharePoint deployment options : Features or Content Deployment?&lt;/a&gt;, which discussed some thoughts on what was the "right" way to move assets from development to production (and perhaps environments in between) during the site development process in SharePoint. Having now worked on other projects and consciously used different deployment methods on each, I'm rapidly coming to the conclusion that the "right" way to do deployment varies according to circumstances. So I thought what might be useful is an analysis of the whole range of deployment options, with&amp;nbsp;information which might help you decide more easily on how you will complete this crucial step of the process.&amp;nbsp;  &lt;p&gt;So let's run through the options and their characteristics. Note by the way, that none of the options use&amp;nbsp;'destructive synchronization', where &lt;strong&gt;all&lt;/strong&gt; content is first deleted before import.&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Using STSADM export/import&lt;/u&gt;&lt;/strong&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/em&gt;  &lt;p&gt;Uses STSADM commands to generate a file (export) which can then be transferred to the&amp;nbsp;target for import.&amp;nbsp;&amp;nbsp;One of the simplest ways of moving content from one place to another, although unlikely to be suitable as a continuous deployment mechanism. Examples:  &lt;p&gt;&lt;font face="Courier New"&gt;stsadm.exe -o export -url http://localhost -filename C:\Export.cab -includeusersecurity -versions 4 -overwrite&lt;/font&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;stsadm.exe -o import -url &lt;/font&gt;&lt;a href="http://localhost/sites/newsite"&gt;&lt;font face="Courier New"&gt;http://localhost/sites/newsite&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt; -filename C:\Export.cab -includeusersecurity&lt;/font&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Good for:&lt;/strong&gt;&lt;/em&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Moving an entire site/web as a one off  &lt;li&gt;Quick deployment tests  &lt;li&gt;Reparenting webs (can be into a different&amp;nbsp;site collection)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Considerations:&lt;/strong&gt; &lt;/em&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Content on target will be overwritten if already exists  &lt;li&gt;Granularity down to web only  &lt;li&gt;Object&amp;nbsp;GUIDs are not preserved&amp;nbsp;(so some things will need to be 'fixed up' e.g. anything that references a list by GUID - ListViewWebPart, using lists with InfoPath forms)&amp;nbsp;  &lt;li&gt;Not a backup/restore tool - although it's the option which is most like backup/restore, things like&amp;nbsp;alerts, audit trail,&amp;nbsp;recycle bin items, security state, workflow tasks/state are not exported  &lt;li&gt;Not transactional&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Using Content Deployment via Central Admin&lt;/u&gt;&lt;/strong&gt; *  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/em&gt;  &lt;p&gt;Configured&amp;nbsp;via 'Content Deployment paths and jobs' in Central Admin ('/_admin/deployment.aspx').&amp;nbsp;A path defines the&amp;nbsp;source/target and authentication details, specific&amp;nbsp;jobs define exactly which content should be deployed and how often. Quick deploy functionality allows users with permissions to specify important content which should be deployed more regularly than existing job schedules configured by administrators (quick deploy items are deployed every 15 mins).  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Good for:&lt;/strong&gt;&lt;/em&gt;  &lt;ul&gt; &lt;li&gt;Moving entire site collections/webs on a scheduled basis e.g. in an authoring/production or authoring/staging/production topology  &lt;li&gt;Deploying only incremental changes, e-mail notifications of success/failures  &lt;li&gt;Allowing site owners to have some control over&amp;nbsp;content deployment via Quick Deploy  &lt;li&gt;Automatically deploying dependencies of&amp;nbsp;content selected for deployment, even if in different site (e.g. page layouts/content types/site columns/referenced images etc.)&amp;nbsp;  &lt;li&gt;Automatically transferring the deployment package to the target environment (via HTTP[S])  &lt;li&gt;Not transactional&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Considerations:&lt;/strong&gt; &lt;/em&gt; &lt;ul&gt; &lt;li&gt;Content on target will be overwritten if already exists  &lt;li&gt;Granularity down to web only  &lt;li&gt;No differentiation between site content (e.g. pages/images) and site 'infrastructure' (e.g. master pages, page layouts)  &lt;li&gt;Object GUIDs are preserved  &lt;li&gt;Blank site template should be used for source and destination (see &lt;a title="http://support.microsoft.com/kb/923592" href="http://support.microsoft.com/kb/923592"&gt;http://support.microsoft.com/kb/923592&lt;/a&gt;)  &lt;li&gt;Also not a backup/restore tool (see above)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Using the content migration API *&lt;/u&gt;&lt;/strong&gt;&amp;nbsp;  &lt;p&gt;Involves writing code which uses the content migration API (known as PRIME) to export then import content -&amp;nbsp;the API is easy to use.  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Good for:&lt;/strong&gt;&lt;/em&gt;  &lt;ul&gt; &lt;li&gt;Complete flexibility over deployment options  &lt;li&gt;Granular control over what gets deployed (down to item level)  &lt;li&gt;Ability to preserve object GUIDs (so that list GUIDs do not need to fixed-up)  &lt;li&gt;Ability to select options for security, versioning and user roles&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Considerations:&lt;/strong&gt;&lt;/em&gt;  &lt;ul&gt; &lt;li&gt;Blank site template should be used for source and destination (see &lt;a title="http://support.microsoft.com/kb/923592" href="http://support.microsoft.com/kb/923592"&gt;http://support.microsoft.com/kb/923592&lt;/a&gt;)  &lt;li&gt;Not transactional  &lt;li&gt;Also not a backup/restore tool (see above)  &lt;li&gt;Need development skills to write code&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Using Features/Solutions&lt;/u&gt;&lt;/strong&gt;  &lt;p&gt;The focus of this blog for &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/03/serieshow-to-create-common-moss-site.html" target="_blank"&gt;several articles&lt;/a&gt;. Involves&amp;nbsp;defining XML configuration files&amp;nbsp;which SharePoint uses to add artifacts&amp;nbsp;in the correct way on the target. This can be significantly more complex than simply developing in SharePoint Designer&amp;nbsp;but can allow for better management throughout&amp;nbsp;a solution's lifecycle.  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Good for:&lt;/strong&gt; &lt;/em&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Iterative development/deployment  &lt;li&gt;Deployment of assemblies and filesystem files (none of the other methods deal with this)  &lt;li&gt;Ability to deploy assemblies/filesystem files to all servers in a farm with Solution packages  &lt;li&gt;Possibilities for continuous integration &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Considerations:&lt;/strong&gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Developer is responsible for evaluating and deploying dependencies (e.g. underlying content types).  &lt;li&gt;Updates to content types, list definitions, site columns etc.&amp;nbsp;deployed via a&amp;nbsp;Feature &amp;nbsp;must be done with the API - modifying original Feature files and then reprovisioning is not supported  &lt;li&gt;Can be very time-consuming due to lack of assistance from current tools&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;table cellspacing="0" cellpadding="2" width="703" border="1" unselectable="on"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="701"&gt;&lt;em&gt; &lt;p&gt;&lt;em&gt;* &lt;u&gt;Some additional notes on using Content Deployment or content migration APIs:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;- appropriate Features will automatically be &lt;em&gt;activated&lt;/em&gt; on the target, but they must be present (i.e. installed) for content deployment to work (N.B. publishing feature should not be enabled on target for first deployment)&lt;/p&gt; &lt;p&gt;- using Content Deployment or content migration API with RetainObjectIdentity option should not be combined with STSADM -export/import, since the latter will allocate new IDs!&lt;/p&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;So clearly there can be a few aspects to consider in choosing how to go about deployment for&amp;nbsp;your project. In many scenarios where Features/Solutions aren't the most appropriate option, I favor using the content migration API, mainly&amp;nbsp;due to the flexibility which isn't provided in any of the other options. Of course it does mean writing code, but&amp;nbsp;as I mentioned last time, I'll soon share the mini-app I wrote so you don't have to!&amp;nbsp;&lt;/p&gt; &lt;p&gt;Some useful references:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/sharepoint/archive/2006/05/02/content-deployment.aspx" target="_blank"&gt;Tyler Butler's Content Deployment overview&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.technet.com/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-1.aspx" target="_blank"&gt;Stefan's series of articles on the content migration API&lt;/a&gt;&lt;/p&gt; &lt;p&gt;How to use Features to deploy &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/04/deploying-master-pages-and-page-layouts.html" target="_blank"&gt;master pages/page layouts,&lt;/a&gt;&amp;nbsp;&lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/05/deploying-web-parts-as-feature.html" target="_blank"&gt;web parts&lt;/a&gt;,&amp;nbsp;&lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/04/deploying-content-types-as-feature.html" target="_blank"&gt;content types&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/176606567" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/169889182/deployment-using-stsadm-export-or.html"&gt;Deployment using STSADM export or content migration API&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, October 14, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Having&amp;nbsp;focused&amp;nbsp;on &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/03/serieshow-to-create-common-moss-site.html" target="_blank"&gt;deployment using Features&lt;/a&gt; for several articles,&amp;nbsp;back in May I wrote an article titled &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/05/sharepoint-deployment-optionsfeatures.html" target="_blank"&gt;SharePoint deployment options : Features or Content Deployment?&lt;/a&gt;, which explored some of the decisions around&amp;nbsp;deployment strategies for SharePoint projects. There are a variety of methods which can be used&amp;nbsp;to move SharePoint artifacts and content from one place to another, and I think it's fair to say there's still a certain amount of confusion around deployment&amp;nbsp;for many SharePoint developers. I certainly wouldn't claim to have all the answers, but after delivering another project last week, it seems like a good time to go over some of the experiences and&amp;nbsp;reflect&amp;nbsp;on the different approaches. &lt;/p&gt; &lt;p&gt;Needless to say, as far as deployment strategies go in general, the best idea is&amp;nbsp;to have one! I see many newsgroup posts from&amp;nbsp;people approaching the&amp;nbsp;end of the development phase asking how they should move their work to&amp;nbsp;the live servers. The problem I find with leaving deployment until the&amp;nbsp;end&amp;nbsp;of the project,&amp;nbsp;is that none of the&amp;nbsp;approaches&amp;nbsp;are &lt;em&gt;completely&lt;/em&gt; straightforward (particularly depending on what your solution consists of), and so&amp;nbsp;if your project is&amp;nbsp;to be delivered on time, it's important&amp;nbsp;to&amp;nbsp;know what steps you might need to go through.&lt;/p&gt; &lt;p&gt;&lt;em&gt;As a sidenote, let's clarify some potentially confusing terminology here:&lt;/em&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;Content Deployment - the "paths and jobs" functionality which can be used to move content,&amp;nbsp;surfaced by&amp;nbsp;screens in Central Admin&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Content Migration API - the underlying API (sometimes referred to as PRIME) which actually is used for both STSADM export &lt;strong&gt;and &lt;/strong&gt;Content Deployment (in slightly different ways), in addition to the 'Manage Content and Structure' tool and in migrations from CMS2002&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This time round I had decided to use the content migration API to deploy our solution, and it worked&amp;nbsp;well for our circumstances. This is a contrast to developing with Features which I've done in the past, and the main reasons for choosing this approach were:&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;no need for iterative deployment&lt;/strong&gt; -&amp;nbsp;although our overall project is phased,&amp;nbsp;for this component we were able&amp;nbsp;to develop the solution and then deploy everything from our development environment. (This approach will&amp;nbsp;not work&amp;nbsp;for subsequent deployments since content our client has generated on the live site would be overwritten on each deployment - more on this in an upcoming post.)&lt;/li&gt; &lt;li&gt;&lt;strong&gt;ability to retain object GUIDs&lt;/strong&gt; -&amp;nbsp;this simplified deployment significantly for our project, since&amp;nbsp;if our lists were allocated new GUIDs on deployment (as happens with STSADM export/import), our components which referenced these lists (ListViewWebPart, InfoPath forms etc.) would not hook up properly on&amp;nbsp;the deployment&amp;nbsp;target. This would&amp;nbsp;add a lot of "fix-up" steps to the deployment process if we were to use STSADM export.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;no direct HTTP access from source Central Admin to target Central Admin &lt;/strong&gt;- this is a prerequisite to use the Content Deployment functionality (paths and jobs) in Central Admin, but what we needed was a file we could copy to the live server. The content migration API provides this ability and also gives a compression option for large amounts of data.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;automatic&amp;nbsp;inclusion of database&amp;nbsp;dependencies&lt;/strong&gt;&amp;nbsp;-&amp;nbsp;as with STSADM export, (but not with Features), SharePoint will analyze and collect all dependencies such as fields, content types, master pages etc. for&amp;nbsp;us.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The API is fairly simple to use and you may have seen &lt;a href="http://blogs.technet.com/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-1.aspx" target="_blank"&gt;Stefan's series of excellent articles&lt;/a&gt; on the subject&amp;nbsp;- these serve as&amp;nbsp;a good companion to the &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.deployment.aspx" target="_blank"&gt;MSDN documentation&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;It's important to remember that any non-database assets&amp;nbsp;(e.g. user controls, assemblies etc.) need to be deployed manually to the target environment - these will not be included by use of something like STSADM export or the&amp;nbsp;content migration API. In our case, since&amp;nbsp;the live environment was a single&amp;nbsp;server (and&amp;nbsp;versioning would be handled by our main source control system), these were deployed by XCOPY since&amp;nbsp;deployment using &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/07/building-and-deploying-sharepoint.html" target="_blank"&gt;Solution packages&lt;/a&gt; did not offer any compelling advantages here.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Whilst we're talking about filesystem files, it's useful to be aware that if you see 404 errors on the target after performing (e.g.) an STSADM&amp;nbsp;import, chances are you've forgotten to deploy something like a user control.&amp;nbsp;The 404 is actually coming from the referenced file rather than the actual page, so don't assume something has gone wrong with the import&amp;nbsp;- a&amp;nbsp;check on 'View all site content' and the import log will probably confirm all the site pages are present!&lt;/p&gt; &lt;p&gt;Hopefully this has given some food for thought on an approach you may not have considered. I guess my main message here is that whilst STSADM export is extremely simple, it may not provide the complete answer to all your deployment challenges due to changing GUIDs. In upcoming posts I'll provide a more direct comparison of deployment strategies (extending my 'Features or content deployment' post), and also share my mini-app which provides a front-end onto the content migration API. &lt;/p&gt; &lt;p&gt;[P.S. Sincere apologies to people who left comments whilst I was on holiday which are still not published - I'll publish these and respond over the next few days. &lt;/p&gt; &lt;p&gt;C.]&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/169889182" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/155601908/taking-break.html"&gt;Annual holiday&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Wednesday, September 12, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Just a note to regular readers to say it's time for my annual holiday, so no posts&amp;nbsp;or replies to comments for 2 or 3 weeks. I'm off to San Francisco&amp;nbsp;(which is where Suzanne is from), so it should be a nice break.&amp;nbsp;&amp;nbsp;I &lt;em&gt;am&lt;/em&gt; taking a SharePoint virtual machine, but am under strict instructions the&amp;nbsp;only times I'm allowed to use it are on the plane journeys! Fine by me actually.&lt;/p&gt; &lt;p&gt;More posts when I get back..&lt;/p&gt; &lt;p&gt;C.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/155601908" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/154320078/blending-publishingcollaboration.html"&gt;Blending publishing/collaboration functionality in SharePoint&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, September 09, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Most often when creating SharePoint solutions, the requirements often map fairly well to one of the out-of-the-box site definitions which can be used to create new sites. If we're creating heavily-branded internet/intranet sites (WCM sites), we'll probably start with the 'publishing site' template. If we are deploying SharePoint in a document management/collaboration scenario, we'll probably start with the 'team site' template, and so on. Where it gets interesting it when the project requirements effectively have a mix of this functionality. Characteristics of such a site might include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;site has completely bespoke look and feel/navigation  &lt;li&gt;users will work with files stored in document libraries  &lt;li&gt;site templates or definitions are used to create several sites with the same content/functionality  &lt;li&gt;custom workflow is used to support a business process (other than standard content publishing), perhaps with InfoPath forms&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Such requirements present a few challenges, and a current project of mine fits into this category. At a high level, one&amp;nbsp;consideration is that site users will also use 'system' pages provided by SharePoint in many scenarios (e.g.&amp;nbsp;working with document libraries/lists,&amp;nbsp;workflow etc.) and this doesn't happen in most WCM sites. This can lead to situations where there is a disparity between the&amp;nbsp;look and feel of the 'published view' of the website and the&amp;nbsp;'system' areas.&amp;nbsp;I don't intend to provide answers to all the issues here, but I do want to discuss a few as some food for thought. I'll probably revisit this post at the end of the project and provide a better insight into the issues and solutions, but for now let's cover some high-level decisions:&lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;Approach for master page development&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Options for starting development here include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Using a 'minimal master page' from &lt;a href="http://msdn2.microsoft.com/en-us/library/aa660698.aspx"&gt;MSDN&lt;/a&gt; or &lt;a href="http://www.heathersolomon.com/blog/archive/2007/01/26/6153.aspx"&gt;Heather Solomon&lt;/a&gt;  &lt;li&gt;Modifying a copy of default.master (good starting point for customized team sites)  &lt;li&gt;Modifying a copy of blueband.master (good starting point for WCM sites)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Partly this decision depends on where you are heading. Since the aim in my project is for formatting to be&amp;nbsp;controlled by CSS rather than layout tables, starting with a minimal master page makes more sense (the shipped page layouts use tables). This is an interesting area since there's a lot of rework to be done to eliminate tables in a mixed publishing/collab site (and in fact it often won't be possible to eliminate them completely), and for me&amp;nbsp;the benefit is debatable. Certainly all the 'system' pages which site users will be exposed to use layout tables, so I'm not sure how much is gained&amp;nbsp;by only having some&amp;nbsp;pages using CSS for layout.&lt;/p&gt; &lt;p&gt;Other things to consider here are the usual questions of how to factor responsibility of content items between the master page and page layouts,&amp;nbsp;how to define content types etc.,&amp;nbsp;but these are standard decisions in WCM site development so I won't cover them here.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;u&gt;&lt;strong&gt;Use of Content Editor web parts vs publishing RichHtmlField controls&lt;/strong&gt;&lt;/u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Most folks in WCM development know there is an overlap in functionality provided by the Content Editor web part and the RichHtmlField control in the Microsoft.SharePoint.Publishing.WebControls namespace, i.e. they can both be used to enter page content such as text/images. However it's important to consider the differences - the RichHtmlField control stores it's content in a column of the list item for the&amp;nbsp;page, whereas the CEWP is a web part and thus stores content in the web part&amp;nbsp;storage&amp;nbsp;architecture. This is important, since if deployment to a different environment is&amp;nbsp;in your project plan&amp;nbsp;or ongoing architecture,&amp;nbsp;things will likely be simpler if you use the field control, since this content will then travel with the page properly. &lt;/p&gt; &lt;p&gt;Additionally, there are some URL fix-up issues with using the CEWP&amp;nbsp;across different environments, as documented in the &lt;a href="http://blogs.msdn.com/sharepoint/archive/2007/04/16/how-we-did-it-mission-critical-hawaiianair-com-website-powered-by-moss-2007.aspx"&gt;HawaiianAir.com write up&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;In summary, I'd recommend&amp;nbsp;considering the CEWP as a means of entering content in non-publishing SharePoint sites only.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;u&gt;&lt;strong&gt;Use of collaboration web parts - in layouts or in WebPartZones?&lt;/strong&gt;&lt;/u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In a similar vein, since we are mixing the collaboration features into our site we are likely to need to use certain web parts&amp;nbsp;which we wouldn't in a straight WCM site.&amp;nbsp;In our situation the ListViewWebPart is fairly key to some areas, and is used as a means of allowing users to work with different lists from one page. The first decision here is whether the&amp;nbsp;page layouts should include&amp;nbsp;web parts&amp;nbsp;directly (by adding them in SharePoint Designer), or just&amp;nbsp;web part zones to which the individual parts would be&amp;nbsp;added later through the browser.&amp;nbsp;In&amp;nbsp;most WCM scenarios I prefer to add web&amp;nbsp;parts directly to page layouts since they will not be customized/personalized by end users (the main&amp;nbsp;usage scenario for web part zones), and when web part zones are used, again the web part config is not stored in the page which can make deployment more complex.&amp;nbsp;Using the other&amp;nbsp;approach of adding directly from SPD, config is stored in the actual HTML markup of the page and&amp;nbsp;so travels with the page layout itself.&lt;/p&gt; &lt;p&gt;However! The ListViewWebPart has some quirks which means it isn't always possible to use directly from the page layout. Specifically, it is only possible to configure the part to consume a list from the current web, and&amp;nbsp;in the case of a publishing page layout, this means the &lt;em&gt;root web&lt;/em&gt; since this is where the master page gallery is stored. Since our lists are stored in a child web, this is problematic - the other solution of using a DataView also had issues. Additionally, the ListViewWebPart configuration stores values specific to it's location, meaning the config XML is not very portable (i.e. export web part definition, modify, use). I'd like to think it would be possible with time to work out exactly which IDs do need to be changed, but alas we don't have time on this project.&lt;/p&gt; &lt;p&gt;As a result, using the ListViewWebPart in a web part zone is actually the best solution in these&amp;nbsp;circumstances&amp;nbsp;as far as I can see. We'll have an extra few steps at deployment, but this will take less time than the alternatives it appears.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;strong&gt;&lt;u&gt;&lt;u&gt;&lt;strong&gt;Look and feel of system pages&lt;/strong&gt;&lt;/u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As mentioned earlier,&amp;nbsp;for a mixed WCM/collaboration site there can be a&amp;nbsp;disparity&amp;nbsp;of the look and feel of the main pages of the site and the 'system' pages users will see, i.e. pages from the '_layouts' directory. Note this happens even if both the site and system master page is set to point at your custom master page, since these pages are set to use 'application.master' (also on the filesystem in '_layouts') which neither of these properties affect. Sure it would be possible to simply replace 'application.master' with your own version, but that's not an elegant solution and would probably be unsupported.&amp;nbsp;Unfortunately it seems that the architecture doesn't provide an easy way to change the master page&amp;nbsp;used by&amp;nbsp;'_layouts' pages - you have to go a level deeper to explore ways of doing this.&amp;nbsp;Many .Net 2.0 developers will know it's&amp;nbsp;possible to switch a master page dynamically&amp;nbsp;in .Net, and&amp;nbsp;to be fair this is what SharePoint does with the maser pages stored in the master page&amp;nbsp;gallery anyway.&amp;nbsp;I'm not aware of a truly elegant solution to this problem, but &lt;a href="http://weblogs.asp.net/soever/archive/2006/11/14/SharePoint-2007_3A00_-using-the-masterpage-from-your-site-in-custom-_5F00_layouts-pages.aspx#comments" target="_blank"&gt;this discussion on Serge van den Oever's blog&lt;/a&gt; presents a viable approach using this technique.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So those are some of the issues to consider. There are certainly others, including navigation,&amp;nbsp;CSS customization&amp;nbsp;of standard styles (to&amp;nbsp;ensure collaboration web parts&amp;nbsp;integrate well with your look and feel),&amp;nbsp;and possibly the choice of authentication mechanism. I'll cover these and any others which arise in an upcoming post.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/154320078" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/151801999/improvements-in-vsewss-11-ctp.html"&gt;VSeWSS 1.1. CTP - a look at the nuts and bolts&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Monday, September 03, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Regular readers of this blog will know that I've been a reasonably keen advocate of Microsoft's Visual Studio Extensions for Windows SharePoint Services (VSeWSS) for certain SharePoint development tasks. If you read more than a couple of SharePoint blogs, you won't have avoided the news that MS have just released version 1.1 of this tool, &lt;a href="http://blogs.msdn.com/sharepointdesigner/archive/2007/08/21/announcing-the-ctp-for-vsewss-version-1-1.aspx" target="_blank"&gt;as announced here by Alex Malek over on the SharePoint Designer blog&lt;/a&gt;. At the time of writing, this is a CTP (Community Technology Preview) meaning it is pre-beta, so bugs can be expected. So today I wanted to run through the changes, so folks who aren't familiar with the tool or haven't had a chance to take a look themselves can quickly get a sense of what's in there.&lt;/p&gt; &lt;p&gt;In essence, VSeWSS helps by simplifying the process of developing Features for SharePoint - this approach is generally regarded as the way to do SharePoint development in such a way that assets can be more easily deployed to other environments. In previous articles, I detailed how to &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/04/creating-lists-with-vsewss.html" target="_blank"&gt;create and deploy lists&lt;/a&gt; and &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/05/deploying-web-parts-as-feature.html" target="_blank"&gt;how to create and deploy web parts&lt;/a&gt; with VSeWSS. For me, these are probably the scenarios where VSeWSS comes in the most useful, though there definitely are others depending on how you work. However, the most common gripe of developers who used the tool was that since VSeWSS 1.0 regenerated Feature files with each change, it wasn't possible to manually amend the files. This was often necessary to add things not directly supported by the tool, such as Feature receivers. &lt;/p&gt; &lt;p&gt;So let's run through the different areas where the tool has been improved.&lt;/p&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;WSP View&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The big change with this release is that it is now possible to amend Feature files in the development process. Instead of hiding the generation of these files behind the scenes, the tool now makes these bona fide VS project items which can be edited before the Solution package is built. Certainly auto-generation of the final files still happens (that's the point) and there are some files lurking which are needed to support the tool, but VSeWSS now does a good job in presenting to you what you &lt;em&gt;can&lt;/em&gt; modify through the &lt;strong&gt;WSP View &lt;/strong&gt;(View &amp;gt; Other windows &amp;gt; WSP View). This is shown below for a project with some different artifacts:&lt;/p&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;a href="http://bp1.blogger.com/_DPonmXhJQ4g/Rtu3MYIDnQI/AAAAAAAAAEs/KzP_j6gluAQ/s1600-h/VseWss11WspView.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5105876025817144578" style="cursor: hand" alt="" src="http://bp1.blogger.com/_DPonmXhJQ4g/Rtu3MYIDnQI/AAAAAAAAAEs/KzP_j6gluAQ/s320/VseWss11WspView.jpg" border="0"&gt;&lt;/a&gt; &lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;p&gt;Some nice things which can be done here are that entire Features can be deleted with a single click (all files will be removed), and the Feature activation order can be changed. Toolbar buttons are provided which modify the sequence of &lt;font face="Courier New"&gt;FeatureManifest &lt;/font&gt;elements in the manifest.xml file.&lt;/p&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;&lt;u&gt;Feature file editing&lt;br&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;So the WSP View provides the mask onto the editable files, but I wanted to drill into why this is useful. Some examples would be:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ability to add Feature receivers to a particular Feature  &lt;li&gt;ability to rename properties of the Solution package, e.g. to bring VSeWSS-generated Solutions into line with a naming convention  &lt;li&gt;ability to refactor Feature elements into a single Feature. This can be useful because by default the tool will create a new Feature each time you use Project &amp;gt; Add new item &amp;gt; &lt;em&gt;Some SharePoint item (e.g. Content type). &lt;/em&gt;Often you will want several Feature elements to comprise a single Feature rather than split over several Features.&lt;em&gt; &lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Event receivers&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;VSeWSS 1.1 also provides some enhancements around event receivers (handlers for events raised by lists). Version 1.0 also provided some support in this area, but the main scenario was adding a list/item receiver at the time the list was being created (i.e. "create list with receiver"). Version 1.1 now makes it easy to add an event receiver to an &lt;em&gt;existing&lt;/em&gt; list, which simplifies those scenarios. &lt;/p&gt; &lt;p&gt;My favorite improvement in this area however, has to go to event receivers on &lt;em&gt;content types. &lt;/em&gt;This effectively means that the event-handler code travels with the content type - so your code will run on all lists the content type is associated with. This is interesting as I had no idea this was possible in the WSS 3.0 platform! So I did some digging. I haven't yet done any testing of the results, but what VSeWSS does to support this is add some custom attributes to a standard list event receiver. For those interested, these are defined in the &lt;font face="Courier New"&gt;SPDevTools&lt;/font&gt; namespace in a file which is added to your project (out of the way in the Properties folder, alongside AssemblyInfo.cs) by the tool. I've not yet worked out exactly what picks up these flags in the Feature activation process, but it's clear that standard list event receivers are actually being used as the generated class derives from &lt;font face="Courier New"&gt;SPListEventReceiver&lt;/font&gt;. The image below (click to enlarge) highlights the new attribute being applied which supports all this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://bp1.blogger.com/_DPonmXhJQ4g/Rtu3HYIDnPI/AAAAAAAAAEk/WISjR7MfWC4/s1600-h/VseWss11ContentTypeEventReceiver.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5105875939917798642" style="cursor: hand" alt="" src="http://bp1.blogger.com/_DPonmXhJQ4g/Rtu3HYIDnPI/AAAAAAAAAEk/WISjR7MfWC4/s320/VseWss11ContentTypeEventReceiver.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;u&gt;&lt;br&gt;Web parts&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This was where I thought VSeWSS was a winner, and it's good to see the support for web part deployment has been extended further still. With 1.1, a default web part definition file (.webpart) is now generated for you to edit before deployment to add custom property settings. This is useful, since it means that developers can avoid the "deploy web part, add to page, configure, export web part" process which is otherwise required to obtain a configured definition. &lt;/p&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Performance&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;One of the first things VSeWSS 1.0 users will notice is that a full IISReset is no longer performed on each deployment. This was something of a pain with version 1.0, since it meant the "edit, deploy, get feedback" cycle&amp;nbsp;took longer than was necessary.&amp;nbsp;So having been used to the IISResets, personally I was pretty pleased to see the message below in the Visual Studio status bar during the first deployment!&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/RtyKZoIDnRI/AAAAAAAAAE0/HAto-cFPr8I/s1600-h/VseWss11AppPoolRecycle.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5106108250403872018" style="cursor: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/RtyKZoIDnRI/AAAAAAAAAE0/HAto-cFPr8I/s320/VseWss11AppPoolRecycle.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;font color="#008040"&gt;&lt;em&gt;&lt;/em&gt;&lt;/font&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;&lt;u&gt;What could be better&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;So those are the good bits, and it's a great step in the right direction. However I'd still like to see the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;fully-featured Solution Generator. I didn't have time to look at this in detail, but&amp;nbsp;the download page specifies that certain items still aren't covered.&amp;nbsp;This ties in with what&amp;nbsp;I remember&amp;nbsp;Alex Malek saying at&amp;nbsp;this year's Tech Ed, that&amp;nbsp;this still wouldn't be "full fidelity".  &lt;li&gt;ability to easily add a Feature receiver to a Feature I'm working with. I just want right-click &amp;gt; Add Receiver - this should generate the class and add the attributes to the&amp;nbsp;Feature definition with default values, or perhaps infer the generated type.  &lt;li&gt;ability to easily refactor Feature elements in Features, since I often don't want the default of a Feature per element  &lt;li&gt;no GUIDs in Feature names (though apparently this will be sorted by final release)  &lt;li&gt;ability to deploy a _layouts file (again, this should be there in final release)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;On a "bigger picture" note, I'm reminded of a common view in the SharePoint community which made complete sense when I heard it first from&amp;nbsp;&lt;a href="http://tedpattison.net/" target="_blank"&gt;Ted Pattison&lt;/a&gt;. Unlike .Net, where Microsoft&amp;nbsp;has gone to great lengths to ensure the tools are in sync with the platform (same team [Scott Guthrie], same timeframe for development phase, same ship date), a different thing is happening with SharePoint. Effectively the tools are 18 months behind the platform, so SharePoint development can be pretty painful at the moment -&amp;nbsp; however, this shouldn't be taken as a reflection of the platform. &lt;/p&gt; &lt;p&gt;This release of VSeWSS should help though, and it'll be interesting to see what comes in the future.&lt;/p&gt; &lt;p&gt;The download link is &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=3e1dcccd-1cca-433a-bb4d-97b96bf7ab63&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3e1dcccd-1cca-433a-bb4d-97b96bf7ab63&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=3e1dcccd-1cca-433a-bb4d-97b96bf7ab63&amp;amp;displaylang=en&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/151801999" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/148849638/adding-custom-help-pages-to-sharepoint.html"&gt;Adding custom help pages to SharePoint is complex!&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Monday, August 27, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;div&gt; &lt;p&gt;Something I've been curious about for a while now is how to extend the SharePoint help system. A while back I wrote about &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/07/modifying-system-pages-in-sharepoint.html" target="_blank"&gt;how to modify 'system' pages in SharePoint&lt;/a&gt; by effectively adding new pages - the examples I used were:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;a custom Recycle Bin page which displays only items deleted by the current user  &lt;li&gt;a custom Central Admin page which has a message specific to my fictional organization's administrators&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;When implementing customizations like this, I thought it would be useful to be able to add custom help to accompany the new functionality. So today I set about digging around the SharePoint help system to see how to do this. Unfortunately my answer so far is that it's pretty difficult and I haven't figured out all the pieces! However, I thought I'd detail what I found in the hope that either it's still useful to somebody, or that someone who knows can perhaps leave a comment or link and complete the jigsaw.&lt;/p&gt; &lt;p&gt;So to be clear, I'm talking about how to add custom &lt;em&gt;application &lt;/em&gt;help pages here - nothing to do with the 2 .chm files which are the WSS and MOSS SDK references. In site or central admin pages, the application help pages are linked to from help icon on the top bar:&lt;br&gt;&lt;br&gt;&lt;a href="http://bp2.blogger.com/_DPonmXhJQ4g/RtLeE4IDnNI/AAAAAAAAAEU/FCtVXWWEACU/s1600-h/HelpIcon.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103385503131213010" style="cursor: hand" alt="" src="http://bp2.blogger.com/_DPonmXhJQ4g/RtLeE4IDnNI/AAAAAAAAAEU/FCtVXWWEACU/s320/HelpIcon.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;As you'd expect, this icon (and the link behind it) is provided by the master page for the page. Clicking the link calls a JavaScript function called TopHelpButtonClick() in &lt;strong&gt;core.js&lt;/strong&gt; to open the help window - on most pages a parameter of 'NavBarHelpHome' is passed, though notably pages which link to a page other than the &lt;em&gt;default&lt;/em&gt; help page override this value. Since all pages in say, Central Admin share the same master page (and the JS call is in the master page, not the actual page) the code in core.js checks to see if the page itself has specified an override. Individual pages can therefore override the help location specified in the master page using a script block such as:&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;script &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;text/javascript&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;language&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;JavaScript&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;var&amp;nbsp;&lt;font color="#000000"&gt;navBarHelpOverrideKey = &lt;font color="#800000"&gt;"OSSCentralAdmin"&lt;/font&gt;;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;script&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;Core.js will then build a link with this override parameter in rather than 'NavBarHelpHome', meaning that pages can easily link to a custom page rather than the default. In order to link to a custom help page, your page will need to override this value.&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;The value used here links to a value in a set of mapping files stored in C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML\HELP. In the case of the value shown above, we find that one of the mapping files, 'OssSearchAdmin_HelpKeymap.xml', contains the following:&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="font-size: 11pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;helpmap&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;OSSCentralAdmin&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;collectionId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.manifest&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;collectionId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;contextId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.OSSCentralAdmin&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;contextId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;helpmap&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;p style="margin: 0px"&gt;&lt;/p&gt; &lt;div style="background: white" face="courier new" size="11pt" color="black"&gt; &lt;p style="margin: 0px"&gt;The set of mapping files in this directory all contain similar entries, i.e. a corresponding entry for each page which specifies an override to the default help page. Since these files don't appear to follow any naming convention, I'd venture that any XML file with the correct schema can be dropped in here and the help system will pick it up. When it comes to finding what these references point to, things get interesting! An initial search across the '12' directory using Visual Studio 'find in files' yields no results, but as with most of these things it's worth digging further. In the '\12\HCCab\1033\' directory are a set of .cab files which store the help files used in the SharePoint help system. In the example above, the 'MS.Search.Admin.HC.cab' file is the file which is referenced. Looking inside, we see a number of files, one of which is named 'MS.SEARCH.ADMIN.manifest.xml', which you'll notice is the value for the &lt;font face="Courier New"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;collectionId&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt; in the mapping above. The contents of one such .cab file look like:&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt;&lt;a href="http://bp1.blogger.com/_DPonmXhJQ4g/RtLwxoIDnOI/AAAAAAAAAEc/uU9rTiEhdTQ/s1600-h/HelpCabFileContents.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103406063139658978" style="cursor: hand" alt="" src="http://bp1.blogger.com/_DPonmXhJQ4g/RtLwxoIDnOI/AAAAAAAAAEc/uU9rTiEhdTQ/s320/HelpCabFileContents.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;So a quick recap of so far - we've found how to override the initial help page which is displayed, and how the key specified links to a set of help files packaged as a cab file in the 'HCCab\&amp;lt;localeId&amp;gt;' directory. &lt;/p&gt; &lt;p&gt;The manifest file is obviously key to how the index of the files in the .cab are linked. Incidentally, for those familiar with building SharePoint solution packages, the schema used here is completely unrelated to the 'manifest.xml' file used there.&amp;nbsp;Looking at the contents of one of these manifest files, the first thing that strikes me is it looks like a system-generated file - for one thing&amp;nbsp;there are many parent/child and link relationships&amp;nbsp;which would be complex to&amp;nbsp;document by hand. An extract looks like:&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;helpCollection&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;SearchCentralAdmin&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.manifest&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;changedDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2006-10-13 21:53:57Z&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;changedDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;createdDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2006-10-13 21:53:57Z&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;createdDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Microsoft&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;11.0.9413.2&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;lcid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1033&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;lcid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;defaultHelpItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.HA10175815&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;defaultHelpItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;brandingImage&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;rootCategory&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.CH10176169&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;rootCategory&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;feedback&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;show&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;False&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;helpItems&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;helpItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.HA10047848&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;parents&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;parent&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;4&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;primary&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.CH10176336&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;parent&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;parent&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;4&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;primary&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.CH10176336&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;parent&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;parents&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;relatedItemsPointingToMe&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.HA10047848&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.ManageSearchService&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.SearchServerSettings&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;relatedItemsPointingToMe&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;helpItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;helpItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.HA10047852&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;parents&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;parent&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;6&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;primary&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.CH10176338&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;parent&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;parents&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;relatedItemsPointingToMe&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.LogSummary&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;sortOrder&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MS.SEARCH.ADMIN.LogViewer&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;relatedItemsPointingToMe&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 11pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;helpItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;However, one thing which does check out is that the file referenced in the &lt;font face="Courier New"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;defaultHelpItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;is indeed the page which is loaded initially&amp;nbsp;when the help window opens. So that's something!&lt;/p&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;span style="color: blue"&gt;&lt;font face="Georgia" color="#333333"&gt;I can't help thinking though, that a help file generator has been used and it would probably be necessary to use the same approach to add custom help pages.&amp;nbsp;When I started delving I mainly expected to find some .chm files generated by &lt;a href="http://ndoc.sourceforge.net/" target="_blank"&gt;nDoc&lt;/a&gt; or &lt;a href="http://www.sandcastledocs.com/" target="_blank"&gt;Sandcastle&lt;/a&gt; somewhere, but it does seem like something I'm not familar with has been used. Robohelp perhaps?&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;div&gt;&lt;font face="Georgia" color="#333333"&gt;&lt;span style="color: blue"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;font face="Georgia"&gt;&lt;span style="color: blue"&gt;&lt;font color="#404040"&gt;If anybody can shed any light on this I'd be interested to hear. In the meantime, I note that others have found alternative ways around the problem, by passing a custom parameter and then modifying core.js to intercept this and open up a completely custom help window, rather than plugging into the existing help system as such. Ragav Jagannathan's post on his approach can be found here - &lt;/font&gt;&lt;a title="http://ragavj.blogspot.com/2007/04/custom-help-window-can-be-opened-by.html" href="http://ragavj.blogspot.com/2007/04/custom-help-window-can-be-opened-by.html"&gt;&lt;font color="#404040"&gt;http://ragavj.blogspot.com/2007/04/custom-help-window-can-be-opened-by.html&lt;/font&gt;&lt;/a&gt;&lt;font color="#404040"&gt;. As Ragav rightly points out, customizing the core.js file is unsupported so you should probably think carefully before going down this route.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Georgia" color="#404040"&gt;&lt;span style="color: blue"&gt;[Update -&amp;nbsp;&lt;a href="http://feeds.feedburner.com/sharepointnick"&gt;Nick Swan&lt;/a&gt; MSN'd me to point out&amp;nbsp;that there is a document library in the Central Admin website which contains help files. Interestingly, it's the same set of files stored in the HCCab folder on the filesystem! It's difficult to tell from the IIS logs which set of files are actually pulled in, as&amp;nbsp;they seem to be dynamically loaded through&amp;nbsp;the '/_layouts/helpContent.aspx' and '/_layouts/help.aspx'&amp;nbsp;pages. Interesting!]&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/148849638" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/145780744/automatically-setting-custom.html"&gt;Automatically setting custom permissions on new sites&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, August 19, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;This is the third and final article in a series of three, where I demonstrate how how to perform custom processing in the site creation process. See&amp;nbsp;&lt;a title="'Article series - custom permissions with a site definition'" href="http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html"&gt;'Article series - custom permissions with a site definition'&lt;/a&gt; for the full run down on the article series. Specifically, I wanted to show how to use code to modify sites as they are created, in order to do things which aren't normally possible with site definitions/site templates. In the example I'm using, I'm setting custom permissions on the created sites. A scenario where this might be useful is if say, your organization is using SharePoint in a collaboration sense and users are creating sites themselves, but certain sites need to be secured so that access is restricted to specific users. Often end users might not understand the details of the SharePoint security model, so it would be nice if we could take care of this automatically for them.&lt;br&gt;&lt;br&gt;&lt;u&gt;The solution&lt;/u&gt;&lt;br&gt;&lt;br&gt;In the last article '&lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/08/site-definitions-custom-code-in-site.html"&gt;Site definitions - custom code in the site creation process&lt;/a&gt;', I showed how it's possible to use a Feature receiver in conjunction with the site definition to do pretty much anything you might want to do as sites are created. Based on this approach, my solution is based around the following: &lt;/p&gt;&lt;br&gt; &lt;ul&gt;&lt;br&gt; &lt;li&gt;Custom list which stores the list of authorized users in the site collection's root web. This list stores a mapping of users to the permissions they should have in the created site. &lt;li&gt;Custom site definition, created by copying an existing definition as described in the SDK. &lt;li&gt;Feature which doesn't have any Feature elements defined, but is attached to a Feature receiver. A property is defined to pass in the name of the permissions list. &lt;li&gt;Feature receiver code which uses the object model to iterate the permission list and grant appropriate permissions to each user listed.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So let's break down each element of the solution. Note that all the code etc. is available for download and is linked to at the end of the article. First of all, we create a list which looks like this (click to enlarge):&lt;br&gt;&lt;br&gt;&lt;a href="http://bp0.blogger.com/_DPonmXhJQ4g/RsdqyIIDnFI/AAAAAAAAADU/zpeYX7114QY/s1600-h/AuthorisedUserList.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5100162512427654226" style="cursor: hand" alt="" src="http://bp0.blogger.com/_DPonmXhJQ4g/RsdqyIIDnFI/AAAAAAAAADU/zpeYX7114QY/s320/AuthorisedUserList.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Looking at the the edit view for the list (shown below), we see that the two key columns are: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;'User' - Person or Group data type &lt;li&gt;'Permission level' - choice data type, with allowable values 'Owner', 'Contributor' and 'Viewer'&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/Rsdwi4IDnII/AAAAAAAAADs/xswfgjLxUMY/s1600-h/AuthorisedUserItemEdit.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5100168847504415874" style="cursor: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/Rsdwi4IDnII/AAAAAAAAADs/xswfgjLxUMY/s320/AuthorisedUserItemEdit.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;If we are creating sites which are restricted we would probably want to secure the list so that curious users cannot add themselves, and then gain access to any future restricted sites which are created. &lt;/p&gt;&lt;br&gt; &lt;p&gt;So that's the list. The site definition in my example doesn't do anything special - it's just a copy of the 'BLANKINTERNET' definition to keep the example simple. However, '&lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/08/creating-deploying-and-updating-custom.html"&gt;Creating, deploying and updating custom site definitions&lt;/a&gt;' has more information on the kinds of customizations you can make with your site definitions.&lt;br&gt;&lt;br&gt;The Feature is defined to reference the Feature receiver class we are creating. This ensures our custom code will run when the Feature is activated. &lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;SiteProvisioning&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;7C020FFF-FF42-4fe2-8A9B-9BCA0D5F8001&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Description&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;""&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0.0.0&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Scope&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Web&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Hidden&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;TRUE&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;DefaultResourceFile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;core&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;ReceiverAssembly&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demos.SiteDefinition, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd9b418c14cff42e&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;ReceiverClass&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demos.ProjectXSiteDefinition.SiteProvisioning&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Properties&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; could also retrieve list by GUID by passing in as property and amending code slightly &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;PermissionsListName&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Project X Permissions&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Properties&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;The 'ReceiverAssembly' and 'ReceiverClass' attributes have the values which point to our Feature receiver class which contains our custom code. Note also we are passing in a value which can be retrieved in the code by using a Feature property. This can be used as a more flexible alternative to hardcoding values in the class - in this case we are using it pass in the name of the 'authorized users' list, meaning that this Feature can be reused across different requirements (which would use different lists). A minor tweak to the code and property will allow you to use the list GUID if you prefer, though note that list GUIDs will be different if the list is recreated in another SharePoint environment.&lt;br&gt;&lt;br&gt;So that's all great but what ensures the Feature gets activated? Ah you've lost the thread since the last article haven't you?! The Feature is activated automatically when sites are created using the definition courtesy of this line in the WebFeatures section of the onet.xml file which specifies what the site definition consists of:&lt;/p&gt;&lt;br&gt; &lt;div&gt;&lt;/div&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;7C020FFF-FF42-4fe2-8A9B-9BCA0D5F8001&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;And so finally, onto the code which we have written in our Feature receiver class:&lt;br&gt;&lt;!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 using\cf0  System;\par ??\cf2 using\cf0  Microsoft.SharePoint;\par ??\par ??\cf2 namespace\cf0  COB.Demos.ProjectXSiteDefinition\par ??\{\par ??    \cf2 class\cf0  \cf10 SiteProvisioning\cf0  : \cf10 SPFeatureReceiver\par ??\cf0     \{\par ??        \cf2 public\cf0  \cf2 override\cf0  \cf2 void\cf0  FeatureActivated(\cf10 SPFeatureReceiverProperties\cf0  properties)\par ??        \{\par ??            \cf10 SPWeb\cf0  currentWeb = \cf2 null\cf0 ;\par ??            \cf10 SPSite\cf0  currentSite = \cf2 null\cf0 ;\par ??            \cf2 object\cf0  oParent = properties.Feature.Parent;\par ??\par ??            \cf11 // retrieve the permissions list by name..\par ??\cf0             \cf2 string\cf0  sPermsListName = properties.Definition.Properties[\cf13 "PermissionsListName"\cf0 ].Value;\par ??\par ??            \cf11 // only perform processing if the site definition is being used to create a web within the expected site collection..\par ??\cf0             \cf2 if\cf0  (properties.Feature.Parent \cf2 is\cf0  \cf10 SPWeb\cf0 )\par ??            \{\par ??                currentWeb = (\cf10 SPWeb\cf0 )properties.Feature.Parent;\par ??                currentSite = currentWeb.Site;\par ??\par ??                \cf10 SPList\cf0  permsList = currentSite.RootWeb.Lists[sPermsListName];\par ??\par ??                \cf11 // ensure the web is set to use unique permissions, we won't copy existing permissions from parent site..\par ??\cf0                 \cf2 if\cf0  (!currentWeb.HasUniqueRoleAssignments)\par ??                \{\par ??                    currentWeb.BreakRoleInheritance(\cf2 false\cf0 );\par ??                \}\par ??\par ??                \cf2 foreach\cf0  (\cf10 SPListItem\cf0  perm \cf2 in\cf0  permsList.Items)\par ??                \{\par ??                    \cf2 string\cf0  sPermLevel = (\cf2 string\cf0 )perm[\cf13 "Permission level"\cf0 ];\par ??           \par ??                    \cf10 SPFieldUserValue\cf0  userValue = (\cf10 SPFieldUserValue\cf0 )perm.Fields[\cf13 "User"\cf0 ].GetFieldValue(perm[\cf13 "User"\cf0 ].ToString());\par ??                    \cf10 SPUser\cf0  user = userValue.User;\par ??                    setPermission(currentWeb, user, sPermLevel);\par ??                \}\par ??\par ??                currentWeb.Update();\par ??            \}\par ??        \}\par ??\par ??        \cf2 private\cf0  \cf2 void\cf0  setPermission(\cf10 SPWeb\cf0  currentWeb, \cf10 SPUser\cf0  user, \cf2 string\cf0  sPermLevel)\par ??        \{\par ??            \cf10 SPGroup\cf0  permissionsGroup = \cf2 null\cf0 ;\par ??\par ??            \cf2 switch\cf0  (sPermLevel)\par ??            \{\par ??                \cf2 case\cf0  \cf13 "Owner"\cf0 :\par ??                    permissionsGroup = currentWeb.AssociatedOwnerGroup;\par ??                    \cf2 break\cf0 ;\par ??                \cf2 case\cf0  \cf13 "Visitor"\cf0 :\par ??                    permissionsGroup = currentWeb.AssociatedVisitorGroup;\par ??                    \cf2 break\cf0 ;\par ??                \cf2 case\cf0  \cf13 "Member"\cf0 :\par ??                    permissionsGroup = currentWeb.AssociatedMemberGroup;\par ??                    \cf2 break\cf0 ;\par ??                \cf2 default\cf0 :\par ??                    \cf2 throw\cf0  \cf2 new\cf0  \cf10 NotImplementedException\cf0 (\cf2 string\cf0 .Format(\cf13 "Group '\{0\}' not yet implemented."\cf0 , sPermLevel));\par ??                    \cf2 break\cf0 ;\par ??            \}\par ??\par ??            permissionsGroup.AddUser(user);\par ??       \}\par ??   \par ??        \cf2 public\cf0  \cf2 override\cf0  \cf2 void\cf0  FeatureDeactivating(\cf10 SPFeatureReceiverProperties\cf0  properties)\par ??        \{\par ??        \}\par ??\par ??        \cf2 public\cf0  \cf2 override\cf0  \cf2 void\cf0  FeatureInstalled(\cf10 SPFeatureReceiverProperties\cf0  properties)\par ??        \{\par ??        \}\par ??\par ??        \cf2 public\cf0  \cf2 override\cf0  \cf2 void\cf0  FeatureUninstalling(\cf10 SPFeatureReceiverProperties\cf0  properties)\par ??        \{\par ??        \}\par ??    \}\par ??\}\par ??} --&gt;&lt;/div&gt;&lt;br&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; Microsoft.SharePoint;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; COB.Demos.ProjectXSiteDefinition&lt;/p&gt; &lt;p style="margin: 0px"&gt;{&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: teal"&gt;SiteProvisioning&lt;/span&gt; : &lt;span style="color: teal"&gt;SPFeatureReceiver&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; FeatureActivated(&lt;span style="color: teal"&gt;SPFeatureReceiverProperties&lt;/span&gt; properties)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal"&gt;SPWeb&lt;/span&gt; currentWeb = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal"&gt;SPSite&lt;/span&gt; currentSite = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;object&lt;/span&gt; oParent = properties.Feature.Parent;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: green"&gt;// retrieve the permissions list by name..&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; sPermsListName = properties.Definition.Properties[&lt;span style="color: maroon"&gt;"PermissionsListName"&lt;/span&gt;].Value;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: green"&gt;// only perform processing if the site definition is being used to create a web within the expected site collection..&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (properties.Feature.Parent &lt;span style="color: blue"&gt;is&lt;/span&gt; &lt;span style="color: teal"&gt;SPWeb&lt;/span&gt;)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; currentWeb = (&lt;span style="color: teal"&gt;SPWeb&lt;/span&gt;)properties.Feature.Parent;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; currentSite = currentWeb.Site;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal"&gt;SPList&lt;/span&gt; permsList = currentSite.RootWeb.Lists[sPermsListName];&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: green"&gt;// ensure the web is set to use unique permissions, we won't copy existing permissions from parent site..&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (!currentWeb.HasUniqueRoleAssignments)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; currentWeb.BreakRoleInheritance(&lt;span style="color: blue"&gt;false&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: teal"&gt;SPListItem&lt;/span&gt; perm &lt;span style="color: blue"&gt;in&lt;/span&gt; permsList.Items)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; sPermLevel = (&lt;span style="color: blue"&gt;string&lt;/span&gt;)perm[&lt;span style="color: maroon"&gt;"Permission level"&lt;/span&gt;];&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal"&gt;SPFieldUserValue&lt;/span&gt; userValue = (&lt;span style="color: teal"&gt;SPFieldUserValue&lt;/span&gt;)perm.Fields[&lt;span style="color: maroon"&gt;"User"&lt;/span&gt;].GetFieldValue(perm[&lt;span style="color: maroon"&gt;"User"&lt;/span&gt;].ToString());&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal"&gt;SPUser&lt;/span&gt; user = userValue.User;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setPermission(currentWeb, user, sPermLevel);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; currentWeb.Update();&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; setPermission(&lt;span style="color: teal"&gt;SPWeb&lt;/span&gt; currentWeb, &lt;span style="color: teal"&gt;SPUser&lt;/span&gt; user, &lt;span style="color: blue"&gt;string&lt;/span&gt; sPermLevel)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal"&gt;SPGroup&lt;/span&gt; permissionsGroup = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;switch&lt;/span&gt; (sPermLevel)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;"Owner"&lt;/span&gt;:&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; permissionsGroup = currentWeb.AssociatedOwnerGroup;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;"Visitor"&lt;/span&gt;:&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; permissionsGroup = currentWeb.AssociatedVisitorGroup;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;"Member"&lt;/span&gt;:&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; permissionsGroup = currentWeb.AssociatedMemberGroup;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;default&lt;/span&gt;:&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;NotImplementedException&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: maroon"&gt;"Group '{0}' not yet implemented."&lt;/span&gt;, sPermLevel));&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; permissionsGroup.AddUser(user);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; FeatureDeactivating(&lt;span style="color: teal"&gt;SPFeatureReceiverProperties&lt;/span&gt; properties)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; FeatureInstalled(&lt;span style="color: teal"&gt;SPFeatureReceiverProperties&lt;/span&gt; properties)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; FeatureUninstalling(&lt;span style="color: teal"&gt;SPFeatureReceiverProperties&lt;/span&gt; properties)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;br&gt; &lt;p&gt;Stepping through the code, we first find the 'authorized users' list, tell SharePoint we don't want to inherit permissions for the web being created, and then iterate through the list adding&amp;nbsp;each user to the appropriate security group for the web as we find them. Note the SPWeb object has properties to allow you to easily reference the 'Owners', 'Visitors' groups etc. - these will be named in the form '[My site name] Owners' so this avoids you having to do any nasty string concatenation here.&lt;br&gt;&lt;br&gt;In terms of how where this class fits alongside the rest of the files, I just store it in the same VS project. In this example I'm not using VSeWSS to create the Solution, but as I mentioned last time this can make things much simpler. I'm choosing not to here because I wanted to pass the list name using a Feature property, and in the current version VSeWSS does not have the flexibility to support this. In any case, having the class in the same VS project means that when the project is compiled, the receiver assembly is built and is output to the same project's bin directory. My .ddf file which is passed to makecab.exe then adds this dll and all the other files to the Solution package (.wsp) which is built for deployment. You may choose to use a post-build type solution (MSBuild, post-build script etc.) to automatically deploy this to your local environment on every compile, either by straight XCOPY or using the STSADM commands - my '&lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/07/building-and-deploying-sharepoint.html"&gt;Building and deploying SharePoint Solution packages&lt;/a&gt;' article has more information on this. So my overall project structure looks like this:&lt;br&gt;&lt;/p&gt; &lt;div&gt;&lt;a href="http://bp2.blogger.com/_DPonmXhJQ4g/RsgizYIDnMI/AAAAAAAAAEM/YRll8T6BMjE/s1600-h/FinalProjectStructure.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5100364844042001602" style="cursor: hand" alt="" src="http://bp2.blogger.com/_DPonmXhJQ4g/RsgizYIDnMI/AAAAAAAAAEM/YRll8T6BMjE/s320/FinalProjectStructure.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt; &lt;p&gt;So for deployment this means everything is in one package -&amp;nbsp;on deployment the assembly hits the GAC before the Feature activation process runs, meaning the Feature receiver code is in place and will execute successfully. Once deployed, the site definition is available for use and new sites can be created from it. If we go ahead and create a site, if we look at the different security groups we see the appropriate users have been added according the configuration data we stored in the 'authorized users' list.&lt;/p&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;Owners group:&lt;/div&gt; &lt;div&gt;&lt;/div&gt;&lt;br&gt; &lt;p&gt;&lt;a href="http://bp0.blogger.com/_DPonmXhJQ4g/RsdyCIIDnJI/AAAAAAAAAD0/4Bs0BZbWhg8/s1600-h/SiteOwners.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5100170483886955666" style="cursor: hand" alt="" src="http://bp0.blogger.com/_DPonmXhJQ4g/RsdyCIIDnJI/AAAAAAAAAD0/4Bs0BZbWhg8/s320/SiteOwners.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Visitors group:&lt;br&gt;&lt;br&gt;&lt;a href="http://bp1.blogger.com/_DPonmXhJQ4g/RsdyKYIDnKI/AAAAAAAAAD8/wxKCqiyddSs/s1600-h/SiteVisitors.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5100170625620876450" style="cursor: hand" alt="" src="http://bp1.blogger.com/_DPonmXhJQ4g/RsdyKYIDnKI/AAAAAAAAAD8/wxKCqiyddSs/s320/SiteVisitors.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br&gt; &lt;p&gt;So that's it! We now have our solution which enables us to 'package up' custom permissions with a site definition. Clearly we could store the permissions mappings in some other store such as a database table or XML file, but all things being equal I'm a big advocate of using SharePoint lists to store such data. The user interface is provided for you, and security can be applied to ensure standard users are unaware of the list's presence. &lt;/p&gt; &lt;p&gt;All the files I used can be downloaded from &lt;a href="http://sharepointchris.googlepages.com/sitedefinitionwithcustompermissions"&gt;http://sharepointchris.googlepages.com/sitedefinitionwithcustompermissions&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In terms of using the files, you can follow this process to use the technique:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;create the authorized users list from the list template I supply - 'PermissionsListTemplate.stp' &lt;li&gt;add your users and permission mappings to the list &lt;li&gt;add your site definition files to the appropriate places in the VS project, and modify the onet.xml file etc. as necessary &lt;li&gt;if files have been added, amend the .ddf file to include these and rebuild the Solution package &lt;li&gt;deploy the package using STSADM (a .bat file is included in the zip) and create sites from the definition!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Hopefully this series has been some use. While the approach is certainly useful in my scenario of rolling out a site definition used to create automatically secured sites from, in general terms you can use the technique to do any custom processing you want in the site creation process. If there are any queries please leave a comment!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/145780744" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/143436751/site-definitions-custom-code-in-site.html"&gt;Site definitions - custom code in the site creation process&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, August 12, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;This is the second article in a series of three, where I aim to show how to customize the site creation process (known as site provisioning) with your own API code. The full introduction and series contents can be found at &lt;a title="http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html" href="http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html"&gt;http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html&lt;/a&gt;. The example customization I'm using is as follows:&amp;nbsp;any&amp;nbsp;sites created with the definition&amp;nbsp;should use a specific set of permissions, and not simply follow the default behavior of inheriting the parent site's permissions. Since this can't be done with a standard site definition (like many other things you might want to do), use of the API is required. &lt;/p&gt; &lt;p&gt;However, today the&amp;nbsp;focus is less on the permission specifics of my example, and more on&amp;nbsp;how generally to&amp;nbsp;add your own code which runs in the site provisioning process. And the best thing is, it's actually very simple if you understand SharePoint Features. &lt;/p&gt; &lt;p&gt;There are many reasons why you might have cause to use the API in the site provisioning process. Essentially, if you&amp;nbsp;can't find a way to do what you want using CAML schema in the onet.xml file, chances are you'll have to&amp;nbsp;write code.&amp;nbsp;Hence,&amp;nbsp;it's almost easier to think of what you &lt;em&gt;can&lt;/em&gt; do in the onet.xml file&amp;nbsp;and reverse the list&amp;nbsp;in order to work out scenarios which require code, but some examples which spring to mind anyhow are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;changing the custom master page of a site  &lt;li&gt;creating a site column which gets it's data from a list (see my post on my Feature receiver which does this at &lt;a title="Feature to create lookup fields on Codeplex" href="http://sharepointnutsandbolts.blogspot.com/2007/04/feature-to-create-lookup-fields-on.html"&gt;Feature to create lookup fields on Codeplex&lt;/a&gt;)  &lt;li&gt;adding custom unique permissions to a site (the example in this article series)  &lt;li&gt;set a site property&amp;nbsp;from any kind of dynamic lookup&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In short, there are many scenarios. &lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;u&gt;Creating site definitions with VSeWSS&lt;/u&gt;&lt;/p&gt; &lt;p&gt;If you've ever created a site definition with &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=19f21e5e-b715-4f0c-b959-8c6dcbdc1057"&gt;Visual Studio Extensions for Windows SharePoint Services&lt;/a&gt;, you'll notice that the VS project it gives you contains a file called SiteProvisioning.cs. Inside is an event-handler method, where you can add your custom code which will execute when a site is created from the definition. The class looks like this:&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; COB.Demos.SiteDefinition&lt;/p&gt; &lt;p style="margin: 0px"&gt;{&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;partial&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: teal"&gt;ProjectXSiteDefinition&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt;&amp;nbsp; Define your own feature activation action code here&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnActivated(&lt;span style="color: teal"&gt;SPFeatureReceiverProperties&lt;/span&gt; properties)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: green"&gt;// my code here..&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;}&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;The plumbing behind all this is interesting. At first glance, the method signature looks like a Feature receiver, but it's actually not. However, examining the VS project (you'll need to build the project with F5 at least once to generate the files) reveals that VSeWSS has in fact created some Features in the background. These files can be found under the bin\Debug\solution folder in your VS project (hidden by default - you'll need to do a 'Show All Files' in Visual Studio Solution Explorer). If you do some more delving around to see exactly what VSeWSS is doing, you'll find the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;2 &lt;strong&gt;hidden &lt;/strong&gt;Features have been created - 1 deploys the 'default.aspx' file, the other has no 'elements' file but is hooked up to a Feature receiver - this is&amp;nbsp;a class in an assembly named the same as your VS project. If you check the GAC, you will indeed find this assembly there.  &lt;li&gt;a line similar to the following has been added to the onet.xml file under the 'WebFeatures' element:&lt;br&gt;&lt;br&gt; &lt;div style="font-size: 11pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;67b2507c-8822-41dc-b939-3d8f34b5ad13&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br&gt;Notably, this is the ID of the Feature which is hooked up to the Feature receiver.&lt;br&gt; &lt;li&gt;Using Reflector on the assembly containing the Feature receiver shows that the main event-handler method performs some processing and then calls into the &lt;font face="Courier New"&gt;OnActivated&lt;/font&gt; method shown above, i.e. the place where VSeWSS provides for you to add your own code to execute when sites are created. This code is actually contained in the SiteProvisioning.Internal.cs file within the VS project. (If you're curious as to what on earth all the code in here is doing, the answer as far as I can tell is nothing when site definitions are created with the VSeWSS project template. However, this code is also found when Solution Generator is used to extract a site definition - in that case there are some fixups which need to be done, and this is the code which is used.)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;So in summary, VSeWSS creates a hidden Feature is added to the 'WebFeatures' section of the onet.xml so that it is automatically activated when the&amp;nbsp;definition is used to create a web*.&amp;nbsp;The Feature is hooked up to a Feature receiver which calls the OnActivated method where your custom code lives.&lt;br&gt;&lt;/em&gt;&lt;br&gt;*(Note that&amp;nbsp;if the definition is used to create a site definition,&amp;nbsp;the root web is also created&amp;nbsp;automatically so the Feature would also&amp;nbsp;be activated then. Also note the feature needs to be already&amp;nbsp;&lt;em&gt;installed &lt;/em&gt;in the farm for it to be activated in this way). &lt;/p&gt; &lt;p&gt;What we can derive from this is that there's no 'special place' in the site provisioning process to inject custom code, but it can be accomplished by use of a Feature receiver. So if you don't want to use VSeWSS to create site definitions, this is the technique to use to add your custom code to the site creation process. &lt;/p&gt; &lt;p&gt;In terms of what that code might look like, a 'Hello World' example could be:&lt;/p&gt; &lt;div style="font-size: 11pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnActivated(&lt;span style="color: teal"&gt;SPFeatureReceiverProperties&lt;/span&gt; properties)&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;{&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: teal"&gt;SPWeb&lt;/span&gt; currentWeb = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: teal"&gt;SPSite&lt;/span&gt; currentSite = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;object&lt;/span&gt; oParent = properties.Feature.Parent;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (properties.Feature.Parent &lt;span style="color: blue"&gt;is&lt;/span&gt; &lt;span style="color: teal"&gt;SPWeb&lt;/span&gt;)&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentWeb = (&lt;span style="color: teal"&gt;SPWeb&lt;/span&gt;)oParent;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentSite = currentWeb.Site;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentSite = (&lt;span style="color: teal"&gt;SPSite&lt;/span&gt;)oParent;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentWeb = currentSite.RootWeb;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentWeb.Title = &lt;span style="color: maroon"&gt;"Set from provisioning code at "&lt;/span&gt; +&lt;span style="color: teal"&gt;&amp;nbsp; DateTime&lt;/span&gt;.Now.ToString();&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentWeb.Update();&lt;/font&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;Hopefully this illustrates that it's quite simple to write code which sets properties on sites created from the definition. Generally the &lt;font face="Courier New"&gt;SPWeb&lt;/font&gt; object is the entry point, and any property which can be modified can be modified using the API. So, this is a pretty powerful technique which can be used in many scenarios. &lt;/p&gt; &lt;p&gt;If you have this type of requirement, I'd definitely recommend using VSeWSS to simplify the process. It's certainly possible to hook everything up manually and package it into a Solution, but the tool does save a large amount of hassle. However as usual with VSeWSS,&amp;nbsp;the price of this is some flexibility. As my sample code in&amp;nbsp;the final&amp;nbsp;article will show, it's sometimes useful to pass data into&amp;nbsp;Features by using&amp;nbsp;Feature properties, and this unfortunately is not supported by VSeWSS. So in case it's useful, the following link provides a zip file containing a Solution/Feature which uses the above technique, &lt;em&gt;without&lt;/em&gt; using VSeWSS:&lt;/p&gt; &lt;p&gt;&lt;a title="http://sharepointchris.googlepages.com/customcodewithsitedefinitions" href="http://sharepointchris.googlepages.com/customcodewithsitedefinitions"&gt;http://sharepointchris.googlepages.com/customcodewithsitedefinitions&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In the next and final article, I'll cover the specifics of using the API to modify site permissions as sites are created. As is hopefully clear, this is&amp;nbsp;in conjunction with the technique detailed here so the net result is that the specific permissions are set 'automatically', courtesy of the Feature which is automatically activated against&amp;nbsp;a site when it is created.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/143436751" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/141150547/creating-deploying-and-updating-custom.html"&gt;Creating, deploying and updating custom site definitions&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, August 05, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;This is the first article in a series of three where we'll discuss custom site definitions, and in particular how to run your own custom code in the site creation process. This technique is useful if you need to make any customizations using the API beyond what can normally be accomplished with a site definition. In my series (for the full series contents, see my introduction at &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html"&gt;http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html&lt;/a&gt;), I use the example of creating a site definition with specific security permissions 'attached' - so that when any sites are created using the definition, specific permissions are applied which are &lt;em&gt;different&lt;/em&gt; to those of the parent site (this is unlike the default, which is for new sites to inherit the parent site's permissions). More background can be found in the introductory article linked to earlier.&lt;br&gt;&lt;br&gt;In this article we'll start with the site definition basics - &lt;strong&gt;I'll also supply the set of files used in this article in a link at the end&lt;/strong&gt;. Fundamentally, a custom site definition is a template from which new SharePoint sites can be created. Customizations can be packaged into the definition, so that they are present automatically in sites created from the template. Consider the following about site definitions:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;they are created by copying an existing (e.g. out-of-the-box) site definition and adding customizations &lt;li&gt;XML files (in particular the onet.xml file) specify what a site definition consist of (i.e. .aspx pages, images, web parts, functionality [in the form of SharePoint Features]) &lt;li&gt;they provide a similar functionality to site templates (.stp files) - for a discussion of the differences between site definitions and site templates see &lt;a href="http://msdn2.microsoft.com/en-us/library/aa979683.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa979683.aspx&lt;/a&gt; &lt;li&gt;site definitions can be deployed using a SharePoint Solution package (.wsp file), so that files do not need to be manually copied to each web server in a SharePoint farm&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The process for creating site definitions is well-documented in the WSS 3.0 SDK at &lt;a href="http://msdn2.microsoft.com/en-us/library/ms454677.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms454677.aspx&lt;/a&gt;, so I actually won't cover it here but would encourage you to follow the link. However I will quickly run through some of the key elements in the onet.xml file to go over what can be done with site definitions. For an example, let's take an extract of the onet.xml file for a publishing (note for clarity this is an extract only - a full version is available at the link at the end of the article):&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Configuration&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;0&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;BLANKINTERNET&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SiteFeatures&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;A392DA98-270B-4e85-9769-04C0FDE267AA&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; PublishingPrerequisites &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;7C637B23-06C4-472d-9A9A-7C175762C5C4&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; ViewFormPagesLockDown &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;F6924D36-2FA8-4f0b-B16D-06B7250180FA&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; Office SharePoint Server Publishing &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;SiteFeatures&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;WebFeatures&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;00BFEA71-4EA5-48D4-A4AD-305CF7030140&lt;/span&gt;"&lt;span style="color: blue"&gt; &amp;gt; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;22A9EF51-737B-4ff2-9346-694633FE4416&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; Publishing &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Properties&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ChromeMasterUrl&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;~SiteCollection/_catalogs/masterpage/BlueBand.master&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;WelcomePageUrl&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;$Resources:cmscore,List_Pages_UrlName;/default.aspx&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;PagesListUrl&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;""&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;AvailableWebTemplates&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;*-ProjectX#0&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;AvailablePageLayouts&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThreeColumnLayout.aspx&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;AlternateCssUrl&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;""&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;SimplePublishing&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;false&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Properties&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;WebFeatures&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Modules&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Module&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;LoginPage&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Module&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Images&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Module&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Home&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Modules&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br&gt; &lt;ul&gt; &lt;li&gt;The Configuration element represents settings to be used with the selected definition, allowing groups of settings to be reused across definitions for flexibility &lt;li&gt;SiteFeatures /WebFeatures - specifies which Features should be automatically activated when the definition is used to create a site collection or child site respectively. &lt;em&gt;This is key to our overall aim in this series of creating a site definition which applies custom unique permissions to sites created from it.&lt;/em&gt; &lt;li&gt;AvailableWebTemplates property of publishing feature - can be used to restrict which site definitions can be used to create child sites within sites created from this definition. This can be useful to prevent your content creators adding a team site onto your public-facing .com website for example. Here I'm specifying that only the 'ProjectX' definition with Configuration '0' can be used for child sites.  &lt;li&gt;AvailablePageLayouts property of publishing feature - can be used to restrict which page layouts can be used within sites created from this definition. Again, this can be useful in controlling the look and feel of your website. &lt;li&gt;Modules - a module is a set of files to be automatically added when sites are created. Note it's also possible to specify which web parts should be added by default to a web part page by using the &lt;strong&gt;AllUsersWebPart&lt;/strong&gt; element.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;u&gt;&lt;br&gt;Deploying site definitions&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;What I really want to focus on however, is how site definitions can be packaged into a Solution to simplify deployment. This is typically most useful when deploying to multiple environments (e.g. test, staging, production) and/or deploying to a farm which consists of multiple SharePoint web servers. If you don't have this requirement, you may want to consider the simpler process of copying the XML files around manually, as detailed in the WSS SDK.&lt;/p&gt; &lt;p&gt;Before we start, let me highlight that &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=19f21e5e-b715-4f0c-b959-8c6dcbdc1057&amp;amp;DisplayLang=en"&gt;Visual Studio Extensions for Windows SharePoint Services (VSeWSS)&lt;/a&gt; is a useful tool for creating and deploying custom site definitions, and I'd recommend looking into it for this requirement if you haven't already. However, I'm illustrating the 'manual' way here to hopefully provide an understanding of the nuts and bolts.&lt;br&gt;&lt;br&gt;So, to package these files as a Solution manually, we follow the SDK instructions to get our customized onet.xml and webtemp*.xml files, but then place the files in a similar folder structure to the existing site definition files found under the 12 folder. I recommend creating a Visual Studio project as the best way to group these files (VSeWSS also follows this approach). This means you should end up with something looking like this:&lt;br&gt;&lt;br&gt;&lt;a href="http://bp1.blogger.com/_DPonmXhJQ4g/RrWsyumMF-I/AAAAAAAAADM/BfC6sBxeUJE/s1600-h/SiteDefinitionFileStructure.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5095168540941228002" style="cursor: hand" alt="" src="http://bp1.blogger.com/_DPonmXhJQ4g/RrWsyumMF-I/AAAAAAAAADM/BfC6sBxeUJE/s320/SiteDefinitionFileStructure.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Note we also have a .ddf file which is used with makecab.exe to build the Solution package - see my article on &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/07/building-and-deploying-sharepoint.html"&gt;building and deploying Solution packages&lt;/a&gt; for details on the full process here. Effectively, we need to build the Solution by passing the .ddf file as a parameter to makecab.exe, and then run the STSADM -o addsolution and STSADM -o deploysolution commands to deploy to our target SharePoint site.&lt;br&gt;&lt;br&gt;Once this is done, on the 'create site' screen we should see our new template appear:&lt;br&gt;&lt;br&gt;&lt;a href="http://bp0.blogger.com/_DPonmXhJQ4g/RrWsnemMF9I/AAAAAAAAADE/m2z6VKpqX4A/s1600-h/CustomSiteDefinition.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5095168347667699666" style="cursor: hand" alt="" src="http://bp0.blogger.com/_DPonmXhJQ4g/RrWsnemMF9I/AAAAAAAAADE/m2z6VKpqX4A/s320/CustomSiteDefinition.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Users can now use this definition to create sites which automatically have all the functionality and appearance we specified upfront. If we then need to deploy the definition to other environments, it's a simple case of copying the .wsp file there and running the STSADM commands. We are now well on our way to creating a site definition with custom permissions associated with it.&lt;br&gt;&lt;br&gt;The set of files used in this article are at &lt;a href="http://sharepointchris.googlepages.com/creatinganddeployingcustomsitedefinition"&gt;http://sharepointchris.googlepages.com/creatinganddeployingcustomsitedefinition&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;Updating existing site definitions&lt;/u&gt;&lt;/p&gt;&lt;br&gt; &lt;p&gt;Finally, a quick note on updating definitions. Care needs to be taken here as often you will want to update files which are in use by sites already created with the definition - this can break things! Generally &lt;em&gt;adding &lt;/em&gt;to a definition is OK, but modifying/deleting things can cause problems. &lt;/p&gt; &lt;p&gt;So a good technique is to copy the existing definition, add the updates and deploy for new sites to use, but also &lt;em&gt;hide the earlier version &lt;/em&gt;so it cannot be used going forward. This is accomplished by removing the webtemp*.xml file from the TEMPLATE\&lt;lcid&gt;\XML directory. Any sites already provisioned from the earlier version of the definition will continue to run fine, since you're leaving the actual definition (onet.xml etc.) intact over in TEMPLATE\SiteTemplates. &lt;/p&gt; &lt;p&gt;Remember also that new Features can be stapled to existing site definitions (affecting only new sites which are created, not existing ones), and this can be useful in avoiding having to update the site definition itself. See my article on &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/05/feature-stapling.html"&gt;Feature-stapling&lt;/a&gt; for more details.&lt;br&gt;&lt;br&gt;So that's site definition basics. Next in the series - how to go beyond simple site definitions : add custom code which will execute when sites are created!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/141150547" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/139220771/article-series-custom-permissions-with.html"&gt;Article series - custom permissions with a site definition&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Tuesday, July 31, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;This is an introductory article which gives the background to an interesting problem I've seen recently. Over the next 3 articles, I'll be looking at a solution to the problem and will discuss the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Site definition basics - how to create and deploy&lt;/li&gt;&lt;li&gt;Site provisioning - how to perform custom processing when sites are created using the definition&lt;/li&gt;&lt;li&gt;Unique permissions on created sites - how to ensure that certain users are automatically granted access to sites created using the definition, even when the parent site has different users/permissions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;What I aim to show is how to deploy a site definition which has custom permissions 'attached' to it. By this I mean that any sites created with this template will acquire a set of custom permissions, without a user/admin having to configure them separately. What we're effectively doing is automatically putting a set of users into SharePoint site groups (at the time of site creation) - assuming the site was called 'HR', these would be:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;HR owners&lt;/li&gt;&lt;li&gt;HR members&lt;/li&gt;&lt;li&gt;HR visitors&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This can be extremely useful in certain scenarios when users are creating their own sites and workspaces in SharePoint, i.e. collaboration scenarios. One example might be a situation where say, the senior management of your organization (who are all fairly familiar with SharePoint of course ;-)) want to create sites for an important initiative they have. They want to do this on an ad-hoc basis without involving IT, but the sites must be restricted access such that only certain people can use them. Additionally, the requirements might be that some people have full control, but others can only read. &lt;/p&gt;&lt;p&gt;Since these security requirements are probably different to those of the parent site collection, the site must implement 'unique permissions'. This is key - if the site can share (and that's share, not inherit - think about the difference) the permissions of the parent site, then custom permissioning is not required. Otherwise if you are happy to set up the custom permissions manually each time a site is created, that can be done simply too without a solution like mine. SharePoint provides dialog screens for this during the site creation process, if you select 'Use unique permissions' in the Permissions section.&lt;/p&gt;&lt;p&gt;However, when it should happen automatically, you need to perform some custom processing during the site provisioning process, which is what I'm illustrating here. So with the background out of the way, the articles will consist of the following:&lt;/p&gt;&lt;p&gt;Article 1 - Site definition basics&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Process for creating custom site definitions&lt;/li&gt;&lt;li&gt;How to deploy using a SharePoint Solution package (.wsp)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Article 2 - Custom code in the site provisioning process&lt;/p&gt;&lt;ul&gt;&lt;li&gt;When this is necessary&lt;/li&gt;&lt;li&gt;How to get your code to run at this time&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Article 3 - how to implement unique permissions for sites created with the definition&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Storing permissions data in a secured SharePoint list&lt;/li&gt;&lt;li&gt;Feature Receiver code to apply the permissions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Article 1 in the series should be published in a couple of days. See you then!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/139220771" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/136274496/building-and-deploying-sharepoint.html"&gt;Building and deploying SharePoint Solution packages&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, July 22, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;Following &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/05/deploying-web-parts-as-feature.html#comment-4791151973607646085" target="_blank"&gt;a comment left elsewhere&lt;/a&gt; on this blog, I thought I'd cover exactly what SharePoint Solution packages are, including&amp;nbsp;how they are built and deployed to other SharePoint environments. &lt;/p&gt; &lt;p&gt;First of all, let's be clear on exactly what a Solution package is. Note I'm using 'Solution' with a capital S&amp;nbsp;&amp;nbsp;in this article to distinguish between what we are discussing here and the general idea of a technical&amp;nbsp;solution built using SharePoint.&amp;nbsp;A Solution is a package of SharePoint&amp;nbsp;items for deployment - in physical terms it is a cabinet file (.cab) which is given the extension of .wsp to&amp;nbsp;differentiate it from standard&amp;nbsp;.cab files.&amp;nbsp;Other articles on this blog cover the idea of using SharePoint Features to deploy functionality, so let's also be clear on the relationship between Features and Solutions.&amp;nbsp;In general terms, some of&amp;nbsp;the tasks which cannot be done with a Feature alone but &lt;em&gt;can&amp;nbsp;&lt;/em&gt;be done with a Solution include:&lt;/p&gt; &lt;p&gt; &lt;ul&gt; &lt;li&gt;Deployment of certain files &lt;i&gt;to the filesystem&lt;/i&gt;, e.g. an assembly for workflow or web parts, custom files which will reside in the ‘12’ folder&amp;nbsp;  &lt;li&gt;Deployment of web part definition files (.webpart)  &lt;li&gt;Web.config modifications e.g. the ‘SafeControls’ entry required for a custom web part  &lt;li&gt;Code Access Security config modifications e.g. those required for custom web parts not running from the GAC&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;In addition to being able to do these things, Solutions can also contain Features.&amp;nbsp;The way I think of it is that the Solution &lt;em&gt;wraps &lt;/em&gt;the Feature.&amp;nbsp;In actual fact, I always recommend that even if they don't need to be (e.g. we're not doing anything in the list above), Features are always deployed as part of a Solution.&amp;nbsp; The reason for this is that the Solution framework takes care of &lt;strong&gt;deploying all required files to all Web Front End (WFE) servers in a SharePoint farm&lt;/strong&gt;. This alone is incredibly useful in working towards repeatable deployments, and ensures your WFEs stay synchronized. &lt;/p&gt; &lt;p&gt;&lt;u&gt;How Solutions are specified&lt;/u&gt;&lt;/p&gt; &lt;p&gt;The key file used to specify what a Solution package consists of is the manifest.xml file. Going back to my &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/05/deploying-web-parts-as-feature.html" target="_blank"&gt;earlier post on deploying web parts&lt;/a&gt;, the manifest.xml file for that scenario looks like this:&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Solution&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;SolutionId&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;122C0F04-78B7-4d42-9378-6F8B4F93ADD1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;FeatureManifests&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; note this is the location in the cab file! &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;FeatureManifest&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demo.WebPartDeployment.WriteToFileWebPart\feature.xml&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;FeatureManifests&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Assemblies&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Assembly&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demo.WebPartDeployment.WriteToFileWebPart\COB.Demo.WebPartDeployment.WriteToFileWebPart.dll&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;DeploymentTarget&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;GlobalAssemblyCache&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SafeControls&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SafeControl&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Assembly&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demo.WebPartDeployment.WriteToFileWebPart, COB.Demo.WebPartDeployment, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Namespace&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demo.WebPartDeployment&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Safe&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;True&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;TypeName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;*&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;SafeControls&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Assembly&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Assemblies&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;DwpFiles&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;DwpFile&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red"&gt;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demo.WebPartDeployment.WriteToFileWebPart\COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;FileName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;DwpFiles&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Solution&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;This is assuming the web part is being deployed to the GAC - for this illustration this is a simpler scenario than deploying to the web application's bin directory, where Code Access Security (CAS) policy would also be required. Effectively, the manifest specifies that the Solution package consists of the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;a Feature with a header file named 'feature.xml'  &lt;li&gt;an assembly for deployment to the GAC named 'COB.Demo.WebPartDeployment.WriteToFileWebPart.dll'  &lt;li&gt;an entry in the SafeControls section of the application's web.config file, specifying all types in the specified assembly should be treated as safe  &lt;li&gt;a web part definition file named 'COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart' - this will be deployed to the web part gallery on the site&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Importantly, all these details in the manifest.xml file are only used by SharePoint when the generated Solution package is deployed. They are effectively the instructions which say "go and get this item from the .wsp file and put it here". The actual process for generating the .wsp file is another task.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;u&gt;Building Solution packages&lt;/u&gt;&lt;/p&gt; &lt;p&gt;There are 2 options for building the actual package - build it manually using makecab.exe, or use an automated solution - there are several community-developed tools/techniques available. Since it's always good practise to understand what's actually happening in such processes, we'll cover how to do it manually here.&lt;/p&gt; &lt;p&gt;The first step is to write a .ddf (Diamond Directive File). This is a set of instructions&amp;nbsp;for makecab.exe on how to build the folder hierarchy inside the&amp;nbsp;.cab file. For my web part example, my file looks like:&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;.OPTION Explicit&lt;/p&gt; &lt;p style="margin: 0px"&gt;.Set CabinetNameTemplate="COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp"&amp;nbsp; &lt;/p&gt; &lt;p style="margin: 0px"&gt;.Set DiskDirectory1="Package"&lt;/p&gt; &lt;p style="margin: 0px"&gt;;***&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;manifest.xml&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;;** this directory name is used for the folder name under 12\TEMPLATE\Features, so should&lt;/p&gt; &lt;p style="margin: 0px"&gt;;** match up with what you want to call the feature!&lt;/p&gt; &lt;p style="margin: 0px"&gt;.Set DestinationDir=COB.Demo.WebPartDeployment.WriteToFileWebPart&lt;/p&gt; &lt;p style="margin: 0px"&gt;elements.xml&lt;/p&gt; &lt;p style="margin: 0px"&gt;feature.xml&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;.Set DestinationDir=COB.Demo.WebPartDeployment.WriteToFileWebPart&lt;/p&gt; &lt;p style="margin: 0px"&gt;WebPart\COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart&lt;/p&gt; &lt;p style="margin: 0px"&gt;WebPart\COB.Demo.WebPartDeployment.WriteToFileWebPart.dll&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;;***&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;This file tells makecab.exe to do the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;create a .cab file named 'COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp'  &lt;li&gt;put the 'manfest.xml' file at the root of the hierarchy  &lt;li&gt;put the 'elements.xml' and 'feature.xml' files in a&amp;nbsp;subfolder called 'COB.Demo.WebPartDeployment.WriteToFileWebPart'  &lt;li&gt;also&amp;nbsp;put the 2 other files (with extensions .webpart and .dll) in this same&amp;nbsp;subfolder, but that&amp;nbsp;makecab.exe should look for these files in a subfolder on the main filesystem called 'WebPart'&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This instructions file is then passed to makecab.exe with the following command-line command:&lt;br&gt;&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;D:\SolutionDeployment\Development\COB.Demo.WebPartDeployment&amp;gt;"C:\Program Files\Microsoft Cabinet SDK\BIN\MAKECAB.EXE" /f COB.Demo.WebPartDeployment.ddf&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;Couple of things to note here. At the command prompt we have ensured the current directory is the directory where all our Solution files are kept. This ensures that our relative references in the .ddf file above can be resolved. We pass the /f parameter to indicate we are passing a directives file, and also pass the location of this file. &lt;/p&gt; &lt;p&gt;Assuming all the files/references&amp;nbsp;are OK, this results in a .cab file with a .wsp extension which will be created in a subfolder under the current directory called 'Package' (the folder will be created for you if it doesn't exist). We now have a Solution package which can be deployed to another SharePoint server. But first let's take a peek inside - this can be done by temporarily renaming the extension to .cab. You should then see something like:&lt;/p&gt;&lt;br&gt; &lt;p&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/RqO1kumMF8I/AAAAAAAAAC8/woYjfh2eZdw/s1600-h/InsideWebPartSolutionPackage.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5090111646446917570" style="cursor: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/RqO1kumMF8I/AAAAAAAAAC8/woYjfh2eZdw/s320/InsideWebPartSolutionPackage.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;u&gt;Deploying the Solution to other SharePoint servers&lt;/u&gt;&lt;/p&gt; &lt;p&gt;The final part is to actually deploy the Solution. First the .wsp file must be copied to the target server, and then we will use STSADM (SharePoint's command-line admin tool) to actually deploy the Solution. The following are the commands which used to perform the deployment:&lt;br&gt;&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;stsadm -o addsolution -filename COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp&lt;/p&gt;&lt;/div&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;stsadm -o deploysolution -name COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp &lt;br&gt;&amp;nbsp;&amp;nbsp; -url&amp;nbsp;&lt;a href="http://myWebApplication"&gt;http://myWebApplication&lt;/a&gt; -immediate -allowGacDeployment -allowCasPolicies -force&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;The first command simply adds the Solution package to SharePoint's Solution store in the config database, and the second one actually performs the deployment of the package to the specified web application. These areas are fairly well covered in the SDK at &lt;a title="http://msdn2.microsoft.com/en-us/library/aa544500.aspx" href="http://msdn2.microsoft.com/en-us/library/aa544500.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa544500.aspx&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Rather than write these commands at the command-line each time you wish to deploy the package, chances are over time you'll package these commands up into STSADM scripts which do the work. As an example, the script I use for the webparts example&amp;nbsp;looks like:&lt;br&gt;&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;:begin&lt;/p&gt; &lt;p style="margin: 0px"&gt;@echo off&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;set solutionName=COB.Demo.WebPartDeployment.WriteToFileWebPart&lt;/p&gt; &lt;p style="margin: 0px"&gt;set url=http://myWebApplication&lt;/p&gt; &lt;p style="margin: 0px"&gt;set featureName=COB.Demo.WebPartDeployment.WriteToFileWebPart&lt;/p&gt; &lt;p style="margin: 0px"&gt;@set PATH=C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN;%PATH% &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo --- Attempting to deactivate/retract existing solution...&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o deactivatefeature -name %featureName% -url %url% -force&lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o retractsolution -name %solutionName%.wsp -url %url% -immediate&lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o execadmsvcjobs &lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o deletesolution -name %solutionName%.wsp -override &lt;/p&gt; &lt;p style="margin: 0px"&gt;rem stsadm -o execadmsvcjobs &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo --- Adding solution %solutionName% to solution store...&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o addsolution -filename %solutionName%.wsp&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;if errorlevel == 0 goto :deploySolution&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo ### Error adding solution %solutionName%&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo .&lt;/p&gt; &lt;p style="margin: 0px"&gt;goto end&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;:deploySolution&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo --- Deploying solution %solutionName%...&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o deploysolution -name %solutionName%.wsp -url %url% -immediate -allowGacDeployment -allowCasPolicies -force&lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o execadmsvcjobs &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;if errorlevel == 0 goto :activateFeature&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo ### Error deploying solution %solutionName%&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo .&lt;/p&gt; &lt;p style="margin: 0px"&gt;goto end&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;:activateFeature&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo --- Activating features in solution %solutionName%...&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;stsadm -o activatefeature -name %featureName% -url %url% -force &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;if errorlevel == 0 goto :success&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo ### Error activating feature %featureName%&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo .&lt;/p&gt; &lt;p style="margin: 0px"&gt;goto end&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;:success&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo Successfully deployed solution and activated feature(s)..&lt;/p&gt; &lt;p style="margin: 0px"&gt;echo .&lt;/p&gt; &lt;p style="margin: 0px"&gt;goto end&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;:end&lt;/p&gt; &lt;p style="margin: 0px"&gt;pause&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;Following the script through, this basically does the work of safely upgrading the Solution (in case it has been deployed previously), and also activating the Feature within the Solution. &lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;u&gt;Automating Solution builds&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Earlier, we mentioned&amp;nbsp;the idea of automating the process of building and deploying Solutions. There are several community tools/ideas in this area, a couple of the ones I'm aware of are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Andrew Connell's process for using MSBuild to&amp;nbsp;generate Solution package - &lt;a title="http://www.andrewconnell.com/blog/articles/UsingVisualStudioAndMsBuildToCreateWssSolutions.aspx" href="http://www.andrewconnell.com/blog/articles/UsingVisualStudioAndMsBuildToCreateWssSolutions.aspx"&gt;http://www.andrewconnell.com/blog/articles/UsingVisualStudioAndMsBuildToCreateWssSolutions.aspx&lt;/a&gt;&lt;br&gt;&lt;/li&gt; &lt;li&gt;Vince Rothwell's solution for generating Solution package from pre-defined folder&amp;nbsp;structure - &lt;a title="http://www.codeplex.com/sptemplateland/" href="http://www.codeplex.com/sptemplateland/"&gt;http://www.codeplex.com/sptemplateland/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Both&amp;nbsp;of these effectively use Visual Studio post-build events&amp;nbsp;to automate the build of the .wsp package. &lt;/p&gt; &lt;p&gt;Additionally, Microsoft's &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=19f21e5e-b715-4f0c-b959-8c6dcbdc1057&amp;amp;DisplayLang=en" target="_blank"&gt;Visual Studio Extensions for Windows SharePoint Services&lt;/a&gt; effectively performs the same tasks. Although there is some inflexibility in the current version, this add-on for VS means that the whole process is automated by hitting the F5 button.&amp;nbsp;I'd recommend taking a look if you're not aware of this. My post on &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/04/creating-lists-with-vsewss.html" target="_blank"&gt;creating lists with VSeWSS&lt;/a&gt; gives an overview of using it for that specific scenario.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/136274496" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/135070950/using-customaction-to-modify-system.html"&gt;Using CustomAction to modify system pages&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Wednesday, July 18, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;In the last post, I covered 2 examples of how to safely modify functionality in 'system' areas of SharePoint, such as Central Admin and the Site Settings area. The first example was a tweaked Recycle Bin (which listed only items deleted by the current user), and the second was a custom 'Create Site Collection' admin page. In both cases, the technique was to &lt;em&gt;copy &lt;/em&gt;the original page which shipped with SharePoint, make the customization to the copy, and then redirect the link in SharePoint to use our new page. The customization is then fairly transparent to users - depending on your implementation, they could simply be clicking the same link in the same place in SharePoint, yet going to somewhere different which is offering your modified functionality.&lt;br /&gt;&lt;br /&gt;This last part (of redirecting the link in SharePoint) is accomplished via a Feature which makes use of the CustomAction element. However, this idea of changing an existing link somewhere in SharePoint is not necessarily the type of customization you might regularly make. So it's useful to know the CustomAction element can also be used to &lt;em&gt;add &lt;/em&gt;a link somewhere in SharePoint. This opens up many opportunities for customization, and this post aims to detail some of the options.&lt;br /&gt;&lt;br /&gt;The CustomAction element is used like this:&lt;br /&gt;&lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 &amp;lt;\cf13 CustomAction\cf2  \cf6 Id\cf2 =\cf0 "\cf2 MyDeletedItems\cf0 "\cf2  \par ??              \cf6 GroupId\cf2 =\cf0 "\cf2 SiteCollectionAdmin\cf0 "\cf2  \par ??              \cf6 Location\cf2 =\cf0 "\cf2 Microsoft.SharePoint.SiteSettings\cf0 "\cf2  \par ??              \cf6 Sequence\cf2 =\cf0 "\cf2 10\cf0 "\cf2  \par ??              \cf6 Title\cf2 =\cf0 "\cf2 My recycle bin items\cf0 "\cf2  \par ??              \cf6 Rights\cf2 =\cf0 "\cf2 ManageWeb,BrowseUserInfo\cf0 "\cf2 &amp;gt;\par ??  &amp;lt;\cf13 UrlAction\cf2  \cf6 Url\cf2 =\cf0 "\cf2 _layouts/custom/MyRecycleBinItems.aspx\cf0 "\cf2  /&amp;gt;\par ??&amp;lt;/\cf13 CustomAction\cf2 &amp;gt;}&lt;br /&gt;--&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomAction&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;MyDeletedItems&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;GroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;SiteCollectionAdmin&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Location&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Microsoft.SharePoint.SiteSettings&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;10&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;My recycle bin items&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Rights&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;ManageWeb,BrowseUserInfo&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;UrlAction&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Url&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_layouts/custom/MyRecycleBinItems.aspx&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomAction&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I covered most of the values in details in the previous post, but what I want to focus on here is the Location attribute - this essentially specifies where in SharePoint your link will be added to. Some of the common potential values are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Microsoft.SharePoint.SiteSettings (as in the example XML above)&lt;br /&gt;&lt;li&gt;Microsoft.SharePoint.Administration.Operations&lt;br /&gt;&lt;li&gt;Microsoft.SharePoint.Administration.ApplicationManagement&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you've worked with SharePoint for a while you can probably work out where these values refer to - the first is the Site Settings area, whilst the last two are the 'Operations' and 'Application Management' pages in the Central Admin area respectively. When using a CustomAction to add links in these areas, you can also specify &lt;strong&gt;the group&lt;/strong&gt; your link should appear in. This value refers to an existing 'category' of links within the Location, e.g. the locations listed above. Note that new groups can be created by using a &lt;strong&gt;CustomActionGroup&lt;/strong&gt; element, but the &lt;strong&gt;GroupID &lt;/strong&gt;value of a CustomAction must always specify a group which exists already. The following groups exist by default in the SiteSettings area:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;UsersAndPermissions&lt;br /&gt;&lt;li&gt;Customization&lt;br /&gt;&lt;li&gt;QuickLaunch&lt;br /&gt;&lt;li&gt;Galleries&lt;br /&gt;&lt;li&gt;SiteAdministration&lt;br /&gt;&lt;li&gt;SiteCollectionAdmin&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These correspond to the columns in the Site Settings area as shown below:&lt;/p&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/Rp6IKTVGXhI/AAAAAAAAACs/s-hR3bcDEvU/s1600-h/SiteSettingsCustomActionGroups.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5088654339544079890" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/Rp6IKTVGXhI/AAAAAAAAACs/s-hR3bcDEvU/s320/SiteSettingsCustomActionGroups.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the Central Admin pages, examples for the 'Operations' page are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Topology&lt;br /&gt;&lt;li&gt;GlobalConfiguration&lt;br /&gt;&lt;li&gt;Security&lt;br /&gt;&lt;li&gt;BackupRestore&lt;br /&gt;&lt;li&gt;LoggingAndReporting&lt;br /&gt;&lt;li&gt;DataConfiguration&lt;br /&gt;&lt;li&gt;Upgrade&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And for the 'Application Management' page:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;WebApplicationConfiguration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SiteManagement&lt;br /&gt;&lt;li&gt;ApplicationSecurity&lt;br /&gt;&lt;li&gt;ExternalService&lt;br /&gt;&lt;li&gt;WorkflowManagement &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By examining these pages, it's fairly simple to work out where the values refer to.&lt;/p&gt;I mentioned earlier that new groups of links can be created using the CustomActionGroup element. An example of this would be:&lt;br /&gt;&lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 &amp;lt;\cf13 CustomActionGroup\par ??\cf2     \cf6 Id\cf2 =\cf0 "\cf2 CustomSiteSettingsGroup\cf0 "\par ??\cf2     \cf6 Location\cf2 =\cf0 "\cf2 Microsoft.SharePoint.SiteSettings\cf0 "\par ??\cf2     \cf6 Title\cf2 =\cf0 "\cf2 New custom group\cf0 "\par ??\cf2     \cf6 Sequence\cf2 =\cf0 "\cf2 100\cf0 "\par ??\cf2     \cf6 Description\cf2 =\cf0 "\cf2 My description\cf0 "\cf2  /&amp;gt;}&lt;br /&gt;--&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomActionGroup&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;CustomSiteSettingsGroup&lt;/span&gt;"&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Location&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Microsoft.SharePoint.SiteSettings&lt;/span&gt;"&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;New custom group&lt;/span&gt;"&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;100&lt;/span&gt;"&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;My description&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This will then create a new group of links on the page with your custom title - SharePoint will take care of the rendering such that your new group will wrap onto another row of groups. Of course if this isn't what you want you'll probably have an interesting time customizing this.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Using CustomAction elsewhere&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So having covered how to add links into the admin areas, I'll wrap up by listing some other valid values for the 'Location' attribute. This hopefully illustrates some of the options you have for customizing SharePoint in this way:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft.SharePoint.ContentTypeTemplateSettings&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft.SharePoint.ContentTypeSettings&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft.SharePoint.Administration.ApplicationCreated&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Office.Server.ServiceProvider.Administration (Shared Services/SSP links)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft.SharePoint.ListEdit.DocumentLibrary&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft.SharePoint.Workflows&lt;br /&gt;&lt;/li&gt;&lt;li&gt;NewFormToolbar&lt;br /&gt;&lt;/li&gt;&lt;li&gt;DisplayFormToolbar&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EditFormToolbar&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Microsoft.SharePoint.StandardMenu (SiteActions menu)&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Mcrosoft.SharePoint.Create (_layouts/create.aspx - the screen used to specify what you want to create on your site)&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Microsoft.SharePoint.ListEdit (the screen used to edit the properties of a list item)&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;EditControlBlock (image below)&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;I've put the last few in bold and added a description as I think they're particularly interesting. Of course, if you have other customizations in mind one or two of the others might have caught your eye! In particular being able to add custom actions to the EditControlBlock is interesting:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/Rp6IKTVGXiI/AAAAAAAAAC0/dHTsYZqLTlI/s1600-h/EditControlBlock.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5088654339544079906" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/Rp6IKTVGXiI/AAAAAAAAAC0/dHTsYZqLTlI/s320/EditControlBlock.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here, a special attribute called 'RegistrationType' can be added to the CustomAction element, allowing you to control exactly the circumstances where your action should appear. Valid options include 'List', 'ContentType', 'FileType' and 'ProgId'. &lt;a href="http://blog.thekid.me.uk/" target="_blank"&gt;Vince (aka TheKid)&lt;/a&gt; has some good examples of this over &lt;a href="http://blog.thekid.me.uk/archive/2007/06/23/sample-editcontrolblock-customaction-for-sharepoint.aspx" target="_blank"&gt;on his blog&lt;/a&gt;. &lt;/p&gt;Hopefully this has given you some ideas on how you can add or amend the SharePoint UI in this way. Happy customizing!&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/135070950" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/131758109/modifying-system-pages-in-sharepoint.html"&gt;Modifying 'system' pages in SharePoint safely - with sample code&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Thursday, July 12, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;In a presentation I gave recently I talked about modifying admin screens within SharePoint. By this, I mean areas such as the site admin area and the central admin area:&lt;br&gt;&lt;br&gt;&lt;u&gt;Site admin:&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://bp0.blogger.com/_DPonmXhJQ4g/RpDSw0YD12I/AAAAAAAAAB8/-5QXWQcQyrI/s1600-h/SiteSettings.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5084795715436402530" style="margin: 0px 10px 10px 0px; cursor: hand" alt="" src="http://bp0.blogger.com/_DPonmXhJQ4g/RpDSw0YD12I/AAAAAAAAAB8/-5QXWQcQyrI/s320/SiteSettings.gif" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;u&gt;Central admin:&lt;br&gt;&lt;/u&gt;&lt;br&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/RpDS7kYD13I/AAAAAAAAACE/pPfUnLgUTgY/s1600-h/CentralAdminOperations.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5084795900119996274" style="margin: 0px 0px 10px 10px; cursor: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/RpDS7kYD13I/AAAAAAAAACE/pPfUnLgUTgY/s320/CentralAdminOperations.gif" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Now, if your boss (or your users) asks you to add or change functionality in these areas, how would you handle that?&lt;br&gt;&lt;br&gt;Well, you'd probably start off by looking to see how SharePoint implements 'system' pages like this. You'd then find they are just standard .aspx files in the 12\TEMPLATE\ADMIN folder on the filesystem. You'd also find that if you make a change to such a file, the changes are immediately reflected on the site - sure, some of the code is in a compiled assembly which is obfuscated (so Reflector doesn't help), but otherwise there's no mysterious abstractions, no caching, it's that simple. So changing the functionality or adding a link is a matter of changing the .aspx page right?&lt;br&gt;&lt;br&gt;The problem with this approach is that modifying core files in this way is unsupported. This is because when a service pack or hotfix gets applied, your system will be in an inconsistent state and at best your changes will be overwritten. So a better way to implement such changes is to:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;take &lt;em&gt;a copy&lt;/em&gt; of the original file &lt;br&gt; &lt;li&gt;modify the copy to include your customization&lt;br&gt; &lt;li&gt;create a SharePoint Feature (wrapped in a Solution package [.wsp]) to deploy your customized page to the 12 hive, and also &lt;em&gt;add/modify the link in SharePoint to point to your customized page&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The end result of this is that you have deployed your change without modifying any of the original files, and are therefore entirely supported. Additionally, because Features can be activated and deactivated with the click of a button, if you want to revert to the original functionality that's all it takes. &lt;/p&gt; &lt;p&gt;Let's look at an example - I'll link to all the code used here at the end of the article. Imagine your users are asking you to change the Recycle Bin screen so that it only displays items the &lt;em&gt;currently logged on user&lt;/em&gt; has deleted - perhaps there's a manual document&amp;nbsp;clean up exercise happening. And let's also say that after the exercise is complete, the users would like to revert back to the original functionality. (Now remember, what I'm demonstrating here is the &lt;em&gt;mechanism &lt;/em&gt;for making customizations like this, so whilst this particular change might be unlikely in your organization, you might have &lt;em&gt;other&lt;/em&gt; customizations which would help your users.)&lt;/p&gt; &lt;p&gt;So, first we need to modify the functionality of the Recycle Bin page to add the filtering. As mentioned earlier, we don't want to amend the original page, so we take a copy and modify that. In my example, I'm adding a script block to the code in front (since I don't have access to Microsoft's source code for the code-behind) to effectively perform the filtering at the UI level, which is fine for this example. Once we've created the page we want to use, we're ready to create the Feature and Solution to add our page to SharePoint.&lt;br&gt;&lt;br&gt;Let's start with the manifest.xml file for the solution - this is important because this is how we actually deploy our custom .aspx page to the appropriate place within the SharePoint files. (Remember all this is available for download, the link is at the end of the article.)&lt;br&gt;&lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 &amp;lt;\cf13 Solution\cf2  \cf6 xmlns\cf2 =\cf0 "\cf2 http://schemas.microsoft.com/sharepoint/\cf0 "\cf2  \cf6 SolutionId\cf2 =\cf0 "\cf2 AA7EF934-C993-4f91-8AF4-0FB1D45927FA\cf0 "\cf2 &amp;gt;\par ??  &amp;lt;\cf13 FeatureManifests\cf2 &amp;gt;\par ??    &amp;lt;\cf13 FeatureManifest\cf2  \cf6 Location\cf2 =\cf0 "\cf2 COB.Demos.MyRecycleBinItems\\feature.xml\cf0 "\cf2  /&amp;gt;\par ??  &amp;lt;/\cf13 FeatureManifests\cf2 &amp;gt;\par ??  &amp;lt;\cf13 TemplateFiles\cf2 &amp;gt;\par ??    &amp;lt;\cf13 TemplateFile\cf2  \cf6 Location\cf2 =\cf0 "\cf2 LAYOUTS\\Custom\\MyRecycleBinItems.aspx\cf0 "\cf2  /&amp;gt;\par ??  &amp;lt;/\cf13 TemplateFiles\cf2 &amp;gt;\par ??&amp;lt;/\cf13 Solution\cf2 &amp;gt;}&lt;br /&gt;--&gt;&lt;br&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Solution&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;SolutionId&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;AA7EF934-C993-4f91-8AF4-0FB1D45927FA&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;FeatureManifests&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;FeatureManifest&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demos.MyRecycleBinItems\feature.xml&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;FeatureManifests&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TemplateFiles&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TemplateFile&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;LAYOUTS\Custom\MyRecycleBinItems.aspx&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;TemplateFiles&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Solution&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;Notice what we are doing here is specifying that our custom .aspx page should be deployed to a 'Custom' subfolder within the 'LAYOUTS' directory. This is a good idea because it keeps our files separate from the core SharePoint files.&lt;br&gt;&lt;br&gt;Then we have a fairly standard feature.xml file specifying the Feature identification info:&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;29D8B365-6024-4b1a-84D2-FF789FE56355&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;COB.Demos.MyRecycleBinItems&lt;/span&gt;"&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Description&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Adds a custom page to the Site Settings area to show items in the Recycle Bin which were deleted by the current user.&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Scope&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Site&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Hidden&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;FALSE&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0.0.0&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ElementManifests&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ElementManifest&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;elements.xml&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;ElementManifests&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Feature&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;In this case we're specifying that our Feature is scoped at site collection-level, so we will modify all sites in the site collection.&lt;br&gt;&lt;br&gt;Finally we have the our Elements file, which specifies what this Feature consists of. In this case, the key is the use of the CustomAction element - this can be used to add a link (i.e. an action) somewhere in SharePoint.&lt;br&gt;&lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 &amp;lt;\cf13 Elements\cf2  \cf6 xmlns\cf2 =\cf0 "\cf2 http://schemas.microsoft.com/sharepoint/\cf0 "\cf2 &amp;gt;\par ??  &amp;lt;\cf13 HideCustomAction\cf2  \cf6 Id\cf2 =\cf0 "\cf2 HideDeletedItems\cf0 "\cf2  \par ??                    \cf6 HideActionId\cf2 =\cf0 "\cf2 DeletedItems\cf0 "\cf2  \par ??                    \cf6 GroupId\cf2 =\cf0 "\cf2 SiteCollectionAdmin\cf0 "\cf2  \par ??                    \cf6 Location\cf2 =\cf0 "\cf2 Microsoft.SharePoint.SiteSettings\cf0 "\cf2  /&amp;gt;\par ??  &amp;lt;\cf13 CustomAction\cf2  \cf6 Id\cf2 =\cf0 "\cf2 MyDeletedItems\cf0 "\cf2  \par ??                \cf6 GroupId\cf2 =\cf0 "\cf2 SiteCollectionAdmin\cf0 "\cf2  \par ??                \cf6 Location\cf2 =\cf0 "\cf2 Microsoft.SharePoint.SiteSettings\cf0 "\cf2  \par ??                \cf6 Sequence\cf2 =\cf0 "\cf2 10\cf0 "\cf2  \par ??                \cf6 Title\cf2 =\cf0 "\cf2 My recycle bin items\cf0 "\cf2  \par ??                \cf6 Rights\cf2 =\cf0 "\cf2 ManageWeb,BrowseUserInfo\cf0 "\cf2 &amp;gt;\par ??    &amp;lt;\cf13 UrlAction\cf2  \cf6 Url\cf2 =\cf0 "\cf2 _layouts/custom/MyRecycleBinItems.aspx\cf0 "\cf2  /&amp;gt;\par ??  &amp;lt;/\cf13 CustomAction\cf2 &amp;gt;\par ??&amp;lt;/\cf13 Elements\cf2 &amp;gt;}&lt;br /&gt;--&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Elements&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;HideCustomAction&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;HideDeletedItems&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;HideActionId&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DeletedItems&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;GroupId&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;SiteCollectionAdmin&lt;/span&gt;"&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Microsoft.SharePoint.SiteSettings&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;CustomAction&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;MyDeletedItems&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;GroupId&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;SiteCollectionAdmin&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Location&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Microsoft.SharePoint.SiteSettings&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;10&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;My recycle bin items&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Rights&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ManageWeb,BrowseUserInfo&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;UrlAction&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;Url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;_layouts/custom/MyRecycleBinItems.aspx&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;CustomAction&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; background: white; margin: 0px; color: black; font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;Elements&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;Let's walk through this file in detail. The first thing you notice is that we're using a 'HideCustomAction' element. You guessed it, this is used to hide a link in the SharePoint UI. Since we are effectively replacing a link, we actually&amp;nbsp;need to hide the original one and supply our replacement, and this is done by using these 2 elements together. We assign the ID ourselves (if we want to refer to this 'HideCustomAction' elsewhere, this is the value we'll use), but all the other attributes of this tag &lt;strong&gt;must correspond to those specified for this action in the Feature Microsoft created to add the link to SharePoint&lt;/strong&gt; in the first place. So in case you've not come across this yet, much of the original functionality in SharePoint is actually implemented using Features too. The way to find these values is to search in the 12\Template\Features folder. For this particular action, the most reliable thing to search for is the URL of the page, since any 'CustomAction' tag specifies the URL. Since we can find that the URL for the original Recycle Bin page is '/_layouts/AdminRecycleBin.aspx', searching for this finds the file containing the details of the original link. These are then used for our 'HideCustomAction' tag.&lt;br&gt;&lt;br&gt;Next we specify our 'CustomAction' tag, again using many of the same values since we are replacing an existing action rather than adding a new one. The values we change are for the link title and URL, to point to our replacement page. Note also you can declaratively specify what permissions levels are required to see this link.&lt;br&gt;&lt;br&gt;Once these files are made into a Solution package, deploying the Solution and activating the Feature has the following effects:&lt;br&gt;&lt;br&gt;The link on the site settings page has changed from the original (on the left) to our replacement (on the right):&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="400" border="0" unselectable="on"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&lt;a href="http://bp2.blogger.com/_DPonmXhJQ4g/RpFWyEYD14I/AAAAAAAAACM/0BdJqreZONk/s1600-h/OriginalRecycleBinLink.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5084940872446105474" style="float: left; margin: 0px 10px 10px 0px; cursor: hand" alt="" src="http://bp2.blogger.com/_DPonmXhJQ4g/RpFWyEYD14I/AAAAAAAAACM/0BdJqreZONk/s320/OriginalRecycleBinLink.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="200"&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/RpFXAUYD15I/AAAAAAAAACU/OaUgMzdxrdo/s1600-h/ModifiedRecycleBinLink.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5084941117259241362" style="float: right; margin: 0px 0px 10px 10px; cursor: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/RpFXAUYD15I/AAAAAAAAACU/OaUgMzdxrdo/s320/ModifiedRecycleBinLink.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;br&gt;&amp;nbsp;A 'Custom' folder has been created in the '12\Layouts' directory and our custom .aspx page (MyRecycleBinItems.aspx) has been deployed to this folder. And of course, when a user clicks the link, the modified page has the functionality to only display items they have deleted:&lt;br&gt;&lt;br&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/RpFotUYD17I/AAAAAAAAACk/1AUN5_RFYjY/s1600-h/CustomRecycleBinPage.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5084960582051026866" style="cursor: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/RpFotUYD17I/AAAAAAAAACk/1AUN5_RFYjY/s320/CustomRecycleBinPage.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;The key thing of course, is that we've 'customized SharePoint functionality' without modifying any original SharePoint files - hence we are are 100% supported and can be confident our customizations won't cause any issues for service packs etc.&lt;br&gt;&lt;br&gt;On the same lines, the sample stuff has a 2nd example - here we modify the 'Create Site Collection' page in Central Admin to display a guidance message to the SharePoint administrators. The idea is to encourage them to stop and think and perhaps consult the document containing the organization's policy on creating site collections:&lt;br&gt;&lt;br&gt;&lt;a href="http://bp2.blogger.com/_DPonmXhJQ4g/RpFoSEYD16I/AAAAAAAAACc/23nzFfzdLkI/s1600-h/CustomCreateSiteCollectionPage.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5084960113899591586" style="margin: 0px 0px 10px 10px; cursor: hand" alt="" src="http://bp2.blogger.com/_DPonmXhJQ4g/RpFoSEYD16I/AAAAAAAAACc/23nzFfzdLkI/s320/CustomCreateSiteCollectionPage.jpg" border="0"&gt;&lt;/a&gt;&lt;a href="http://bp2.blogger.com/_DPonmXhJQ4g/RpFoSEYD16I/AAAAAAAAACc/23nzFfzdLkI/s1600-h/CustomCreateSiteCollectionPage.jpg"&gt;&lt;/a&gt;&lt;br&gt;Hopefully you might find this useful if you need to customize SharePoint in this way. The full set of files, plus the slides for the presentation I gave on this, are available at:&lt;br&gt;&lt;br&gt;&lt;a href="http://sharepointchris.googlepages.com/customizingsharepointsupportedway"&gt;http://sharepointchris.googlepages.com/customizingsharepointsupportedway&lt;/a&gt;&lt;br&gt;&lt;br&gt;In the next post, I'll be supplying some reference information which will help you make this type of modification in other areas of SharePoint. An important aspect of customizing SharePoint in this way is knowing exactly where and how the 'CustomAction' tag can be used, so that's what we'll look at.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/131758109" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/131758110/customizing-sharepoint-supported-way.html"&gt;'Customizing SharePoint the supported way' - slides and sample code now available&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Sunday, July 08, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;The slides and code from my presentation at last week's UK SharePoint user group meeting are now available - the topic was &lt;strong&gt;'Customizing SharePoint the supported way - from end user to admin interfaces'&lt;/strong&gt;. The slides etc. will appear on the user group website at some point but I've also published them at:&lt;br&gt;&lt;br&gt;&lt;a href="http://sharepointchris.googlepages.com/customizingsharepointsupportedway"&gt;http://sharepointchris.googlepages.com/customizingsharepointsupportedway&lt;/a&gt;&lt;br&gt;&lt;br&gt;The areas covered are:&lt;/p&gt; &lt;p&gt; &lt;ul&gt; &lt;li&gt;creating site definitions (and why it can be a good idea even for a WCM scenario with limited numbers of sites/webs being created)  &lt;li&gt;how to modify the site admin and central admin areas of SharePoint, &lt;em&gt;without modifying any of the shipped files&lt;/em&gt;. The examples I used (the sample code zip file contains all the code/Features for these) were:&lt;br&gt;&lt;br&gt;- modifying the recycle bin to show only files deleted by the current user&lt;br&gt;&lt;br&gt;- modifying the 'Create Site Collection' page in central admin to display a policy message to the farm administrators&lt;br&gt;&lt;br&gt; &lt;li&gt;using the DelegateControl to override the user controls used such as the 'My sites' link and the publishing console. (This assumes either default.master is being used or you have added the controls to your master page/page layout using &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SharePoint:DelegateControl&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;server&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ControlId&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;MyControlID&lt;/span&gt;" /&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;). More details in &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/06/using-delegate-control.html"&gt;my DelegateControl post&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Since the slide deck alone doesn't really convey the entire process, the next post will cover modifying the admin areas of SharePoint in detail. Included will be the list of areas where you can add/change links, and how to use a &amp;lt;CustomAction /&amp;gt; instruction within a Feature to do this.&lt;/p&gt; &lt;p&gt;If you need to make customizations to SharePoint functionality, the idea behind this technique is to make the changes without modifying the core files and thus putting your SharePoint installation in an unsupported state. This is very important if you need to make these kind of changes!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/131758110" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/130576387/considerations-when-using-features-to.html"&gt;Considerations when using Features to deploy SharePoint files - ghosting/unghosting&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Wednesday, July 04, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;In some of my earlier articles I talk about how to deploy various SharePoint artifacts as a Feature. In particular, '&lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/04/deploying-master-pages-and-page-layouts.html"&gt;Deploying master pages and page layouts as a Feature&lt;/a&gt;' discusses the idea of deploying these types of file (used in Publishing sites), but the concept applies to any file which will appear somewhere in a SharePoint list of some kind. In addition to the Master Page Gallery, other examples could include CSS/XSLT files being deployed to the Style Library, images to a picture library, and many other similar scenarios.&lt;br /&gt;&lt;br /&gt;Occasionally people using this approach find that file updates can be difficult to apply. The process involves updating the Feature with the new version of the file, and then reinstalling and reactivating the Feature (typically the Feature version number will be incremented). In some cases the file updates successfully, in others it doesn't but there are no errors.&lt;br /&gt;&lt;br /&gt;So what's going on?&lt;br /&gt;&lt;br /&gt;The answer is that the file will not be updated (and therefore changes will not be seen in the browser for example) if that particular file has been '&lt;a href="http://www.google.com/search?q=sharepoint+unghosting"&gt;unghosted&lt;/a&gt;' into the database.&lt;br /&gt;&lt;br /&gt;&amp;lt;StartUnghostingExplanation&amp;gt;&lt;br /&gt;[Without digressing too much, for anybody new to this concept it can be a confusing term which Microsoft are using less these days - the replacement term is 'customized' which is generally easier to understand. Depending on how they arrived in SharePoint, many files will initially only exist on the filesystem of the SharePoint front-end web servers. However, if such a file is customized e.g. it is checked out and edited (either through the UI, using SharePoint Designer etc.) SharePoint takes a copy of the file (now with modifications) and stores this in the content database instead of saving the changes back to the filesystem. This is the unghosting process. Whenever this file is requested in the future, the modified version from the database will be returned. This architecture allows SharePoint to scale to enterprise level, by only storing separate copies of files when absolutely necessary.]&lt;br /&gt;&amp;lt;EndUnghostingExplanation&amp;gt;&lt;br /&gt;&lt;br /&gt;When a file is provisioned in SharePoint using a Feature, SharePoint will copy the file to wherever your Feature specified, and will reference the file from this location. In many cases, this may actually be the 12\Template\Features directory. So in the case of master pages/page layouts etc. for example, when a web page is requested these resources will be retrieved from this location. Or at least, that's what happens if the file isn't customized.&lt;br /&gt;&lt;br /&gt;If the file has been customized at some point, what happens when the Feature is updated is that the file on the filesystem is updated and reflects the changes, but SharePoint is now returning the copy in the database and so the update isn't reflected on the site!&lt;br /&gt;&lt;br /&gt;So, if you want to use Features as your ongoing deployment strategy for your SharePoint document library (aka 'GhostableInLibrary') files, you should ensure the files can &lt;em&gt;only &lt;/em&gt;be modified in this way. So files should not be modified either through the SharePoint UI or via SharePoint Designer. Typically, this won't be the case in the development environment but could be enforced for other environments. This means that unghosting is avoided, and SharePoint will continue to reference the copy on the filesystem.&lt;br /&gt;&lt;br /&gt;Some other points of note:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Another advantage of this approach is that when a Solution is retracted, the files will also be removed.&lt;/li&gt;&lt;li&gt;Even a check-out/check-in operation without actual changes will cause SharePoint to see the file as customized, and will then be retrieved from the database rather than filesystem.&lt;/li&gt;&lt;li&gt;A file can be 'uncustomized' in SharePoint Designer by right-clicking on the file and selecting 'Revert to site definition'. However, this will obviously cause you to lose any changes you have made to the file from the original version!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So next time you are using a Feature and wondering why the file isn't being updated, consider if the file has been customized!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/130576387" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/128472161/extending-content-query-web-part.html"&gt;Extending the Content Query web part&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Wednesday, June 27, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;Something I've been meaning to put on Codeplex for a few weeks now is an extended version of the Content Query web part. This particular web part is one which many SharePoint developers will use quite often for displaying lists of links etc. However, anybody who's ever worked with it will probably tell you they spent a good hour (or more) on the first time, wondering how the hell to get the control to display either:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;custom columns on their list&lt;/li&gt;&lt;li&gt;custom columns on the content type that the page layout uses (in WCM scenarios)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Since this doesn't happen automatically, it becomes apparent you have to tell the control the names of your custom fields. You might expect this to be exposed (like many other things are) by the control properties, but unfortunately it's not that simple. There &lt;em&gt;is&lt;/em&gt; a property (&lt;strong&gt;CommonViewFields&lt;/strong&gt;)&lt;strong&gt;,&lt;/strong&gt; but the tool part doesn't provide a UI to enter a value. This means that the value can only be supplied by digging a little deeper and changing the definition of the CQWP using it's .webpart file.&lt;/p&gt;&lt;p&gt;This involves exporting the web part from a page which uses it, amending the &lt;strong&gt;CommonViewFields&lt;/strong&gt; element in the XML, then re-importing the .webpart file to the Web Part gallery. This new definition can then be added to your page, and you'll then get the right results. &lt;/p&gt;&lt;p&gt;Hmm. Why is it not a property on the control again?!&lt;/p&gt;&lt;p&gt;So this was the extension I was going to implement. As it goes, &lt;a href="http://www.sharepoint-tips.com/"&gt;Ishai Sagi&lt;/a&gt; has beat me to it and is supplying additional functionality to boot. The shot below shows that now all you have to do is enter your field names into the tool part:&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://bp3.blogger.com/_DPonmXhJQ4g/RoLYgEYD11I/AAAAAAAAAB0/egq2OOr88Ps/s1600-h/IshaiSagi_ECQWP.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5080861375069411154" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_DPonmXhJQ4g/RoLYgEYD11I/AAAAAAAAAB0/egq2OOr88Ps/s320/IshaiSagi_ECQWP.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;Ishai writes about this at &lt;a href="http://www.sharepoint-tips.com/2007/06/adding-custom-fields-to-enhanced.html"&gt;http://www.sharepoint-tips.com/2007/06/adding-custom-fields-to-enhanced.html&lt;/a&gt;. His 'Extended Content Query web part' can be downloaded from &lt;a href="http://www.codeplex.com/ECQWP"&gt;http://www.codeplex.com/ECQWP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Definitely worth a look if you use CQWP regularly.&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/128472161" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="entry"&gt;
&lt;div class="title"&gt;
&lt;a href="http://feeds.feedburner.com/~r/ChrisObrien/~3/127713988/uk-sharepoint-user-group-customizing.html"&gt;UK SharePoint user group - Customizing SharePoint the supported way&lt;/a&gt;
&lt;/div&gt;&lt;div class="moreinfo"&gt;
&lt;span class="date"&gt;Monday, June 25, 2007&lt;/span&gt; &amp;nbsp;| &amp;nbsp;&lt;span class="source"&gt;From &lt;a href="http://feeds.feedburner.com/ChrisObrien" target="_blank"&gt;Chris O'Brien's blog&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;&lt;p&gt;&lt;p&gt;The UK SharePoint user group is meeting this Thursday (28th June) at the Microsoft campus in Reading. There are two sessions, one of which I'm presenting:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Customizing MOSS the supported way – from end-user to admin interfaces&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;One of the key concepts SharePoint developers should be aware of is that modifications to core shipped files are typically unsupported. This session looks at ways in which you can implement the kind of customizations your users may ask for, but without modifying the original files. Aspects covered include custom site definitions, modifying the site administration/central administration areas, and changing the user controls SharePoint uses with the DelegateControl architecture. The session is packed with demos, and also contains some quick tips on the best way to make other common customizations not shown in the detailed examples.&lt;/p&gt;&lt;p&gt;Speaker: Chris O'Brien&lt;/p&gt;&lt;p&gt;..and also:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Groove: A powerful tool for collaboration, that is now part of Office 07.&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;In this session, we review the basic functionality and then show, using the latest Microsoft templates (including issue tracking and document review), how Groove is not just a tool but a platform for delivering functionality. We'll also look at how Groove and SharePoint can both effectively work together.&lt;/p&gt;&lt;p&gt;Speaker: TBA&lt;/p&gt;&lt;p&gt;If you're in the area and would like to register, simply leave your name on the following thread over at the UK user group site:&lt;/p&gt;&lt;p&gt;&lt;a href="http://suguk.org/forums/thread/3534.aspx"&gt;http://suguk.org/forums/thread/3534.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I'll be posting my slides and sample code after the event. The content on customizing the site admin/central admin areas will probably make it's way into separate posts for clarity.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ChrisObrien/~4/127713988" height="1" width="1"/&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="accentbar"&gt;
&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;NEWS FEED&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 05 Dec 2007 15:50:46 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20071205035046P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/SPDeploymentWizard/Wiki/View.aspx?title=Home&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The SharePoint Content Deployment Wizard is a tool for SharePoint 2007 which provides the means to deploy the following content&amp;#58;&lt;br /&gt;&lt;br /&gt;- site collections&lt;br /&gt;- webs&lt;br /&gt;- lists&lt;br /&gt;- list items &amp;#40;including files&amp;#41;&lt;br /&gt;&lt;br /&gt;Content is exporting using the Content Migration API &amp;#40;PRIME&amp;#41; as a .cmp file &amp;#40;Content Migration Package&amp;#41; which can be copied to other servers for import. Unlike the out-of-the-box tools, the Wizard allows &amp;#42;granular&amp;#42; selection of content via a treeview.
&lt;br /&gt; &lt;br /&gt;The two screenshots which probably illustrate the concept of the tool best are:&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Export selection screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23102" alt="CDW_ExportSelect.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Import settings screen:&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SPDeploymentWizard&amp;amp;DownloadId=23104" alt="CDW_ImportSettings.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;N.B. In this beta version, not all possible deployment scenarios have been tested. Please take a backup before performing imports.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;More details (taken from readme)&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Usage notes&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The tool must be installed locally on the server which hosts the site&lt;/li&gt;&lt;li&gt;Site URL - enter using format http://source.test.dev&lt;/li&gt;&lt;li&gt;Import web URL - enter using format http://target.com/targetweb&lt;/li&gt;&lt;li&gt;See 'permissions' note lower down&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Import/Export characteristics&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Since the Content Migration API is used, imports/exports have the following characteristics:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;dependencies of selected content (e.g. referenced CSS files, master pages) are automatically included in the export - check 'Exclude dependencies of selected objects' to disable this&lt;/li&gt;&lt;li&gt;all required content types, columns etc. are automatically included in the export&lt;/li&gt;&lt;li&gt;in contrast to STSADM export, it is possible to retain GUIDs during deployment (where objects are not being reparented) - check 'Retain object IDs and locations' to enable this&lt;/li&gt;&lt;li&gt;no filesystem files (assemblies, SharePoint Solutions/Features etc.) are deployed - these must already be present on the target for the import to succeed)&lt;/li&gt;&lt;li&gt;the following content does not get captured by the Content Migration API - alerts, audit trail, change log history, recycle-bin items, workflow tasks/state&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;u&gt;Reparenting&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;Reparenting of objects such as webs and lists is possible with the following usage on the import:&lt;br /&gt; &lt;br /&gt;- enter the URL for the target web in the 'Import web URL' textbox&lt;br /&gt;- ensure 'Retain object IDs and locations' is not checked&lt;br /&gt; &lt;br /&gt;&lt;u&gt;Permissions&lt;/u&gt;&lt;br /&gt; &lt;br /&gt;The Content Migration API (PRIME) is used to package the content as a .cmp file, which can be copied to another &lt;br /&gt;server for import. The application MUST be run from the SharePoint server(s), and MUST be run under the context &lt;br /&gt;of an account which has appropriate SharePoint permissions - currently the way to specify an alternative user &lt;br /&gt;to the currently-logged on user is by using the 'Run as..' feature in Windows 2003 (right-click on the .exe and &lt;br /&gt;select 'Run as..').&lt;br /&gt; &lt;br /&gt;See my blog post 'Introducing the SharePoint Content Deployment Wizard' for more screenshots and information - &lt;a href="http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html" class="externalLink"&gt;http://sharepointnutsandbolts.blogspot.com/2007/12/introducing-sharepoint-content.html&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Chris O'Brien&lt;br /&gt;&lt;div class="error"&gt;
Error rendering macro: rss
&amp;nbsp;&amp;nbsp;&amp;nbsp;Expected parameter: url:[rss feed url]

&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>chrisobrien</author><pubDate>Wed, 05 Dec 2007 15:49:21 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20071205034921P</guid></item></channel></rss>