<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.sharepointblogs.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Sander&amp;#39;s Blog</title><subtitle type="html" /><id>http://www.sharepointblogs.com/koning53/atom.aspx</id><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/default.aspx" /><link rel="self" type="application/atom+xml" href="http://www.sharepointblogs.com/koning53/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20611.960">Community Server</generator><updated>2007-10-15T16:39:00Z</updated><entry><title>Centralize Master page and Alternate CSS settings</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/08/29/centralize-master-page-and-alternate-css-settings.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/08/29/centralize-master-page-and-alternate-css-settings.aspx</id><published>2008-08-29T09:43:00Z</published><updated>2008-08-29T09:43:00Z</updated><content type="html">&lt;p&gt;Goals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Control all Master pages, Application Master pages and the Alternate CSS url&amp;#39;s from code and being able to change these settings at run-time&lt;/li&gt;
&lt;li&gt;Have only a single copy of the Master page(s) and the alternate stylesheet(s) in your whole farm (ideally on the file system in the _/layouts folder)&lt;/li&gt;
&lt;li&gt;Apply a custom Master page and stylesheet to Non-Publishing teamsites&lt;/li&gt;
&lt;li&gt;Apply a different Master page and stylesheet to the application pages (_/layouts pages)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;To achieve this I want to use a HttpModule to set the Masterpage and alternate CSS settings at run time. This is probably the only way to change the application.master (do some Googling on it if you don&amp;#39;t believe me). &lt;/p&gt;
&lt;p&gt;This HttpModule should determine for every request what combination of stylesheet and master should be used. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;To update the Masterpage&lt;/b&gt; you can easily tell the current page to use another master at runtime:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Page.MasterPageFile = &amp;quot;~/layouts/custom.master&amp;quot;;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This works for both regular pages and application pages, although you probably want to use different master pages for the two.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Updating the Alternate CSS&lt;/b&gt; is quite a bit harder. This is because the CSS link is rendered by a separate control inside the masterpage:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;SharePoint:CssLink runat=&amp;quot;Server&amp;quot;/&amp;gt;&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;If you dive into the source of this control by using Reflector you&amp;#39;ll find a &lt;strong&gt;Render()&lt;/strong&gt; method in which the actual CSS links are written to the screen. &lt;/p&gt;
&lt;p&gt;This Render method will write several CSS links from several sources:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1&lt;sup&gt;st&lt;/sup&gt;:&lt;/b&gt; It will ask the current &lt;b&gt;SPContext&lt;/b&gt; for its &lt;b&gt;CssReferences&lt;/b&gt;. This is an internal collection; I didn&amp;#39;t find a way to modify this collection&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2&lt;sup&gt;nd&lt;/sup&gt;&lt;/b&gt;: It writes a link from its own private string &lt;b&gt;m_primaryCssUrl&lt;/b&gt;. This is probably the link to core.css. Because it is private you cannot and you do not want to change it. I believe this string is assigned in a obfuscated method called SetDefaults() because it is not assigned anywhere else.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3th&lt;/b&gt;: &amp;nbsp;It writes a link from its own pubic property &lt;b&gt;DefaultURL&lt;/b&gt;, finally a public property we can set! Setting this property can look like:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;SharePoint:CssLink runat=&amp;quot;Server&amp;quot; DefaultUrl=&amp;quot;~/layouts/custom.master&amp;quot;/&amp;gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You&amp;#39;ll hard-code this property in the Masterpage, meaning that every Masterpage is connected to a specific Stylesheet. If you want to be able to dynamically attach different stylesheets from code (for example based on the user or based on the time of the day, the weather, etc), this is not the way for you. &lt;/p&gt;
&lt;p&gt;So you really want to control the Stylesheet on run-time? Fine, but I&amp;#39;ll warn you - it&amp;#39;s not going to be nice. &lt;/p&gt;
&lt;p&gt;First thing, you&amp;#39;re not able to access the &lt;b&gt;SharePoint:CssLink&lt;/b&gt; &amp;nbsp;control programmatically to set the &lt;b&gt;DefaultUrl&lt;/b&gt;. This is because it has no Id and is not registered in the code-behind. Looping to all controls does not help as well; I can&amp;#39;t get a hook to the control... &lt;/p&gt;
&lt;p&gt;Luckily the &lt;b&gt;Render()&lt;/b&gt; method of the CssLink control also has a 4&lt;sup&gt;th&lt;/sup&gt; source from which it retrieves CSS links;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4&lt;sup&gt;th&lt;/sup&gt;&lt;/b&gt;: It writes a link which is defined in one of&amp;nbsp;the current SPWeb properties: &lt;b&gt;m_alternateCssUrl&lt;/b&gt;. This property is also accessible from the public property &lt;b&gt;SPWeb.AlternateCssUrl&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;So if we set this property it will automatically be rendered by the SharePoint:CssLink control :-)&lt;/p&gt;
&lt;p&gt;The downsize to this is that you are actually changing SPWeb properties. If you don&amp;#39;t save the SPWeb these changes are discarded after the request, but if the SPWeb is saved somewhere along the page execution path, this setting will be saved as well. Not very nice. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Custom CssLink Control?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;So this SharePoint:CssLink control is not very easy to manipulate at run-time. For the moment I am fine setting the DefaultUrl property in the control itself. This leaves me with a bit less flexibility, but it works and it is actually default functionality. Due to the limited time I have available it&amp;#39;s a nice trade-off. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you are ready to take more serious matters, there are 2 options I want to consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. Overriding the SharePoint:CssLink control and add our own logic on top of it&lt;/li&gt;
&lt;li&gt;2. Creating our own SharePoint:CssLink control&lt;/li&gt;
&lt;li&gt;3. Adding the CSS Link directly from the HttpModule. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The code if have so far look like (simplified):&lt;/p&gt;
&lt;p&gt;&lt;pre class="csharpcode"&gt;&lt;em&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MasterPageModule : IHttpModule
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;
    }

    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; context_PreRequestHandlerExecute(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        Page page = HttpContext.Current.CurrentHandler &lt;span class="kwrd"&gt;as&lt;/span&gt; Page;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (page != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            page.PreInit += page_PreInit;
        }
    }

    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; page_PreInit(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        Page page = sender &lt;span class="kwrd"&gt;as&lt;/span&gt; Page;

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (page.MasterPageFile.ToLower().Contains(&lt;span class="str"&gt;&amp;quot;application.master&amp;quot;&lt;/span&gt;))
        {
            page.MasterPageFile = &lt;span class="str"&gt;&amp;quot;~/_layouts/customApplication.master&amp;quot;&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (page.MasterPageFile.ToLower().Contains(&lt;span class="str"&gt;&amp;quot;default.master&amp;quot;&lt;/span&gt;))
        {
            page.MasterPageFile = &lt;span class="str"&gt;&amp;quot;~/_layouts/custom.master&amp;quot;&lt;/span&gt;;
        }

    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Dispose()
    {
    }
}&lt;/em&gt;&lt;/pre&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=20344" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Design" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Design/default.aspx" /></entry><entry><title>Automatically upload udcx files to Central Admin</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/08/07/automatically-upload-udcx-files-to-central-admin.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/08/07/automatically-upload-udcx-files-to-central-admin.aspx</id><published>2008-08-07T09:12:00Z</published><updated>2008-08-07T09:12:00Z</updated><content type="html">&lt;p&gt;Easier than uploading by hand, create a&amp;nbsp;batch file in the folder containing your udcx files and add these lines:&lt;/p&gt;
&lt;p&gt;for /f &amp;quot;tokens=*&amp;quot; %%a in (&amp;#39;dir /b &amp;quot;*.udcx&amp;quot;&amp;#39;) do (&lt;br /&gt;stsadm -o adddataconnectionfile -filename %%a -overwrite &lt;strong&gt;&lt;em&gt;true[default]/false&lt;/em&gt;&lt;/strong&gt; -webaccessible &lt;strong&gt;&lt;em&gt;true/false[default]&lt;/em&gt; &lt;/strong&gt;-category &lt;strong&gt;&lt;em&gt;&amp;quot;Category1&amp;quot;&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;)&lt;/p&gt;
&lt;p&gt;The -overwrite, -webaccessible and category params are optional. &lt;/p&gt;
&lt;p&gt;More info on the stsadm command: &lt;a href="http://technet.microsoft.com/en-us/library/cc263067.aspx"&gt;http://technet.microsoft.com/en-us/library/cc263067.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=19607" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Infopath" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Infopath/default.aspx" /></entry><entry><title>Using database snaphots for testing SharePoint</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/07/10/using-database-snaphots-for-testing-sharepoint.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/07/10/using-database-snaphots-for-testing-sharepoint.aspx</id><published>2008-07-10T06:54:00Z</published><updated>2008-07-10T06:54:00Z</updated><content type="html">&lt;p&gt;This can be a real time-saver! Do you know of the concept of Snapshots in SQL Server 2005? No? It is one of the new&amp;nbsp;features available in the Enterprise edition of&amp;nbsp;SQL 2005. &lt;/p&gt;
&lt;p&gt;Database Snapshots allows you to create a read-only copy of your database that can be used for other purposes, such as reporting, auditing or recovering data. Currently, you can do that by running a backup and restoring it to another database. However, the big advantage you gain by using Database Snapshots instead is the speed at which a snapshot occurs, as well as the ability to create multiple snapshots at different points in time quickly. &lt;/p&gt;
&lt;p&gt;If you want to read more about the concept, the advantages and the disadvantages you can read the great post of Greg Robidoux at:&lt;br /&gt;&lt;a href="http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1176142,00.html#cons"&gt;http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1176142,00.html#cons&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For SharePoint development it is a great way to test some configuration, and if you changed your mind, roll back all the changes you&amp;#39;ve made in just a few seconds! This can be handy for testing scripts, for manual configuration in the UI, or for&amp;nbsp;example to give&amp;nbsp;demo&amp;#39;s. &lt;/p&gt;
&lt;p&gt;The following scripts create and restore a&amp;nbsp;snapshot on a SharePoint Content Database (please see the limitions at the bottom of this post)&lt;/p&gt;
&lt;p style="COLOR:blue;"&gt;&lt;strong&gt;Creating the snapshot&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To create the snapshot you can run the following T-SQL (run a new Query dialog in SQL Server Management Studio or create a .sql file)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CREATE DATABASE WSS_Content_Snapshot ON -- [The name of the snapshot]&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAME = WSS_Content_Snapshot, -- [The name of the logical filename] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILENAME = &amp;#39;C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Snapshots\WSS_Content_Snapshot.ss&amp;#39;&amp;nbsp; -- [The filename and location of the snapshot]&lt;br /&gt;) &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AS SNAPSHOT OF WSS_Content -- [The original Content Database]&lt;/strong&gt; &lt;/p&gt;
&lt;p style="COLOR:blue;"&gt;&lt;strong&gt;Restoring&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Restoring&amp;nbsp;a database is as easy as the following line:&lt;br /&gt;&lt;strong&gt;RESTORE DATABASE WSS_Content FROM DATABASE_SNAPSHOT = &amp;#39;WSS_Content_Snapshot&amp;#39;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You might run into an error&amp;nbsp;if other users&amp;nbsp;(SharePoint processes) are still connected to the database:&amp;nbsp;&lt;/p&gt;
&lt;p style="COLOR:red;"&gt;Database state cannot be changed while other users are using the database &amp;#39;WSS_Content&amp;#39;&lt;br /&gt;RESTORE DATABASE is terminating abnormally.&lt;/p&gt;
&lt;p&gt;To avoid this you can first run a script to kill all existing processes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-- First, kill all active processes&lt;br /&gt;DECLARE @DatabaseName nvarchar(50)&lt;br /&gt;SET @DatabaseName = N&amp;#39;WSS_Content&amp;#39;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DECLARE @SQL varchar(max)&lt;br /&gt;SET @SQL = &amp;#39;&amp;#39;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SELECT @SQL = @SQL + &amp;#39;Kill &amp;#39; + Convert(varchar, SPId) + &amp;#39;;&amp;#39; FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId &amp;lt;&amp;gt; @@SPId&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EXEC(@SQL)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-- Second, Restore the database from the snapshot&lt;br /&gt;RESTORE DATABASE WSS_Content FROM DATABASE_SNAPSHOT = &amp;#39;WSS_Content_Snapshot&amp;#39;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="COLOR:blue;"&gt;&lt;strong&gt;Limitions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Please note that the snapshot above is limited&amp;nbsp;to the Content Database, the changes you can restore include:&lt;br /&gt;- Adding/Deleting/Editing &lt;em&gt;Subsites&lt;/em&gt;&lt;br /&gt;- Adding/Deleting/Editing &lt;em&gt;Lists&lt;/em&gt;&lt;br /&gt;- Adding/Deleting/Editing &lt;em&gt;List-items&lt;br /&gt;&lt;/em&gt;- Adding/Deleting/Editing &lt;em&gt;Content Types&lt;br /&gt;&lt;/em&gt;- Adding/Deleting/Editing &lt;em&gt;Webparts&lt;br /&gt;- &lt;/em&gt;Enabling/Disabling &lt;em&gt;Features&lt;/em&gt;&lt;br /&gt;- Adding/Deleting/Editing &lt;em&gt;Workflows&lt;/em&gt;&lt;br /&gt;- Editing the &lt;em&gt;Navigation&lt;/em&gt;&lt;br /&gt;- Editing the S&lt;em&gt;itecollection&lt;/em&gt; in the Site Settings (not deleting or creating sitecollections!)&lt;br /&gt;- ...&lt;/p&gt;
&lt;p&gt;Some things you cannot do:&lt;br /&gt;- Sitecollections are registered in the configuration database, if you add or delete sitecollections you must ensure you also snapshot the configuration database&lt;br /&gt;- Solution packages (wsp files) are registered at the Farm level, if you add or delete solution packages you must ensure you also snapshot the configuration database&lt;br /&gt;&lt;br /&gt;This is not an exhausting list, please beware of any configuration done at the Farm level since this is registered in the configuration database. If you really want to snapshot your whole environment I suggest you lock all databases, create snapshots of all databases and restore all databases at the same time. You might want to try some variations, but I would not recommend using it in any environment containing critical data since it is not supported my MS.&amp;nbsp;&lt;br /&gt;&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=18611" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="snaphots" scheme="http://www.sharepointblogs.com/koning53/archive/tags/snaphots/default.aspx" /></entry><entry><title>Troubleshooting tempdb growth when crawling SharePoint data</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/07/09/troubleshooting-the-index-crawl-process.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/07/09/troubleshooting-the-index-crawl-process.aspx</id><published>2008-07-09T11:15:00Z</published><updated>2008-07-09T11:15:00Z</updated><content type="html">&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;
&lt;p&gt;Today I received a message from our Database admin concerning the Temp Database. It seems a SharePoint process is filling the TempDB up to 15gb. After that&amp;nbsp;it&amp;nbsp;reaches it physical limit (disk space is very limited..) and throws an exception:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;The transaction log for database &amp;#39;tempdb&amp;#39; is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;From this moment on you can consider your SQL server to be crashed, since probably every application uses the Temp database and every query using the TempDB will result in an error. &lt;/p&gt;
&lt;p&gt;If you follow the suggestion given in de event-log exception you&amp;#39;re going to check the log_reuse_wait_desc, in my case this quotes: &amp;quot;ACTIVE_TRANSACTION&amp;quot;.&lt;br /&gt;In the SQL Server Activity Monitor you can see the current application using the TempDB is &amp;quot;Windows SharePoint Server&amp;quot;. The details of this activity shows that there is a MOSS Crawler stored procedure (forgot to copy the name) running. &lt;/p&gt;
&lt;p&gt;Usually the crawler will use the Temp DB while indexing, it will then flush this data to the file system and clear the Temp database. I don&amp;#39;t know what triggers this &amp;#39;flush&amp;#39;, but I assume it flushes between different sitecollections. Why this assumption? &lt;br /&gt;1. Because I&amp;#39;ve only got 1 (extremely large) sitecollection to index and the Temp database never shrinks in the crawl process, it just grows until it crashes. &lt;br /&gt;2. Because I can&amp;#39;t find any other information about this process..&lt;/p&gt;
&lt;p&gt;When you will stop a crawl (Manage Content Sources -&amp;gt; Stop Crawl) it will wait until the current data is flushed, in my case&amp;nbsp; (1 extremely large sitecollection) this&amp;nbsp;means it will wait until it crashes.&amp;nbsp;After it crashes you&amp;#39;ll have to empty the Temp database manually.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m now in the process of telling SharePoint not to do the crawling. This is not easy since it must complete the current crawl before it can flush the data and inherently stop crawling. You can&amp;#39;t even stop the &amp;quot;Microsoft Office SharePoint Search&amp;quot; service, it will tell you it&amp;#39;s busy. To stop this thing you will really need to kill the MSSearch process (I don&amp;#39;t advice you to do this, but it is a last resort..). &lt;/p&gt;
&lt;p&gt;After you&amp;#39;ve killed the process it is automatically started again by the &amp;quot;Microsoft Office SharePoint Search&amp;quot; service. Workaround is to disable the service and then kill the process.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now you might think you can&amp;nbsp;re-configure or re-schedule the Content Source, wrong!&amp;nbsp;Since you&amp;#39;ve&amp;nbsp;stopped the &amp;quot;Microsoft Office SharePoint Search&amp;quot; service, you cannot use the&amp;nbsp;Search Settings pages in&amp;nbsp;your Shared Service Provider.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once you will&amp;nbsp;re-start the &amp;quot;Microsoft Office SharePoint Search&amp;quot; service it will automatically&amp;nbsp;continue the Crawl, even before you can&amp;nbsp;stop it.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Following question&amp;nbsp;will now be; how can&amp;nbsp;I stop this full Crawl?&amp;nbsp;As far as I found I&amp;#39;ve got 2 options left:&lt;br /&gt;1. Give the Temp&amp;nbsp;database more space and wait for the crawl to&amp;nbsp;be finished&lt;br /&gt;2.&amp;nbsp;Hack in the database to remove the current Crawl according to this&amp;nbsp;thread: &lt;a href="http://msmvps.com/blogs/obts/archive/2006/12/18/432542.aspx"&gt;http://msmvps.com/blogs/obts/archive/2006/12/18/432542.aspx&lt;/a&gt;&lt;br /&gt;3. ...&lt;/p&gt;
&lt;p&gt;Of course I opt for the first one&amp;nbsp;which is obviously&amp;nbsp;the most healthy and logical option.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;I hope you will never need it, but if you will you&amp;nbsp;now have my experience at your&amp;nbsp;dispense.. &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=18561" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Search" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Search/default.aspx" /><category term="tempdb" scheme="http://www.sharepointblogs.com/koning53/archive/tags/tempdb/default.aspx" /><category term="crawl" scheme="http://www.sharepointblogs.com/koning53/archive/tags/crawl/default.aspx" /></entry><entry><title>[Dutch] Nintex Workflow presentation - DIWUG</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/07/03/dutch-nintex-workflow-presentation-diwug.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="3992917" href="http://www.sharepointblogs.com/koning53/attachment/18359.ashx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/07/03/dutch-nintex-workflow-presentation-diwug.aspx</id><published>2008-07-03T22:26:00Z</published><updated>2008-07-03T22:26:00Z</updated><content type="html">&lt;p&gt;(Sorry for this post being&amp;nbsp;Dutch. Tonight I presented Nintex workflow at the &lt;a class="" href="http://www.diwug.nl/" target="_blank"&gt;Dutch Information Worker Group&lt;/a&gt;. In this post I will publish the sheets and code I&amp;#39;ve used)&lt;/p&gt;
&lt;p&gt;In navolging tot de Nintex Workflow presentatie kan je nu &lt;a class="" href="http://www.sharepointblogs.com/koning53/attachment/18359.ashx"&gt;de slides downloaden&lt;/a&gt; van m&amp;#39;n blog.&lt;/p&gt;
&lt;p&gt;Ik&amp;nbsp;heb de&amp;nbsp;presentatie bijgewerkt met:&lt;br /&gt;- Een aantal dingen die ik vergeten ben&lt;br /&gt;- Toelichtingen&amp;nbsp;en details over de demo&amp;#39;s&lt;br /&gt;- Verwijzigingen naar help-files en de Nintex SDK&lt;br /&gt;- Contact gegevens&amp;nbsp;&lt;br /&gt;- De cut-scenes: sheets die de presentatie niet gered hebben..&lt;/p&gt;
&lt;p&gt;De code voor een &lt;a class="" href="http://www.sharepointblogs.com/koning53/attachment/18359.ashx"&gt;Custom Activity project&lt;/a&gt; kan je eveneens downloaden van m&amp;#39;n blog. Gebruik hierbij de &lt;a class="" href="http://connect.nintex.com/files/folders/sdk/entry122.aspx"&gt;Nintex SDK&lt;/a&gt; om dit voorbeeld te installeren en aan te passen.&lt;/p&gt;
&lt;p&gt;Ik wil jullie via deze weg nogmaal bedanken voor de grote opkomst en de interesse. Vragen kan je uiteraard kwijt in de comments.&lt;/p&gt;
&lt;p&gt;Sander&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=18359" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Nintex" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Nintex/default.aspx" /><category term="DIWUG" scheme="http://www.sharepointblogs.com/koning53/archive/tags/DIWUG/default.aspx" /></entry><entry><title>Synchronize Content Types and Site Columns between teamsites</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/06/11/synchronize-content-types-and-site-columns-between-teamsites.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/06/11/synchronize-content-types-and-site-columns-between-teamsites.aspx</id><published>2008-06-11T11:45:00Z</published><updated>2008-06-11T11:45:00Z</updated><content type="html">&lt;p&gt;This morning I had a conversation with a colleague about &lt;a class="" href="http://www.schemalogic.com/" target="_blank"&gt;Schemalogic&lt;/a&gt;. This tool enables you to manage your content types in a central location for your whole&amp;nbsp;farm or even multiple farms. &lt;/p&gt;
&lt;p&gt;Based on this concept I thought it might be cool to make a &amp;#39;master&amp;#39; sitecollection with all site-columns and content-types and reflect those to all other site collections. Don&amp;#39;t ask me why I don&amp;#39;t use features or other concepts, we&amp;#39;re currently evaluating the different possibilities.. &lt;/p&gt;
&lt;p&gt;This is my quick-and-dirty script to sync the Site Columns and Content Types between sites. It does te following:&lt;/p&gt;
&lt;p&gt;1. Create Site Columns if they don&amp;#39;t exist&lt;br /&gt;2. Update Site Columns if the are different&lt;br /&gt;3. Create Content Types if they don&amp;#39;t exist&lt;br /&gt;4. Add/Remove Site Columns to existing Content Types&lt;br /&gt;5. Remove Site Columns if they are removed from the master site&lt;/p&gt;
&lt;p&gt;A number of questions arise when building the script:&lt;/p&gt;
&lt;p&gt;- How to handle lookup fields, since they link to a local list. We could ignore these fields or assume the list exists..&lt;br /&gt;- It should remove Content Types if they are removed from the master site (not very complex, just forgot it in this version)&lt;br /&gt;- It should iterate through all site collections instead of just one&lt;br /&gt;&lt;br /&gt;Well, I&amp;#39;ll continue evaluating the other possibilities, but we&amp;#39;ll&amp;nbsp;might go for this method. In meanwhile you are free to use the (beta)code I&amp;#39;ve written for this concept. Please feel free to comment your findings and suggestions!&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
{
    SPSite sourceRoot = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(&lt;span class="str"&gt;&amp;quot;http://wss3dev/sites/TEST2&amp;quot;&lt;/span&gt;);
    SPWeb sourceWeb = sourceRoot.OpenWeb();

    SPSite targetRoot = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(&lt;span class="str"&gt;&amp;quot;http://wss3dev/sites/TEST3&amp;quot;&lt;/span&gt;);
    SPWeb targetWeb = targetRoot.OpenWeb();

    SyncSiteColumns(sourceWeb, targetWeb);
    SyncContentTypes(sourceWeb, targetWeb);
    DeleteSiteColumns(sourceWeb, targetWeb);
}

&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// Syncs content types based on a sourceweb and a targetweb.&lt;/span&gt;
&lt;span class="rem"&gt;/// Add&amp;#39;s Content Types if they don&amp;#39;t exist.&lt;/span&gt;
&lt;span class="rem"&gt;/// Add&amp;#39;s/Removes Fields in existing Content Types&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;sourceWeb&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;targetWeb&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SyncContentTypes(SPWeb sourceWeb, SPWeb targetWeb)
{
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPContentType sourceType &lt;span class="kwrd"&gt;in&lt;/span&gt; sourceWeb.ContentTypes)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!sourceType.ReadOnly &amp;amp;&amp;amp; !sourceType.Sealed &amp;amp;&amp;amp; !sourceType.Hidden) &lt;span class="rem"&gt;// Exclude non-editable types&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; update = &lt;span class="kwrd"&gt;false&lt;/span&gt;;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (targetWeb.ContentTypes[sourceType.Name] == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                SPContentType parentContentType = targetWeb.ContentTypes[sourceType.Parent.Name];
                SPContentTypeCollection collection = targetWeb.ContentTypes;

                SPContentType newContentType = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPContentType(parentContentType, collection, sourceType.Name);
                targetWeb.ContentTypes.Add(newContentType);

                newContentType = targetWeb.ContentTypes[sourceType.Name];

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPField field &lt;span class="kwrd"&gt;in&lt;/span&gt; sourceType.Fields)
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (newContentType.FieldLinks[field.InternalName] == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                    {
                        newContentType.FieldLinks.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; SPFieldLink(targetWeb.Fields[field.Title]));
                    }
                }

                newContentType.Update(&lt;span class="kwrd"&gt;false&lt;/span&gt;); &lt;span class="rem"&gt;// Do not update children, there are no children yet&lt;/span&gt;
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                SPContentType targetType = targetWeb.ContentTypes[sourceType.Name];

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPField sourceField &lt;span class="kwrd"&gt;in&lt;/span&gt; sourceType.Fields)
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (targetType.FieldLinks[targetWeb.Fields.GetFieldByInternalName(sourceField.InternalName).Id] == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                    {
                        targetType.FieldLinks.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; SPFieldLink(targetWeb.Fields.GetFieldByInternalName(sourceField.InternalName)));
                        update = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                    }
                }

                &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = (targetType.FieldLinks.Count - 1); i &amp;gt;= 0; i--)
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (sourceType.FieldLinks[targetType.FieldLinks[i ].Name] == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                    {
                        targetType.FieldLinks.Delete(targetType.FieldLinks[i ].Name);
                        update = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                    }
                }

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (update)
                    targetType.Update(&lt;span class="kwrd"&gt;false&lt;/span&gt;);
            }
        }
    }
}

&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// Syncs Sitecolumns based on a sourceweb and targetweb&lt;/span&gt;
&lt;span class="rem"&gt;/// Updates a sitecolumn if it is different.&lt;/span&gt;
&lt;span class="rem"&gt;/// Add&amp;#39;s a sitecolumn if does not exist.&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;sourceWeb&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;targetWeb&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SyncSiteColumns(SPWeb sourceWeb, SPWeb targetWeb)
{
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPField field &lt;span class="kwrd"&gt;in&lt;/span&gt; sourceWeb.Fields)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!targetWeb.Fields.ContainsField(field.Title))
        {
            targetWeb.Fields.AddFieldAsXml(field.SchemaXml);
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt;
        {
            SPField targetField = targetWeb.Fields.GetFieldByInternalName(field.InternalName);

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (targetField.SchemaXml != field.SchemaXml)
            {
                targetField.SchemaXml = field.SchemaXml;
                targetField.Update(&lt;span class="kwrd"&gt;true&lt;/span&gt;);
            }
        }
    }

    targetWeb.Update();
}

&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// Removes sitecolumns from the target-site which do not exist in the source-site&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;sourceWeb&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;targetWeb&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DeleteSiteColumns(SPWeb sourceWeb, SPWeb targetWeb)
{
    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = (targetWeb.Fields.Count - 1); i &amp;gt;= 0; i--)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!sourceWeb.Fields.ContainsField(targetWeb.Fields[ i].Title))
        {
            targetWeb.Fields.Delete(targetWeb.Fields[i ].Title);
        }
    }
}&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=17487" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>Programmatically added Site Columns and Site Gallery issue</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/05/19/programmatically-added-site-columns-and-site-gallery-issue.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/05/19/programmatically-added-site-columns-and-site-gallery-issue.aspx</id><published>2008-05-19T15:10:00Z</published><updated>2008-05-19T15:10:00Z</updated><content type="html">&lt;p&gt;If you add Site Columns to&amp;nbsp;a site or web using code&amp;nbsp;you can do it like this:&lt;font color="#2b91af"&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#2b91af"&gt;SPSite &lt;/font&gt;&lt;font size="2"&gt;root = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;SPSite&lt;/font&gt;&lt;font size="2"&gt;(&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;http://wss/sites/site&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;SPWeb&lt;/font&gt;&lt;font size="2"&gt; web = root.OpenWeb();&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; fieldname = web.Fields.Add(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;TEST&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;SPFieldType&lt;/font&gt;&lt;font size="2"&gt;.Text, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;true&lt;/font&gt;&lt;font size="2"&gt;);&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;After adding a column this way my Site Gallery page (mngfield.asp) broke with the following error:&lt;/p&gt;
&lt;p&gt;&lt;span id="ctl00_PlaceHolderMain_LabelMessage"&gt;&lt;em&gt;Object reference not set to an instance of an object.&amp;nbsp;&amp;nbsp; at Microsoft.SharePoint.ApplicationPages.FieldListRenderer.Render(HtmlTextWriter output) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)&lt;/em&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;.....&lt;/p&gt;
&lt;p&gt;The cause of this is the&amp;nbsp;case sensitivity when using the Object Model to open site objects.&amp;nbsp;The&amp;nbsp;Site&amp;nbsp;Gallery page uses the &lt;u&gt;FieldListRenderer&lt;/u&gt; control to display all Site Columns. In the &lt;u&gt;Render&lt;/u&gt; method (by using Reflector) you&amp;#39;ll find a piece like:&lt;/p&gt;
&lt;p&gt;SPWeb &lt;b&gt;web&lt;/b&gt; = &lt;a title="SPWebCollection allWebs // Local Variable"&gt;allWebs&lt;/a&gt;[&lt;a title="SPField field // Local Variable"&gt;field&lt;/a&gt;.Scope];&lt;br /&gt;string &lt;b&gt;title&lt;/b&gt; = &lt;a title="SPWeb web // Local Variable"&gt;web&lt;/a&gt;.Title;&lt;br /&gt;&lt;br /&gt;In this case &lt;u&gt;field&lt;/u&gt; is the actual&amp;nbsp;Site Column and &lt;u&gt;field.Scope&lt;/u&gt; stores the URL as it was once&amp;nbsp;used to construct the parent web. In our code snippet it would contain&amp;nbsp;&lt;font color="#a31515"&gt;&amp;quot;&lt;font size="2"&gt;http://wss/sites/site&amp;quot;.&lt;/font&gt;&lt;/font&gt; This value is used to get the web from allWebs, and this method turns out to be case sensitive...!! &lt;img src="http://www.sharepointblogs.com/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/p&gt;
&lt;p&gt;In my case the site was created with the url: &lt;font color="#a31515"&gt;&lt;font size="2"&gt;&lt;a href="http://wss/sites/Site"&gt;http://wss/sites/Site&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt; So the allWebs method returns null and the web.Title causes an Object reference exception.&lt;/p&gt;
&lt;p&gt;By using the right casing everything was fixed in a second:&lt;/p&gt;
&lt;p&gt;&lt;font color="#2b91af"&gt;SPSite &lt;/font&gt;&lt;font size="2"&gt;root = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;SPSite&lt;/font&gt;&lt;font size="2"&gt;(&lt;font color="#a31515"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;http://wss/sites/Site&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;SPWeb&lt;/font&gt;&lt;font size="2"&gt; web = root.OpenWeb();&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; fieldname = web.Fields.Add(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;TEST&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;SPFieldType&lt;/font&gt;&lt;font size="2"&gt;.Text, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;true&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;/p&gt;&lt;font color="#2b91af" size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=16634" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>Automatically deploy the ServerAdminTemplates</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/04/02/automatically-deploy-the-serveradmintemplates.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/04/02/automatically-deploy-the-serveradmintemplates.aspx</id><published>2008-04-02T07:33:00Z</published><updated>2008-04-02T07:33:00Z</updated><content type="html">&lt;p&gt;Installing the ServerAdminTemplates and creating sites is a lot easier and quicker by using these scripts:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/emoticons/emotion-30.gif" alt="Star" /&gt;&amp;nbsp;1. Download the package from &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=AAE4CB5A-91D2-4F1B-9A45-3BB894E218F8&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=AAE4CB5A-91D2-4F1B-9A45-3BB894E218F8&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/emoticons/emotion-30.gif" alt="Star" /&gt; 2. Unpack it to C:\Temp&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/emoticons/emotion-30.gif" alt="Star" /&gt; 3. Create and run a .bat file in C:\Temp with this script&amp;nbsp;to deploy the solutions (thanks to &lt;a class="" href="http://www.sharepointblogs.com/adnan/archive/2007/03/05/how-to-install-server-admin-templates-for-wss-3-0-moss-2007.aspx"&gt;Adnan&lt;/a&gt; for this part):&lt;/p&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\AbsenceVacationSchedule.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;AbsenceVacationSchedule.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\ApplicationTemplateCore.wsp&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;ApplicationTemplateCore&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\BudgetingTrackingMultipleProjects.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;BudgetingTrackingMultipleProjects.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\BugDatabase.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;BugDatabase.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\CallCenter.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;CallCenter.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\ChangeRequest.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;ChangeRequest.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\ComplianceProcessSupport.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;ComplianceProcessSupport.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\ContactsManagement.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;ContactsManagement.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\DocumentLibraryReview.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;DocumentLibraryReview.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\EventPlanning.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;EventPlanning.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\ExpenseReimbursementApproval.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;ExpenseReimbursementApproval.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\HelpDesk.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;HelpDesk.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\InventoryTracking.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;InventoryTracking.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\ITTeamWorkspace.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;ITTeamWorkspace.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\JobRequisition.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;JobRequisition.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\KnowledgeBase.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;KnowledgeBase.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\LendingLibrary.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;LendingLibrary.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\PhysicalAssetTracking.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;PhysicalAssetTracking.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\ProjectTrackingWorkspace.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;ProjectTrackingWorkspace.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\RoomEquipmentReservations.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;RoomEquipmentReservations.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o addsolution -filename &amp;quot;C:\temp\SalesLeadPipeline.wsp&amp;quot; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o deploysolution -name &amp;quot;SalesLeadPipeline.wsp&amp;quot; -allowgacdeployment -immediate -force&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/emoticons/emotion-30.gif" alt="Star" /&gt; 4. Create and run a .bat file in C:\Temp with this script&amp;nbsp;to&amp;nbsp;create the sites. First replace the [[YOURVALUE]] parts:&lt;/p&gt;&lt;b&gt;&lt;font size="2"&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/AbsenceVacationSchedule -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate absence#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/BudgetingTrackingMultipleProjects -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate projmulti#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/BugDatabase -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate BT#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/CallCenter -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate callcenter#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/ChangeRequest -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate projchange#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/ComplianceProcessSupport -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate comproc#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/ContactsManagement -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate CM#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/DocumentLibraryReview -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate DR#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/EventPlanning -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate eventplan#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/ExpenseReimbursementApproval -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate exreports#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/HelpDesk -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate helpdesk#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/InventoryTracking -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate IT#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/ITTeamWorkspace -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate itteam#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/JobRequisition -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate JRIM#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/KnowledgeBase -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate KB#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/LendingLibrary -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate LL#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/PhysicalAssetTracking -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate PATM#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/ProjectTrackingWorkspace -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate projsing#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/RoomEquipmentReservations -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate RER#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe&amp;quot; -o createsite -url http://[[SERVERNAME]]/sites/SalesLeadPipeline -owneremail [[OWNER-EMAIL]] -ownerlogin [[OWNER-LOGIN]] -secondarylogin [[SECONDARY-LOGIN]] -sitetemplate ST#0 -description &amp;quot;[[YOUR DESCRIPTION]]&amp;quot;&lt;/p&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=14812" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>Indexed Columns on Lookup fields or Non-Supported fieldtypes</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/02/29/indexed-columns-on-lookup-fields-or-non-supported-fieldtypes.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/02/29/indexed-columns-on-lookup-fields-or-non-supported-fieldtypes.aspx</id><published>2008-02-29T08:48:00Z</published><updated>2008-02-29T08:48:00Z</updated><content type="html">&lt;p&gt;Indexed columns are a great way to improve performance. Especially the SiteMapProviders (used by a CQWP) benefit from the indexes. I know there are some performance-tests out there, but just try to index every field you use in a Content Query Webpart and you&amp;#39;ll know the difference.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;It&amp;#39;s a shame not every fieldtype can be indexed. In my experience only Text, Number, Date and Choice can be indexed. So what about Lookups, Calculated values or Custom fieldtypes?&lt;br /&gt;&lt;br /&gt;My workaround is to copy the values of those field types to a plain textfield and to index those textfields. This can easily be done by a workflow or an event handler:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; HandleEvent(SPItemEventProperties properties)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (properties.EventType == SPEventReceiverType.ItemUpdated || properties.EventType == SPEventReceiverType.ItemAdded)
    {
        SPListItem item = properties.ListItem;

        &lt;span class="rem"&gt;// Copy contents of the Lookup to a text field for indexing&lt;/span&gt;
        SPFieldLookupValueCollection values = item[&lt;span class="str"&gt;&amp;quot;LOOKUP&amp;quot;&lt;/span&gt;] &lt;span class="kwrd"&gt;as&lt;/span&gt; SPFieldLookupValueCollection;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (values != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPFieldLookupValue &lt;span class="kwrd"&gt;value&lt;/span&gt; &lt;span class="kwrd"&gt;in&lt;/span&gt; values)
            {
                item[&lt;span class="str"&gt;&amp;quot;LOOKUP_INDEXED&amp;quot;&lt;/span&gt;] += &lt;span class="str"&gt;&amp;quot;, &amp;quot;&lt;/span&gt; + &lt;span class="kwrd"&gt;value&lt;/span&gt;.LookupValue;
            }

            &lt;span class="rem"&gt;// update the item without user/time-stamp &lt;/span&gt;
            item.SystemUpdate(&lt;span class="kwrd"&gt;false&lt;/span&gt;);
        }
    }
}&lt;/pre&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=13318" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>Programmatically Add/Remove Site Templates in the Site Gallery</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/02/20/programmatically-add-remove-site-templates-in-the-site-gallery.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/02/20/programmatically-add-remove-site-templates-in-the-site-gallery.aspx</id><published>2008-02-20T16:17:00Z</published><updated>2008-02-20T16:17:00Z</updated><content type="html">&lt;p&gt;Took me a while to find out how to connect to the Site Gallery, so this might save you some time. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite root = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite([yourRootURL]))
{
    &lt;span class="rem"&gt;// DELETE OLD TEMPLATES&lt;/span&gt;
    List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; toDelete = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();

    &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = root.OpenWeb())
    {
        SPFolder folder = web.Folders[&lt;span class="str"&gt;&amp;quot;_catalogs&amp;quot;&lt;/span&gt;];
        SPFolder subfolder = folder.SubFolders[&lt;span class="str"&gt;&amp;quot;wt&amp;quot;&lt;/span&gt;];

        &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = root.OpenWeb())
        {
            SPFolder folder = web.Folders[&lt;span class="str"&gt;&amp;quot;_catalogs&amp;quot;&lt;/span&gt;];
            SPFolder subfolder = folder.SubFolders[&lt;span class="str"&gt;&amp;quot;wt&amp;quot;&lt;/span&gt;];

             &lt;span class="kwrd"&gt;int&lt;/span&gt; numberOfTemplates = subfolder.Files.Count;
    
             &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = (numberOfTemplates - 1); i &amp;gt;= 0; i--)
             {
                 subfolder.Files.Delete(subfolder.Files&lt;img src="http://www.sharepointblogs.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.Url);
             }
        }
    }

    &lt;span class="rem"&gt;// SAVE SITE AS TEMPLATE&lt;/span&gt;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = root.OpenWeb([yourSiteUrl]))
    {
        web.SaveAsTemplate(&lt;span class="str"&gt;&amp;quot;[Filename]&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;[Title]&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;[Description]&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;true/false&lt;/span&gt;);
    }
}&lt;/pre&gt;
&lt;p&gt;Credits to Serge for pointing me in the right direction: &lt;a href="http://weblogs.asp.net/soever/archive/2006/06/28/NAnt-task-for-SharePoint_3A00_-Save-SPWeb-as-site-template-to-the-filesystem.aspx"&gt;http://weblogs.asp.net/soever/archive/2006/06/28/NAnt-task-for-SharePoint_3A00_-Save-SPWeb-as-site-template-to-the-filesystem.aspx&lt;/a&gt;&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=12923" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>Multi-valued (ARRAY) Comparisons only for Choice fields</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/01/21/multi-valued-array-comparisons-only-for-choice-fields.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/01/21/multi-valued-array-comparisons-only-for-choice-fields.aspx</id><published>2008-01-21T23:25:00Z</published><updated>2008-01-21T23:25:00Z</updated><content type="html">&lt;p&gt;The new Multi-Value fields are causing me quite some headaches lately. Exporting to Excel does not work, showing in Content-Editor-Webparts does not work, SharePoint Designer does not understand them, and now there&amp;#39;s an issue querying them trough the Search Engine… &lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;The SDK describes Multi-valued (ARRAY) Comparisons in Windows SharePoint Services Search SQL Syntax, but when using it it returns an error. The problem lies in SharePoint not recognizing an Multi-Value Lookup as Multi-valued. &lt;span style="FONT-FAMILY:Times New Roman;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You can use the MetaData Property Mappings page to check whether an Site Column gets indexed as a Multi-Value column: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://home.casema.nl/sanderdekoning/200801231.jpg"&gt;&lt;img alt="" src="http://home.casema.nl/sanderdekoning/200801231.jpg" width="100%" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;I used an out-of-the-box environment with SP1. I&amp;#39;ve made a Content Type and added/created some Site Columns of different Multi-Value types:&lt;br /&gt;- Multi Choice field&lt;br /&gt;- Multiline text field (I know, this is just a blob, but I wanted to be sure..)&lt;br /&gt;- Multiline text field with unlimited length&lt;br /&gt;- Multi-Value Lookup field&lt;br /&gt;- Multi-Value Lookup field with unlimited length&lt;br /&gt;- Multi-Value People field&lt;br /&gt;&lt;br /&gt;Except for the Multi Choice field none of them gets recognized as a Multi-Value field. I even tried to create a piece of content based on the content type with Multiple selections made, before I let the Index server crawl the content and discover the new Site Columns. If it doesn&amp;#39;t see it by then it never wil… So were stuck using LIKE operators, which will probably not do the performance any good. &amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Anyone with the same experience or a workaround? &lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=11563" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>MOSS Search: TotalAvailable &amp; TotalRows not accurate</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2008/01/21/moss-search-totalavailable-amp-totalrows-not-accurate.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2008/01/21/moss-search-totalavailable-amp-totalrows-not-accurate.aspx</id><published>2008-01-21T13:35:00Z</published><updated>2008-01-21T13:35:00Z</updated><content type="html">&lt;p&gt;A query against MOSS search engine returns a specified number of results&amp;nbsp;and a &lt;strong&gt;indication&lt;/strong&gt; of the total number of results. When working with the API this is the &lt;strong&gt;TotalRows&lt;/strong&gt; property of the ResultsTable, working with the WebService this is the &lt;strong&gt;TotalAvailable&lt;/strong&gt; element of the ResponsePacket. &lt;/p&gt;
&lt;p&gt;If you, like me, want to base your paging on the &lt;strong&gt;TotalRows&lt;/strong&gt; or &lt;strong&gt;TotalAvailable&lt;/strong&gt; properties and you expect it to return the exact number of results you&amp;#39;re in for some strange behaviour...&lt;/p&gt;
&lt;p&gt;I do not have a nice solution yet, although the API also exposes the &lt;strong&gt;IsTotalRowsExact&lt;/strong&gt; property. This will tell you when you&amp;#39;re on the save side. The webservice ResponsePacket has not got an equalivant property. &lt;/p&gt;
&lt;p&gt;The MSDN documentation of the API does not mention this number not being exact: &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.office.server.search.query.resulttable_members.aspx"&gt;http://msdn2.microsoft.com/en-us/library/microsoft.office.server.search.query.resulttable_members.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The webservice documentation actually does mention it: &lt;a href="http://msdn2.microsoft.com/en-us/library/aa193748(office.11).aspx#RangeType_TotalAvailable"&gt;http://msdn2.microsoft.com/en-us/library/aa193748(office.11).aspx#RangeType_TotalAvailable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;The total number available. This number may not be 100% accurate and all these results may not be accessible.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The number will become more accurate once you move to the end of the resultset.&lt;/p&gt;
&lt;p&gt;Be warned...&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=11544" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Search" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Search/default.aspx" /></entry><entry><title>Showing attachments in a Content Query Webpart</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/12/10/showing-attachments-in-a-content-query-webpart.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/12/10/showing-attachments-in-a-content-query-webpart.aspx</id><published>2007-12-10T09:03:00Z</published><updated>2007-12-10T09:03:00Z</updated><content type="html">
&lt;p&gt;Not quite that complicated, but I&amp;#39;m it sure can save you (and myself next time) some time.&lt;/p&gt;
&lt;p&gt;To show the attachment paperclip in your CQWP, just add this section to the xsl:template in the ItemStyle.xsl:&lt;/p&gt;
&lt;p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:choose&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:when&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@Attachments=&amp;#39;1&amp;#39; or msxsl:string-compare(string(@Attachments),&amp;#39;Yes&amp;#39;,&amp;#39;&amp;#39;,&amp;#39;i&amp;#39;)=0 or msxsl:string-compare(string(@Attachments),&amp;#39;N0&amp;#39;,&amp;#39;&amp;#39;,&amp;#39;i&amp;#39;)=0&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;_layouts/images/attach.gif&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;alt&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Attachment&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:when&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:otherwise&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;&amp;lt;!-- message no attachments attached --&amp;gt;&lt;/span&gt;
       &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:otherwise&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:choose&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Secondly, export the webpart and add the Attachment field to the commonviewfields:&lt;/p&gt;
&lt;p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CommonViewFields&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Attachments,Attachments;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9658" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="CQWP" scheme="http://www.sharepointblogs.com/koning53/archive/tags/CQWP/default.aspx" /></entry><entry><title>Passed my first SharePoint MCP exam!! </title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/12/04/passed-my-first-sharepoint-mcp-exam.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/12/04/passed-my-first-sharepoint-mcp-exam.aspx</id><published>2007-12-04T11:27:00Z</published><updated>2007-12-04T11:27:00Z</updated><content type="html">&lt;p&gt;This morning I did the 70-630 exam: &amp;#39;Microsoft Office SharePoint Server 2007, Configuring&amp;#39;.&lt;/p&gt;
&lt;p&gt;Although the specific training for this exam was cancelled&amp;nbsp;last week I&amp;#39;ve passed! A lot of the questions are in fact pretty logical once you&amp;#39;ve got some Sharepoint experience. Everything&amp;#39;s multiple choice, so determining the options that would definitely be wrong will leave you with a 50-50 change. You&amp;#39;ll get 51 questions, ranging from Administrating MOSS 2007, to Excel Services and Search (this is not the complete list!).&amp;nbsp;Just to know;&amp;nbsp;there&amp;#39;s no in-depth WSS knowledge needed. &lt;/p&gt;
&lt;p&gt;As preparation I&amp;#39;ve read Patrick Tisseghems book: &lt;strong&gt;&lt;font face="Verdana" color="#003366"&gt;&lt;a class="" href="http://www.microsoft.com/MSPress/books/10472.aspx" target="_blank"&gt;Inside Microsoft® Office SharePoint® Server 2007&lt;/a&gt;. &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;Beside that I&amp;#39;ve worked through the Transcender and Pass4sure training exams. This combination is more than enough to pass. &lt;/p&gt;
&lt;p&gt;Next exam will be Configuring WSS, after that the&amp;nbsp;2 development certifications are left. &lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9435" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Certification" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Certification/default.aspx" /><category term="70-630" scheme="http://www.sharepointblogs.com/koning53/archive/tags/70-630/default.aspx" /></entry><entry><title>Adding querystring parameters to a SPNavigationNode</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/11/26/adding-querystring-parameters-to-a-spnavigationnode.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/11/26/adding-querystring-parameters-to-a-spnavigationnode.aspx</id><published>2007-11-26T12:59:00Z</published><updated>2007-11-26T12:59:00Z</updated><content type="html">&lt;p&gt;I&amp;#39;ve had a hard time figuring out how to programatically add or edit Querystring parameters to a SPNavigationNode. The SPNavigationNode is the internal type used to build the current (left) and global (top) WSS&amp;nbsp;navigation.&lt;br /&gt;&lt;br /&gt;It seems pretty straight forward to pass the full url to the new SPNavigationNode constructor, but the querystring part gets removed by the SharePoint API.&lt;br /&gt;&lt;br /&gt;It turns out the Querystring part is saved in a separated propertybag. &lt;/p&gt;
&lt;p&gt;This examples&amp;nbsp;retrieves an existing&amp;nbsp;link and adds a Querysstring:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;font color="#6d80b5"&gt;SPNavigationNodeCollection nodes = PublishingWeb.GetPublishingWeb(spweb).CurrentNavigationNodes;
node = nodes[4];

&lt;span class="rem"&gt;// Remove the UrlQueryString property because updates are not persisted &lt;/span&gt;
&lt;span class="kwrd"&gt;if&lt;/span&gt; (node.Properties.ContainsKey(&lt;span class="str"&gt;&amp;quot;UrlQueryString&amp;quot;&lt;/span&gt;))
    node.Properties.Remove(&lt;span class="str"&gt;&amp;quot;UrlQueryString&amp;quot;&lt;/span&gt;);

node.Properties.Add(&lt;span class="str"&gt;&amp;quot;UrlQueryString&amp;quot;&lt;/span&gt;, &amp;quot;param1=foo&amp;amp;param2=foo&amp;quot;);
node.Update();&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;Note that you should not add the &amp;quot;?&amp;quot; at the beginning of the Querystring. 
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9123" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>Error in ContentByQueryWebPart when calling from a non-web context</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/11/26/bug-in-contentbyquerywebpart-when-opened-in-a-non-web-context.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/11/26/bug-in-contentbyquerywebpart-when-opened-in-a-non-web-context.aspx</id><published>2007-11-26T09:15:00Z</published><updated>2007-11-26T09:15:00Z</updated><content type="html">&lt;p&gt;Just run in some strange behaviour of the &lt;font color="#0000ff" size="2"&gt;Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart&lt;/font&gt;, better known as the Content Query Webpart.&lt;/p&gt;
&lt;p&gt;I want to update a large number of these webparts, so I&amp;#39;ve made the following console app&amp;nbsp;doing the work for me: &lt;/p&gt;&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPFile file &lt;span class="kwrd"&gt;in&lt;/span&gt; [spweb].Files)
    {  
        &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPLimitedWebPartManager wpMan = file.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared))
        {

            SPLimitedWebPartCollection wpColl = wpMan.WebParts;
            &lt;span class="kwrd"&gt;int&lt;/span&gt; numberOfWebparts = wpColl.Count;

            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfWebparts; i++)
            {
                System.Web.UI.WebControls.WebParts.WebPart wp = (System.Web.UI.WebControls.WebParts.WebPart)wpColl&lt;img src="http://www.sharepointblogs.com/emoticons/emotion-55.gif" alt="Idea" /&gt;;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (wp &lt;span class="kwrd"&gt;is&lt;/span&gt; Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart)
                {
                    ((ContentByQueryWebPart)wp).ListGuid = [spweb].Lists[((ContentByQueryWebPart)wp).ListName].ID.ToString();
                    ((ContentByQueryWebPart)wp).WebUrl = [spweb].ServerRelativeUrl;
                    wpMan.SaveChanges(wp);
                }

                wp.Dispose();
            }

            wpMan.Web.Dispose(); // dispose manual because of a memoryleak in SPWebpartManager (&lt;a href="http://blog.ofonesandzeros.com/2007/06/05/splimitedwebpartmanager-memory-leak)"&gt;http://blog.ofonesandzeros.com/2007/06/05/splimitedwebpartmanager-memory-leak)
&lt;/a&gt;        }
    }&lt;/pre&gt;
&lt;p&gt;This code loops through all webparts on all&amp;nbsp;pages, checks to see if the webpart is a ContentByQueryWebpart and updates some properties. This works, as long as you don&amp;#39;t change the &lt;font color="#0000ff" size="2"&gt;HeaderXslLink, ItemXslLink or MainXslLink &lt;/font&gt;in properties the .webpart file!&lt;/p&gt;
&lt;p&gt;As soon as you change one of those the webpartmanager will retrun a Microsoft.SharePoint.WebPartPages.ErrorWebPart. Why? Because of the following code&amp;nbsp;is called&amp;nbsp;by the specific properties&amp;nbsp;of the&amp;nbsp;ContentByQueryWebpart (actually its parent, the CmsDataFormWebpart):&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; MakeServerRelativeUrl(&lt;span class="kwrd"&gt;string&lt;/span&gt; url)
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; concatenateUrls(SPContext.GetContext(HttpContext.Current).Site.ServerRelativeUrl, url);
}&lt;/pre&gt;The webpart will always call the SPContext, but from a console application there is no web-context. Therefore when initiating the ContentByQueryWebpart, it will always thow an exception like:&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;em&gt;&amp;quot;An error occured while setting the value of this property: Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart:MainXslLink - Exception has been thrown by the target of an invocation.&amp;quot;&lt;/em&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;This can be seen as a design error, since all webparts should be able to at least expose themselves through a WebpartManager. Once the real rendering is done calls to the SPContext can be made.
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9116" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>Content Types: Title Column Rename Issue</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/11/23/content-types-title-column-rename-issue.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/11/23/content-types-title-column-rename-issue.aspx</id><published>2007-11-23T23:00:00Z</published><updated>2007-11-23T23:00:00Z</updated><content type="html">&lt;p&gt;Once you&amp;#39;ve (by accident of course) changed the name of the title column, there seems to be no way back. &lt;/p&gt;
&lt;p&gt;You cannot rename the column back to Title because SharePoint tells you this is a reserved name for a column. There are some solutions on the web which require coding or database access. I found that by using the &lt;a class="" href="http://www.sharepointblogs.com/keutmann/archive/2007/01/27/sharepoint-manager-2007-update.aspx" target="_blank"&gt;SharePoint Manager 2007&lt;/a&gt; tool you can easily rename the column. No coding or SQL skills required. &lt;br /&gt;&lt;br /&gt;Just browse to your site collection, open the Site Columns, look for your renamed column and change the name property back to Title.&lt;/p&gt;
&lt;p&gt;Please note that you need to&amp;nbsp;enable the &amp;#39;full object model&amp;#39; mode:&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH:408px;HEIGHT:274px;" height="274" src="http://www.keutmann.dk/sharepointblog/omview.jpg" width="408" border="0" alt="" /&gt;&lt;br /&gt;&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9085" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="SharePoint Manager 2007" scheme="http://www.sharepointblogs.com/koning53/archive/tags/SharePoint+Manager+2007/default.aspx" /></entry><entry><title>Content deployment issue: Changes to "List View" Web Part are not retained </title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/11/23/content-deployment-issue-changes-to-quot-list-view-quot-web-part-are-not-retained.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/11/23/content-deployment-issue-changes-to-quot-list-view-quot-web-part-are-not-retained.aspx</id><published>2007-11-23T22:27:00Z</published><updated>2007-11-23T22:27:00Z</updated><content type="html">&lt;p&gt;This might be a very unusual case:&amp;nbsp;we have&amp;nbsp;one single&amp;nbsp;teamsite which acts like a model for +20.000 other teamsites. &lt;/p&gt;
&lt;p&gt;Changes made to this teamsite are copied to the others by using the Import-Export functionality of the WSS API. Because&amp;nbsp;we do not want the actual content to be copied we only copy certain files; to simplify, lets say we only copy the default.aspx page. &lt;/p&gt;
&lt;p&gt;The list and library structure is maintained through content types, every site has the same list and library structure. In the future new lists can be deployed with&amp;nbsp;Content Deployment (import-export) or by script. &lt;/p&gt;
&lt;p&gt;After we run the import (so&amp;nbsp;the default.aspx pages in all sites are updated) everything looks all right; except for the list-view webparts. Although they are nicely attached to the local lists of their new environment, the &amp;#39;changes&amp;#39; made the the views and toolbars are lost. &lt;/p&gt;
&lt;p&gt;On one hand I can imagine this is a unsupported scenario; you cannot guarantee the list even exists in the target site.&lt;br /&gt;On the other hand this issue is very similar to the &amp;quot;&lt;em&gt;Changes that you make to the &amp;#39;List View&amp;#39; Web Part are not retained after you save the site as a template in Windows SharePoint Services 3.0&lt;/em&gt;&amp;quot; issue: &lt;a href="http://support.microsoft.com/kb/926284"&gt;http://support.microsoft.com/kb/926284&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I can&amp;#39;t tell yet if this is really a bug. But I can tell you our workaround: use Content Query Webparts. This also has a big advantage of centrally managing the layout, which in this situation is a big plus.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9084" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author></entry><entry><title>The Enhanced Content Query Webpart</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/11/23/the-enhanced-content-query-webpart.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/11/23/the-enhanced-content-query-webpart.aspx</id><published>2007-11-23T22:19:00Z</published><updated>2007-11-23T22:19:00Z</updated><content type="html">&lt;p&gt;Just some free advertisement of the very cool and totaly free &lt;a class="" href="http://www.codeplex.com/ECQWP" target="_blank"&gt;Enhanced Content Query Webpart&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;It does exactly everything the standard CQWP does, but it adds some cool features like:&lt;br /&gt;- A toolbar for lists&lt;br /&gt;- A content menu for documents&lt;br /&gt;- Table layout&lt;br /&gt;- Direct editing of the most-used webpart properties directly in the toolpane&lt;br /&gt;- A code-layer which you can extent to your own needs. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ECQWP&amp;amp;DownloadId=13564" alt="" /&gt;&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9083" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Enhanced Content Query Webpart" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Enhanced+Content+Query+Webpart/default.aspx" /></entry><entry><title>Violation of PRIMARY KEY constraint 'PK__#ExportObjects____XXXXXXXX' </title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/11/23/violation-of-primary-key-constraint-pk-exportobjects-xxxxxxxx.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/11/23/violation-of-primary-key-constraint-pk-exportobjects-xxxxxxxx.aspx</id><published>2007-11-23T22:08:00Z</published><updated>2007-11-23T22:08:00Z</updated><content type="html">&lt;p&gt;Not a nice title, not a nice error as well... &lt;/p&gt;
&lt;p&gt;I encountered this error while&amp;nbsp;trying export/import a file through the object model.&lt;/p&gt;
&lt;p&gt;Searching the net I found some posts suggesting this could be caused by the versioning&amp;nbsp;in the&amp;nbsp;Style Library. As soon as you&amp;#39;ve checked-in multiple major versions of a file the error &amp;#39;could&amp;#39; occur.&amp;nbsp;But that had to do with Incremental deployments. &lt;br /&gt;MS has a hotfix for that case: &lt;a href="http://support.microsoft.com/kb/936867"&gt;&lt;font face="Verdana" color="#800080"&gt;http://support.microsoft.com/kb/936867&lt;/font&gt;&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;But I was not doing any Incremental deployments, I just wanted to export one single file from a site. Also, I&amp;nbsp;did not have the time to request, wait and install the Hotfix so I tried something else:&lt;br /&gt;&lt;strong&gt;Delete all content from the Style Library&lt;/strong&gt;, and it worked. &lt;/p&gt;
&lt;p&gt;Just a cut-and-paste everything to your local machine, refresh the browser (just to be sure)&amp;nbsp;and put everything back in place. Of course you will lose any version data, but thats a fair trade-off. &lt;/p&gt;
&lt;p&gt;The issue is also related to the Site Image gallery and other site-level-galleries, so you might want to try resetting them as well.&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=9076" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="Content Deployment" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Content+Deployment/default.aspx" /></entry><entry><title>Copying Infopath VSTO projects</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/10/17/copying-infopath-vsto-projects.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/10/17/copying-infopath-vsto-projects.aspx</id><published>2007-10-17T20:12:00Z</published><updated>2007-10-17T20:12:00Z</updated><content type="html">&lt;p&gt;Copying VSTO Infopath project can save you a lot of time, but it can also bring you a lot of problems.&lt;/p&gt;
&lt;p&gt;Follow these steps to avoid problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. Copy the project directory, change the name and add the new project to your solution&lt;/li&gt;
&lt;li&gt;2. Rename the project (from VS)&lt;/li&gt;
&lt;li&gt;3. Open the &lt;u&gt;manifest.xsf&lt;/u&gt; in the XML Editor (Open with..)&lt;/li&gt;
&lt;li&gt;4. Update the &lt;u&gt;name&lt;/u&gt; attribute in the &lt;u&gt;xsf:xDocumentClass&lt;/u&gt; element&lt;/li&gt;
&lt;li&gt;5. Update the &lt;u&gt;projectpath&lt;/u&gt; attribute in the &lt;u&gt;xsf2:managedCode&lt;/u&gt; element&lt;/li&gt;
&lt;li&gt;6. Update the &lt;u&gt;initialDocumentName&lt;/u&gt; attribute in the &lt;u&gt;xsf:initialXmlDocument&lt;/u&gt; element&lt;/li&gt;
&lt;li&gt;7. Open &lt;u&gt;template.xml&lt;/u&gt; and update the name attribute in the &lt;u&gt;mso-infoPathSolution&lt;/u&gt; element&lt;/li&gt;
&lt;li&gt;8. Update the &lt;u&gt;AssemblyProduct&lt;/u&gt; in &lt;u&gt;AssemblyInfo.cs&lt;br /&gt;&lt;/u&gt;&lt;br /&gt;[Optional]&lt;/li&gt;
&lt;li&gt;9. [optional from here] Rename the assemblies and namespaces&lt;/li&gt;
&lt;li&gt;10. Update the Assembly name and the Default namespace in de project properties &lt;/li&gt;
&lt;li&gt;11. Update the Namespace in your code (note the partial classes!)&lt;/li&gt;
&lt;li&gt;12. Delete old dll&amp;#39;s and debug files from your project&lt;/li&gt;
&lt;li&gt;13. Open &lt;u&gt;manifest.xsf&lt;/u&gt; in de XML Editor (Open with..)&lt;/li&gt;
&lt;li&gt;14. Delete the &lt;u&gt;xsf:file&lt;/u&gt; elements to the old dll en debug files&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;15. Rebuild your project&lt;/li&gt;&lt;/ul&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=7460" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="VSTO" scheme="http://www.sharepointblogs.com/koning53/archive/tags/VSTO/default.aspx" /><category term="Infopath" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Infopath/default.aspx" /></entry><entry><title>Infopath VSTO post-build steps</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/10/16/infopath-vsto-post-build-steps.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/10/16/infopath-vsto-post-build-steps.aspx</id><published>2007-10-16T19:28:00Z</published><updated>2007-10-16T19:28:00Z</updated><content type="html">&lt;p&gt;Also tired of running&amp;nbsp;the publish form wizard every time? Especially when you are developing a larger number of forms this can be a frustrating and time consuming task. &lt;/p&gt;
&lt;p&gt;This is a description of the post-build steps for automatically building and deploying the forms:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Copy the files to a temp dir (Visual Studio creates a lock on the files)&lt;/strong&gt;&lt;br /&gt;xcopy &amp;quot;$(ProjectDir)Infopath Form Template\*&amp;quot; &amp;quot;c:\temp\$(ProjectName)\&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Delete Myschema.xsx - this is not part of the form template&lt;br /&gt;&lt;/strong&gt;del /Q &amp;quot;c:\temp\$(ProjectName)\*.xsx&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. Put the folder in a cab file (&lt;/strong&gt;&lt;a href="http://www3.sympatico.ca/lazimute/CABTOOL_SETUP.ZIP"&gt;&lt;strong&gt;download&amp;nbsp;the CAB&amp;nbsp;tool here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;)&lt;br /&gt;&lt;/strong&gt;cabtool &amp;quot;c:\temp\$(ProjectName)&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4. Rename the CAB to XSN&lt;/strong&gt;&lt;br /&gt;ren &amp;quot;c:\temp\$(ProjectName).cab&amp;quot; &amp;quot;$(ProjectName).xsn&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5. Deactivate the previous edition of the form&lt;br /&gt;&lt;/strong&gt;stsadm -o deactivateformtemplate -url &lt;a href="http://yoursite/"&gt;http://yoursite&lt;/a&gt; -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6. Remove the previous version of the form&lt;br /&gt;&lt;/strong&gt;stsadm -o removeformtemplate -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. Kick the job service (saves you the wait)&lt;br /&gt;&lt;/strong&gt;stsadm -o execadmsvcjobs&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. Upload the new template&lt;/strong&gt; &lt;br /&gt;stsadm -o uploadformtemplate -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9. Kick the job service (again)&lt;br /&gt;&lt;/strong&gt;stsadm -o execadmsvcjobs&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10. Activate the new&amp;nbsp;form template&lt;/strong&gt; &lt;br /&gt;stsadm -o activateformtemplate -url &lt;a href="http://yoursite/"&gt;http://yoursite&lt;/a&gt; -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11. Clean&amp;nbsp;up the mesh&lt;/strong&gt;&amp;nbsp;&lt;br /&gt;del /Q &amp;quot;c:\temp\$(ProjectName)&amp;quot;&lt;br /&gt;del /Q &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;rmdir &amp;quot;c:\temp\$(ProjectName)&amp;quot; /q /s&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;This will result in:&lt;/strong&gt;&lt;br /&gt;xcopy &amp;quot;$(ProjectDir)Infopath Form Template\*&amp;quot; &amp;quot;c:\temp\$(ProjectName)\&amp;quot;&lt;br /&gt;del /Q &amp;quot;c:\temp\$(ProjectName)\*.xsx&amp;quot;&lt;br /&gt;cabtool c:\temp\$(ProjectName)&lt;br /&gt;ren &amp;quot;c:\temp\$(ProjectName).cab&amp;quot; &amp;quot;$(ProjectName).xsn&amp;quot;&lt;br /&gt;stsadm -o deactivateformtemplate -url &lt;a href="http://yoursite/"&gt;http://yoursite&lt;/a&gt; -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;stsadm -o deactivateformtemplate -url &lt;a href="http://theirsite/"&gt;http://theirsite&lt;/a&gt; -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;stsadm -o removeformtemplate -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;stsadm -o execadmsvcjobs&lt;br /&gt;stsadm -o uploadformtemplate -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;stsadm -o execadmsvcjobs&lt;br /&gt;stsadm -o activateformtemplate -url &lt;a href="http://yoursite/"&gt;http://yoursite&lt;/a&gt; -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;stsadm -o activateformtemplate -url &lt;a href="http://theirsite/"&gt;http://theirsite&lt;/a&gt; -filename &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;del /Q &amp;quot;c:\temp\$(ProjectName)&amp;quot;&lt;br /&gt;del /Q &amp;quot;c:\temp\$(ProjectName).xsn&amp;quot;&lt;br /&gt;rmdir &amp;quot;c:\temp\$(ProjectName)&amp;quot; /q /s&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Additional tip:&lt;/strong&gt; &lt;br /&gt;Once you switch from a Debug build to the Release build you should:&lt;br /&gt;-&amp;nbsp;manually remove the pdb files from your manifest file&lt;br /&gt;- remove the pdb files from your project directory&lt;br /&gt;&lt;/p&gt;
			&lt;hr&gt;&lt;span style="font-size:10pt;"&gt;Posted on &lt;a href="http://www.sharepointblogs.com/"&gt;SharePoint Blogs&lt;/a&gt;&lt;/span&gt;
		  &lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=7410" width="1" height="1"&gt;</content><author><name>koning53</name><uri>http://www.sharepointblogs.com/members/koning53.aspx</uri></author><category term="VSTO" scheme="http://www.sharepointblogs.com/koning53/archive/tags/VSTO/default.aspx" /><category term="Post-Build steps" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Post-Build+steps/default.aspx" /><category term="Infopath" scheme="http://www.sharepointblogs.com/koning53/archive/tags/Infopath/default.aspx" /></entry><entry><title>Avoiding performance issues in Infopath Forms Servers</title><link rel="alternate" type="text/html" href="http://www.sharepointblogs.com/koning53/archive/2007/10/15/avoiding-performance-issues-in-infopath-forms-servers.aspx" /><id>http://www.sharepointblogs.com/koning53/archive/2007/10/15/avoiding-performance-issues-in-infopath-forms-servers.aspx</id><published>2007-10-15T21:39:00Z</published><updated>2007-10-15T21:39:00Z</updated><content type="html">&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Recently I&amp;#39;ve been doing a lot with IFS. It seems like the ideal solution to create and present forms, far more capable than regular SharePoint list forms and far less complicated than coding forms in &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Visual Studio. &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;But there are some caveats to this beauty, which begin to appear just after you&amp;#39;ve just got yourself and your client in a good mood by finding all of your requirements covered by Infopath: Performance.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;We&amp;#39;ve ran into a number of problems after publishing some more &amp;#39;complex&amp;#39; forms, these are some examples:&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;- A repeating section does not persist more than 9 items&lt;br /&gt;- IE&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;crashes while filling out the form, totaly random&lt;br /&gt;- Rendering the form takes &amp;gt;60 seconds, taking 99% CPU and +600mb RAM&lt;br /&gt;- Uploading the form results in a error (both Central Admin and STSADM)&lt;br /&gt;- The design checker times-out, InfoPath cannot open the form&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;br /&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Most of these problems occur at the browser. It&amp;#39;s interesting to note that the server does not have any trouble serving the forms. Rendering the form in the browser is done fully dynamically. With complex and large forms this can lead to bad performance and functional issues. Uploading complex forms can take up to 30 minutes (depending on the time-outs you&amp;#39;ve defined in SharePoint). &lt;br /&gt;&lt;br /&gt;This is a list of best practices to keep you in control of performance. There&amp;#39;s definitely not one golden solution, you should look for a balance throughout your form.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1. Use IE7 instead of IE6&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;IE7 used a new scripting engine, which is far more efficient with resources. While rendering forms this could save you hundreds of mb&amp;#39;s and up to 50% CPU. In practice forms will render up to 10x faster in IE7.&lt;br style="mso-special-character:line-break;" /&gt;&lt;br style="mso-special-character:line-break;" /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2. Deploy the hotfix for conditional formatting issues (must have!)&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Conditional visibility logic has some known performance problems.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;A hotfix is available &lt;a class="" title="http://support.microsoft.com/kb/937206" href="http://support.microsoft.com/kb/937206"&gt;http://support.microsoft.com/kb/937206&lt;/a&gt;, which is manifested in a modified 250K initial download (de core.js) when accessing Forms Services the first time.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The performance issue is related to the IE Script Engine and occurs at the browser level, not server-side.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I&amp;#39;ve tested a form before and after installing the hotfix:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;
&lt;table class="MsoTableGrid" style="BORDER-RIGHT:medium none;BORDER-TOP:medium none;MARGIN:auto auto auto 36pt;BORDER-LEFT:medium none;BORDER-BOTTOM:medium none;BORDER-COLLAPSE:collapse;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" cellspacing="0" cellpadding="0" class="MsoTableGrid"&gt;

&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:black 1pt solid;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:170.4pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;" colspan="2"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;IE6.0*&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:170.45pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;" colspan="2"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;IE7.0*&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:1;"&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:black 1pt solid;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Without hotfix&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;With hotfix&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Without &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;hotfix&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;With hotfix&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:2;"&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:black 1pt solid;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;"&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-add-space:auto;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Rendering&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;65 sec&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;15 sec&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;14 sec&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;13 sec&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:3;"&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:black 1pt solid;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;CPU Load&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;99%&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;99%&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;50%&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;50%&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:4;"&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:black 1pt solid;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;RAM&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;60mb&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;30mb&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.2pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;68mb&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#d4d0c8;WIDTH:85.25pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-left-alt:solid black .5pt;mso-border-left-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;mso-border-bottom-themecolor:text1;mso-border-right-themecolor:text1;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;40mb&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:black 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#d4d0c8;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:black 1pt solid;WIDTH:426.1pt;PADDING-TOP:0cm;BORDER-BOTTOM:black 1pt solid;BACKGROUND-COLOR:transparent;mso-border-alt:solid black .5pt;mso-border-themecolor:text1;mso-border-top-alt:solid black .5pt;mso-border-top-themecolor:text1;" colspan="5"&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0cm 0cm 0pt 36pt;LINE-HEIGHT:normal;TEXT-ALIGN:right;mso-add-space:auto;" align="right"&gt;&lt;span style="FONT-SIZE:8pt;mso-bidi-font-size:11.0pt;"&gt;&lt;font face="Calibri"&gt;* IE6 en IE7 installed on different hardware, do not compare the results between browsers&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;br /&gt;3. Avoid nested elements&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Nesting sections, tables, optional sections and especially repeating sections/tables could lead to a extreme rendering time at the client.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;4. Use multiple views&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Try to spread controls over multiple views. This especially counts for complex controls like:&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;- Rich text editors&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;- Repeating sections/tables&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;- Drop down boxes&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;5. Minimize the numer of Rich text editors&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Try to use regular textfields if possible&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;6. Avoid excessive use of validation/rules/conditional formatting&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Try to prevent unnecessary roundtripping between the form browser and the server.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;There are several round trip switches available on controls.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;See the Browser Forms Tab on a given control to expose finer-grained options over the behavior.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Note what the warning messages you receive say about the form&amp;#39;s potential round trip behavior when admin deploying the form.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It will tell you when multiple server roundtrips will be likely to occur when using your form.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;7. Run Forms Services on a sererate server&lt;br /&gt;&lt;/font&gt;&lt;/font&