<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://laflour.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2flaflour.spaces.live.com%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Michael's Coding Den</title><description>Applied Web: SharePoint, ASP.NET and AJAX</description><link>http://laflour.spaces.live.com/</link><language>en-US</language><pubDate>Wed, 08 Oct 2008 03:53:23 GMT</pubDate><lastBuildDate>Wed, 08 Oct 2008 03:53:23 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>8463920662804772276</live:id><live:alias>laflour</live:alias></live:identity><image><title>Michael's Coding Den</title><url>http://byfiles.storage.live.com/y1pdnBGMnlH34dcrIJwukTzAlpAzTe_oEBLKNt9NV8-D44j-_T7xmcgsydenH-HIG-r</url><link>http://laflour.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>SharePoint Mirroring</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1245.entry</link><description>&lt;p&gt;There are number of posts and documents about how to setup mirroring of SharePoint content DB, but when I started my mirroring I stumbled over number issues, which I probably missed in documentation and which took some of my time to find out what was wrong. So in this post I’d like summarize all important parts of setting SharePoint mirroring.  &lt;p&gt;Refer to detailed description in the end of this post to get the initial understanding. &lt;ol&gt; &lt;li&gt;Prepare all you SharePoint Content databases for recovery. Use “&lt;font face=Courier&gt;&lt;strong&gt;ALTER Database &amp;lt;databasename&amp;gt; SET RECOVERY FULL;&lt;/strong&gt;&lt;/font&gt;“ SQL command against all databases which will participate in backup and mirroring.  &lt;li&gt;(Optionally) Prepare content databases to be detached from web application, because in future you could rename it. To do this run “&lt;strong&gt;&lt;font face="Courier New"&gt;stsadm -o preparetomove -contentdb SQLSERVER:DBNAME –site &amp;lt;url&amp;gt;&lt;/font&gt;&lt;/strong&gt;”.  &lt;li&gt;Make the SharePoint farm backup, and restore it on your Disaster Recovery (DR) box. Use OOTB backup/restore – Central Admin –&amp;gt; Operations –&amp;gt; Backup. The reason to restore SharePoint on DR box instead of straight mirroring is to have everything set and configured absolutely the same as on production box, to have minimum restoration time.  &lt;li&gt;After you restore your instance on DR box close SharePoint Central Admin. You don’t need it anymore :)  &lt;li&gt;Make &lt;em&gt;&lt;strong&gt;SQL backup &lt;/strong&gt;&lt;/em&gt;of your SharePoint DBs and their LOGs from production box, which will be mirrored. Usually only content databases are mirrored - search and other stuff can be missed, because it’s not so vital as content DB. I had number issues with making SQL backups and restore DBs on DR box, after you restored your new instance, so, I found more convenient to provide new copy of all DBs specially for mirroring. Make this backup with SQL commands “&lt;strong&gt;&lt;font face="Courier New"&gt;BACKUP DATABASE/LOG&lt;/font&gt;&lt;/strong&gt;” and copy those files to DR box.  &lt;li&gt;Go to SQL Management Studio and delete all SharePoint DB which you want to mirror.  &lt;li&gt;Restore your databases with “NORECOVERY” attribute. UI doesn’t help you, so we are using SQL command “&lt;strong&gt;&lt;font face="Courier New"&gt;RESTORE DATABASE … NORECOVERY …&lt;/font&gt;&lt;/strong&gt;” for this.  &lt;li&gt;After restoration completed you will see your DB with new icon and having “(recovering…)” status. Now time to apply the logs with the same “NORECOVERY” attribute and the similar command “&lt;strong&gt;&lt;font face="Courier New"&gt;RESTORE LOG … NORECOVERY…&lt;/font&gt;&lt;/strong&gt;”  &lt;li&gt;Wait a couple of minutes, allowing SQL server to restore some stuff.  &lt;li&gt;Now connect to Production SQL instance from DR box, select the database you just restored in DR, and right-mouse clicking, selecting tools-&amp;gt;mirroring. Mirroring Wizards will start. Go through all steps. Ignore mirroring endpoints name difference. But pay attention on “encryption” settings on principal and on mirror boxes – they must be the same. Use next command to change these settings “&lt;strong&gt;&lt;font face="Courier New"&gt;ALTER ENDPOINT Mirroring FOR DATA_MIRRORING (ROLE = PARTNER, ENCRYPTION = SUPPORTED)&lt;/font&gt;&lt;/strong&gt;” to be the same among principal and mirror boxes.  &lt;li&gt;Activate mirroring in the end of Mirroring Wizard, and you DB status will changed to “principal”/”mirroring”.  &lt;li&gt;You might have security error, saying that your DR box can’t connect to partner (production box). Go to SQL again and run the following “&lt;strong&gt;&lt;font face="Courier New"&gt;alter database myDatabase set partner = 'TCP://abc.domain.net:7024';&lt;/font&gt;&lt;/strong&gt;”  &lt;li&gt;Repeat everything from step 6 to 11 for all SharePoint databases.  &lt;li&gt;To switch to DR box and start using mirrored databases, you need to go to mirroring window again and press “FAILOVER” button. This will switch your databases and DR boxes will be active. Without failover you site on DR box won’t be accessible.&lt;/ol&gt; &lt;p&gt;  &lt;p&gt;Troubleshooting: &lt;p&gt;1) User SQL Management Studio, right mouse click on DB, Tasks-&amp;gt;Launch Database Mirroring Monitor to check the status of your mirroring databases. &lt;p&gt;2) You can have the following error “Cannot open database &amp;quot;&amp;lt;…&amp;gt;&amp;quot; requested by the login. The login failed. Login failed for user '….'.” when you try to use “stsadm –o addcontentdb …”. This happens when you DB not in failover status. You need to make your DR failovered (active) and only then add content DB  &lt;p&gt;  &lt;p&gt;That’s all. I hope this post will save some of your time when you start your SharePoint mirroring. &lt;p&gt;  &lt;p&gt;More reading: &lt;ul&gt; &lt;li&gt;&lt;a title="http://alan328.com/SQL2005_Database_Mirroring_Tutorial.aspx" href="http://alan328.com/SQL2005_Database_Mirroring_Tutorial.aspx"&gt;SQL 2005 Database Mirroring Tutorial&lt;/a&gt;  &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms189127.aspx"&gt;Troubleshooting Database Mirroring Deployment&lt;/a&gt;  &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc262910.aspx"&gt;Whitepaper - Using database mirroring&lt;/a&gt;  &lt;li&gt;&lt;a title="http://blogs.technet.com/wbaer/archive/2007/04/23/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-1-introduction-overview-and-basics.aspx" href="http://blogs.technet.com/wbaer/archive/2007/04/23/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-1-introduction-overview-and-basics.aspx"&gt;http://blogs.technet.com/wbaer/archive/2007/04/23/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-1-introduction-overview-and-basics.aspx&lt;/a&gt;  &lt;li&gt;&lt;a title="http://blogs.technet.com/wbaer/archive/2007/05/25/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-2-configuration.aspx" href="http://blogs.technet.com/wbaer/archive/2007/05/25/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-2-configuration.aspx"&gt;http://blogs.technet.com/wbaer/archive/2007/05/25/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-2-configuration.aspx&lt;/a&gt;  &lt;li&gt;&lt;a title="http://blogs.technet.com/wbaer/archive/2007/08/01/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-3-failover.aspx" href="http://blogs.technet.com/wbaer/archive/2007/08/01/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-3-failover.aspx"&gt;http://blogs.technet.com/wbaer/archive/2007/08/01/sql-server-2005-database-mirroring-and-windows-sharepoint-services-3-0-microsoft-office-sharepoint-server-2007-part-3-failover.aspx&lt;/a&gt;&lt;/ul&gt; &lt;p&gt;  &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/09/28/sharepoint-mirroring.aspx"&gt;SharePoint Mirroring&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+SharePoint+Mirroring&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1245.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1245.entry</guid><pubDate>Sun, 28 Sep 2008 12:02:14 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1245/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1245.entry#comment</wfw:comment><dcterms:modified>2008-09-29T13:48:55Z</dcterms:modified></item><item><title>Starting SharePoint solution and planning your documentation</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1244.entry</link><description>&lt;p&gt;When a new SharePoint project is about to start I use the following steps to design and plan solution &lt;ol&gt; &lt;li&gt;Creating Vision/Scope  &lt;li&gt;Site structure and Navigation  &lt;li&gt;Use Case Scenarios  &lt;li&gt;Data Flow scenario  &lt;li&gt;Content location  &lt;li&gt;Site Collection Boundaries  &lt;li&gt;List of required features and site definitions  &lt;li&gt;Security: Roles and Permissions  &lt;li&gt;Page Wireframes: layouts and content types  &lt;li&gt;Targeting  &lt;li&gt;Search strategy (scopes, authoritative, best bets)  &lt;li&gt;Infrastructure Plan  &lt;li&gt;Disaster Recovery  &lt;li&gt;Deployment plan&lt;/ol&gt; &lt;ol&gt;&lt;/ol&gt; &lt;p&gt;Take into account that SharePoint SDLC differs from standard development, and not all projects require those steps.  &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/09/28/starting-sharepoint-solution-and-planning-your-documentation.aspx"&gt;Starting SharePoint solution and planning your documentation&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Starting+SharePoint+solution+and+planning+your+documentation&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1244.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1244.entry</guid><pubDate>Sun, 28 Sep 2008 10:56:43 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1244/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1244.entry#comment</wfw:comment><dcterms:modified>2008-10-05T12:57:20Z</dcterms:modified></item><item><title>MS officially supports SharePoint virtualized environment</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1242.entry</link><description>&lt;p&gt;Today &lt;a href="http://twitter.com/jthake" target="_blank"&gt;@jthake&lt;/a&gt; posted info about the recent announcement from Microsoft that they finally started to &lt;a href="http://www.sharepointblogs.com/holliday/archive/2008/09/25/vmware-and-sharepoint.aspx" target="_blank"&gt;support “Virtualized SharePoint environment”&lt;/a&gt; for  &lt;ul&gt; &lt;li&gt;Virtual PC  &lt;li&gt;vmWare  &lt;li&gt;Win2k8 hyper-v&lt;/ul&gt; &lt;p&gt;What does it mean for end-users, developers or IT guys?! Nothing.  &lt;p&gt;It mostly the question of taking the official decision for managers, what and where will be deployed. Because in case of any problems Microsoft will help you in troubleshooting, but not for SharePoint under one of virtualized environment. You must had a installation on physical boxes. &lt;p&gt;Now it’s now an issue. They announced support of virtualized SharePoint environments &lt;p&gt;  &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/09/27/ms-officially-supports-sharepoint-virtualized-environment.aspx"&gt;MS officially supports SharePoint virtualized environment&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+MS+officially+supports+SharePoint+virtualized+environment&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1242.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1242.entry</guid><pubDate>Sat, 27 Sep 2008 09:48:48 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1242/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1242.entry#comment</wfw:comment><dcterms:modified>2008-09-27T09:51:03Z</dcterms:modified></item><item><title>SharePoint 2007 migration tips</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1227.entry</link><description>&lt;p&gt;Working of migration of SPS to MOSS 2007 in these days and would like to share my experience about number of small tricks, which really annoys you if you don’t know them, and which could save hours during your next migration  &lt;ol&gt; &lt;li&gt;Remove EXE, MSI, DLL extension from blocked types, because these files could exist in your collection and your can’t export such sites. (I usually remove everything from there)  &lt;li&gt;Check source web.config to migrate all 3&lt;sup&gt;rd&lt;/sup&gt; party Web Parts into new environment (use –haltonwarning in stsadm –o export to find the pages with missed Web Parts and then navigate to source pages to export DWP from there)  &lt;li&gt;Export with –incluseuseonwers attribute to  &lt;li&gt;Change the maximum upload file size: Central admin -&amp;gt;Application management -&amp;gt;Web Application General Settings. Set 250mb for example, or the size of the biggest file  &lt;li&gt;Set yourself as secondary admin(stsadm –o siteowner –url &amp;lt;site&amp;gt; –secondarylogin &amp;lt;user_name&amp;gt;), because export wont work against content if you are not admin on target site collections  &lt;li&gt;Before making export make sure that you are site owner for the sites you are going to export (stsadm –o siteowner –url &amp;lt;site&amp;gt; –secondarylogin &amp;lt;current_account&amp;gt;). Otherwise you can’t create any sub-sites during importing and will get strange errors. &lt;li&gt;Use STSADM –o export with cabsize 1024, otherwise you silently miss some files in your export package if your site size more that 25Mb (default value)&lt;/ol&gt; &lt;p&gt;  &lt;p&gt;Update: be very careful with renaming database, because if you will do it wrong way you DB is completely screwed, and there is no way to return it back. Refer to this document &lt;a href="http://blogs.technet.com/corybu/archive/2007/06/01/detaching-databases-in-moss-2007-environments.aspx"&gt;http://blogs.technet.com/corybu/archive/2007/06/01/detaching-databases-in-moss-2007-environments.aspx&lt;/a&gt; about the right process how to rename database &lt;p&gt;  &lt;p&gt;You are welcome to share your migration tricks which saved your time &lt;p&gt;  &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/09/19/sharepoint-2007-migration-tips.aspx"&gt;SharePoint 2007 migration tips&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+SharePoint+2007+migration+tips&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1227.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1227.entry</guid><pubDate>Fri, 19 Sep 2008 06:12:46 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1227/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1227.entry#comment</wfw:comment><dcterms:modified>2008-10-01T02:49:37Z</dcterms:modified></item><item><title>Farewell to TechEd 2008, Sydney</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1210.entry</link><description>&lt;p&gt;Teched 2008 in Sydney finished. It were amazing 4 days of intensive sessions and parties afterwards.  I attended mostly all SharePoint session about infrastructure, governance and architecture, BizTalk sessions and ASP.NET MVC and LINQ session. The overall impression is high. Not all session were as good as I expected, but SharePoint once where just awesome - Joel Oleson and Michael Noel are just great. Really impressed. &lt;p&gt;Got a lot of new info, which trying to sort now. &lt;p&gt;The locknote was run by MS “futuronist” architect, describing how nowadays communication changes our life. The resume is that - expose everything to “services” and “context based devices” are  our future. &lt;p&gt;Can’t wait the Tech-Ed 2009 in Goldcoast and expecting to deliver my SharePoint presentations at TechEd 2009. &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/09/07/farewell-to-teched-2008-sydney.aspx"&gt;Farewell to TechEd 2008, Sydney&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Farewell+to+TechEd+2008%2c+Sydney&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>General</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1210.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1210.entry</guid><pubDate>Sun, 07 Sep 2008 10:59:36 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1210/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1210.entry#comment</wfw:comment><dcterms:modified>2008-09-07T11:04:50Z</dcterms:modified></item><item><title>Attending TechEd, Australia</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1203.entry</link><description>&lt;p&gt;Going to attend the following TechEd sessions &lt;p&gt;&lt;a href="http://byfiles.storage.msn.com/y1p6f0Zi2ua9JInOOPPJhxk5jcst5TgsgCp6MLni3y9KOeqjBWeMrUu8D7xhFGRDxMVVfExfseprVo?PARTNER=WRITER"&gt;&lt;img title=TechEdsessions style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=584 alt=TechEdsessions src="http://yqdftq.bay.livefilestore.com/y1pTvK8QbJE4lTcDy6VFpPzaM_cSUB-yJlGlCIieAcc3O_3JoS9SifookxVaj87HAnOvBqUr48X4DvC4QqrXEOAyQ?PARTNER=WRITER" width=704 border=0&gt;&lt;/a&gt;  &lt;p&gt;  &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/09/02/attending-teched-australia.aspx"&gt;Attending TechEd, Australia&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Attending+TechEd%2c+Australia&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>General</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1203.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1203.entry</guid><pubDate>Tue, 02 Sep 2008 10:38:34 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1203/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1203.entry#comment</wfw:comment><dcterms:modified>2008-09-02T10:38:34Z</dcterms:modified></item><item><title>SharePoint Infrastructure Update (WSS/MOSS) and exception with “Blocked file types” page</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1199.entry</link><description>&lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt;After installing SharePoint 2008 (WSS/MOSS) Infrastructure Update from July 2008 you may find that “Blocked file types” page is broken (Central Administration –&amp;gt; Operations –&amp;gt; Blocked file types). Albeit it worked before, 10 mins ago, but now you end up with the following exception  &lt;blockquote&gt; &lt;p&gt;Object reference not set to an instance of an object.   at Microsoft.SharePoint.ApplicationPages.BlockedFileTypePage.InitializeValues() &lt;br&gt;   at Microsoft.SharePoint.ApplicationPages.BlockedFileTypePage.OnLoadComplete(EventArgs e) &lt;br&gt;   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)&lt;/blockquote&gt; &lt;p&gt;What it means, that SharePoint can’t resolve your WebApplicationID (GUID of your site) from Content DB.  &lt;p&gt;The fully qualified URL for “Blocked file types” looks like “&lt;a title="http://syd-moss1:5225/_admin/BlockedFileType.aspx?WebApplicationId=f822196a-4212-4a09-85ac-76531f160880" href="http://&amp;lt;CentralAdmin&amp;gt;:&amp;lt;port&amp;gt;/_admin/BlockedFileType.aspx?WebApplicationId=fa221a6a-42a2-4a09-8aac-76a31f160880"&gt;http://&amp;lt;CentralAdmin&amp;gt;:&amp;lt;port&amp;gt;/_admin/BlockedFileType.aspx?WebApplicationId=&lt;strong&gt;&lt;em&gt;fa221a6a-42a2-4a09-8aac-76a31f160880&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;”.  &lt;p&gt;I have no idea why SharePoint can’t resolve web application after Infrastructure Update, something wrong happened and your site just can’t be found. I didn’t test with SQL Profiler, but expect that nothing returning from Content DB &lt;p&gt;To fix this you need just to create new Web Application :) That’s all. At this time the Content DB tables will be updated with new web app and GUID, and “Blocked file types” will start work again. &lt;p&gt;  &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/09/02/sharepoint-infrastructure-update-wss-moss-and-exception-with-blocked-file-types-page.aspx"&gt;SharePoint Infrastructure Update (WSS/MOSS) and exception with “Blocked file types” page&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+SharePoint+Infrastructure+Update+(WSS%2fMOSS)+and+exception+with+%e2%80%9cBlocked+file+types%e2%80%9d+page&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1199.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1199.entry</guid><pubDate>Mon, 01 Sep 2008 14:16:57 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1199/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1199.entry#comment</wfw:comment><dcterms:modified>2008-09-01T14:23:19Z</dcterms:modified></item><item><title>Deploying SharePoint Web Parts as a part of PageLayouts in MOSS 2007</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1158.entry</link><description>&lt;p&gt;Web Parts are an important and everywhere used part of SharePoint. Web Parts are documented pretty good and there are several sources describing as just ASP.NET WebParts (&lt;a href="http://www.amazon.com/ASP-NET-2-0-Web-Parts-Action/dp/193239477X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1213500426&amp;amp;sr=8-1" target="_blank"&gt;Darren Neimke book&lt;/a&gt;) and some &lt;a href="http://msdn.microsoft.com/en-us/library/ms452873.aspx" target="_blank"&gt;resources about Web Parts in SharePoint&lt;/a&gt; as well. But in reality SharePoint WebPart specific stuff is not properly documented, and in this post I’d like to publish some tips regarding Web Parts in SharePoint &lt;p&gt;&lt;strong&gt;General Info &lt;/strong&gt; &lt;p&gt;Not all Web Parts are inherited from &lt;font face="Courier New"&gt;System.Web.UI.WebControls.WebParts.&lt;strong&gt;WebPart&lt;/strong&gt; &lt;/font&gt;class. Some of them comes from &lt;font face="Courier New"&gt;Microsoft.SharePoint.WebPartPages.&lt;/font&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;WebPart&lt;/font&gt;, &lt;/strong&gt;which is inherited from the &lt;span style="font-family:Courier New"&gt;System.Web.UI.WebControls.WebParts.&lt;b&gt;WebPart &lt;/b&gt;&lt;/span&gt;now. When you develop your own Web Parts, in mostly cases you need to inherit from &lt;font face="Courier New"&gt;System.Web&lt;/font&gt; WebPart class &lt;p&gt;&lt;strong&gt;Finding the connections&lt;/strong&gt; &lt;p&gt;For some tasks you might handle the Web Part connection/disconnection programmatically. For example, connect your Web Part via code or via Page Layouts. To do this you need to know the Consumer and Provider names. It’s not the problem for your Web Parts, but how to find the Provider name for the out-of-the-box Web Parts?! For this you need to use Reflector.  &lt;p&gt;First, to know the class name of SharePoint Web Part you need just put any Web Part to the page and export it to XML. In that XML you will find the assembly and class name.  After that open that assembly in Reflector and navigates to the class you need to get Provider name. Scrutinize that Web Part class to find the connections and name of Provider connection. Connection may be not exactly in that class, but in one of the base classes. &lt;p&gt;For example for Page Filter Web Parts the Provider name is “&lt;font face="Courier New"&gt;ITransformableFilterValues&lt;/font&gt;” &lt;p&gt;&lt;strong&gt;Deploying Web Parts with connections&lt;/strong&gt; &lt;p&gt;If you deploy you pages and want to have Web Parts being already connected for each new page user creates, then you need to connect Web Part via XML description inside Page Layout. &lt;p&gt;Connection consists from 3 parts: &lt;ul&gt; &lt;li&gt;Consumer ID and Name –which you know, because usually it’s you own custom Web Parts  &lt;li&gt;Provider ID and Name – I described above how to extract that name  &lt;li&gt;Name of the parameter you select from dialog box when connect Web Parts manually. &lt;/ul&gt; &lt;p&gt;So, let’s start: &lt;ol&gt; &lt;li&gt;Put any Web Parts to your Page Layout (I use SharePoint Designer for this, because it simplify my work), save page and navigate to the code.  &lt;li&gt;In code find the &amp;lt;WebPartPages:WebPartZone&amp;gt; section, and there you will find you Web Parts markup tagged with &amp;lt;Components: prefix.  &lt;li&gt;Find the ProviderID attribute of the Web Parts you want to connect and remember values . These values will be used when we create the connection between Web Parts.  &lt;li&gt;Open your page in browser to verify it works.  &lt;li&gt;Connect Web Parts manually, and save the name of the parameter which is shown in the popup dialog box when you connect Web Parts  &lt;li&gt;Remove connections between Web Parts, and return back to SharePoint designer  &lt;li&gt;Open the Page Layout code and navigate to the very beginning of document. Try to find the following section “&amp;lt;WebPartPages:SPProxyWebPartManager”. If you don’t have this section you can miss the following step  &lt;li&gt;Add the &amp;lt;WebPartPages:SPProxyWebPartManager runat=&amp;quot;server&amp;quot; ID=&amp;quot;ProxyWebPartManager&amp;quot;&amp;gt;  section inside “PlaceHolderMain” content holder  &lt;li&gt;Now, we are ready to create connections. Add the following codesnippet inside SPProxyWebPartManager &lt;/ol&gt; &lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:rgb(244, 244, 244)"&gt; &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:rgb(244, 244, 244)"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   1:&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128, 0, 0)"&gt;SPWebPartConnections&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:rgb(244, 244, 244)"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   2:&lt;/span&gt;            &lt;span style="color:rgb(0, 0, 255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128, 0, 0)"&gt;WebPartPages:SPWebPartConnection&lt;/span&gt; &lt;span style="color:rgb(255, 0, 0)"&gt;ID&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;=&amp;quot;g_myConnectionName&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   3:&lt;/span&gt;                &lt;span style="color:rgb(255, 0, 0)"&gt;ConsumerConnectionPointID&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;=&amp;quot;IFilterValues&amp;quot;&lt;/span&gt; &lt;span style="color:rgb(255, 0, 0)"&gt;ConsumerID&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;=&amp;quot;WebPartA&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:rgb(244, 244, 244)"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   4:&lt;/span&gt;                &lt;span style="color:rgb(255, 0, 0)"&gt;ProviderConnectionPointID&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;=&amp;quot;ITransformableFilterValues&amp;quot;&lt;/span&gt; &lt;span style="color:rgb(255, 0, 0)"&gt;ProviderID&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;=&amp;quot;WebPartB&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   5:&lt;/span&gt;                &lt;span style="color:rgb(0, 0, 255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128, 0, 0)"&gt;WebPartPages:TransformableFilterValuesToFilterValuesTransformer&lt;/span&gt; &lt;span style="color:rgb(255, 0, 0)"&gt;MappedConsumerParameterName&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;=&amp;quot;Parameter&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:rgb(244, 244, 244)"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   6:&lt;/span&gt;                &lt;span style="color:rgb(0, 0, 255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128, 0, 0)"&gt;WebPartPages:TransformableFilterValuesToFilterValuesTransformer&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   7:&lt;/span&gt;            &lt;span style="color:rgb(0, 0, 255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128, 0, 0)"&gt;WebPartPages:SPWebPartConnection&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:rgb(244, 244, 244)"&gt;&lt;span style="color:rgb(96, 96, 96)"&gt;   8:&lt;/span&gt; &lt;span style="color:rgb(0, 0, 255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128, 0, 0)"&gt;SPWebPartConnections&lt;/span&gt;&lt;span style="color:rgb(0, 0, 255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;      Let’s review the “blue” selections, because it’s where connection magic happens
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;g_myConnectionName is the name of current connection, can be any name 
&lt;li&gt;IFilterValues – Consumer interface name of Web Part which accept connection 
&lt;li&gt;WebPartA – consumer Web Part ID from the WebPartZone section we found and remembered previously 
&lt;li&gt;&lt;font face="Courier New"&gt;ITransformableFilterValues&lt;/font&gt; – Provider interface name of Web Part which provides connection (in this sample I used Page Filter web parts and they have such provider name. Refer to the “&lt;strong&gt;Finding the connections&lt;/strong&gt;” section where I described how to extract the names 
&lt;li&gt;WebPartB – provider Web Part ID from the WebPartZone section we found and remembered previously 
&lt;li&gt;Parameter – the name from the connection dialog box where you select the parameter &lt;/ul&gt;&lt;/ul&gt;
&lt;p&gt;10.  Save the page layout. Go to SharePoint and create the new page based on that page layout. After page will be created you can find that your Web Parts are already connected. Job done!
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;Take into account, that you can’t change Web Parts connection for pages created for the Page Layouts with predefined Web Part connections.
&lt;p&gt;
&lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/08/10/deploying-sharepoint-web-parts-as-a-part-of-pagelayouts-in-moss-2007.aspx"&gt;Deploying SharePoint Web Parts as a part of PageLayouts in MOSS 2007&lt;/a&gt; &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Deploying+SharePoint+Web+Parts+as+a+part+of+PageLayouts+in+MOSS+2007&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1158.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1158.entry</guid><pubDate>Sun, 10 Aug 2008 01:46:39 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1158/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1158.entry#comment</wfw:comment><dcterms:modified>2008-08-17T05:50:44Z</dcterms:modified></item><item><title>ASP.NET Theme across all pages with XMLHttpRequest calls</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1138.entry</link><description>&lt;p&gt;ASP.NET Themes is very powerful feature, but some limitations exist when you are trying to apply Themes dynamically. &lt;p&gt;For the single page the way to apply theme is to use  &lt;p&gt;Page.Theme = “&amp;lt;themeName&amp;gt;”;  &lt;p&gt;inside  the OnPreInit event, but if you try to apply theme for all pages across your site you have two solutions: &lt;ol&gt; &lt;li&gt;add this code to each of the pages  &lt;li&gt;apply theme for master.page – and it’s where problem starts&lt;/ol&gt; &lt;p&gt;ASP.NET master pages don’t support applying themes dynamically – only static support for the all site pages by setting attribute inside web.config. &lt;p&gt;But what to do if you need control which theme to apply and you don’t want to add code to every page of your site?!  &lt;p&gt;The solution for this to create custom HttpModule, where apply theme for Page class inside PreRequestHandlerExecute event. &lt;p&gt;See the following code-snippet of the ThemeHttpModule &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   1:&lt;/span&gt; public void Init(HttpApplication context)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   3:&lt;/span&gt;     context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   5:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   6:&lt;/span&gt; void context_PreRequestHandlerExecute(object sender, EventArgs e)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   7:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   8:&lt;/span&gt;     HttpContext context = HttpContext.Current;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   9:&lt;/span&gt;     if (!(context.Handler is Page))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  11:&lt;/span&gt;         return;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  13:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  14:&lt;/span&gt;     Page page = (Page)context.Handler;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  15:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  16:&lt;/span&gt;     if ((page != null))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  17:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  18:&lt;/span&gt;         string themeName = &amp;quot;Default&amp;quot;;  // get theme name from somewhere&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  19:&lt;/span&gt;         page.Theme = themeName;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  20:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  21:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Done. Now you have flexible control which theme to apply in realtime, extracting you theme names from config or from database.
&lt;p&gt;But there is one case, I’d like point you attention – XMLHttpRequest calls.
&lt;p&gt;If you have AJAX XMLHttpRequest direct calls - this code won’t work, because server returns you only portion of page, not the full page with header and body. And you can’t apply theme on partial pages.
&lt;p&gt;To solve this you need to check if it’s partial request or not, inside your HttpModule. In case of ASP.NET AJAX you could use ScriptManager.IsInAsyncPostBack, but for the direct XMLHttpRequest  calls you need to check the header for the Content-Type you are used when create the MSXML object.
&lt;p&gt;Something like this
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   1:&lt;/span&gt; // Don't apply theme for XMLHttpRequest calls, because you are getting part of the page, not the full page&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   2:&lt;/span&gt; if (! string.IsNullOrEmpty(context.Request.ContentType))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   4:&lt;/span&gt;     return;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now your themes will be applied only on pages, not the partial AJAX calls.
&lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/07/28/asp-net-theme-across-all-pages-with-xmlhttprequest-calls.aspx"&gt;ASP.NET Theme across all pages with XMLHttpRequest calls&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+ASP.NET+Theme+across+all+pages+with+XMLHttpRequest+calls&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Web</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1138.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1138.entry</guid><pubDate>Sun, 27 Jul 2008 14:42:19 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1138/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1138.entry#comment</wfw:comment><dcterms:modified>2008-07-27T14:48:19Z</dcterms:modified></item><item><title>Moving ASP.NET master.page to SharePoint</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1124.entry</link><description>&lt;p&gt;In these days SharePoint become more and more popular. There are number of web project which starts directly in SharePoint, but however a lot of project remains out the SharePoint scope, and exists as pure ASP.NET application.  &lt;p&gt;The one of the common task of migrating ASP.NET application to SharePoint is changing the site landing page to become SharePoint page. But it’s where the problem starts. ASP.NET applications tend to consume different modern tools and technologies like ASP.NET MVC, SilverLight, URL Rewriting and others which seems to be very common in pure ASP.NET development, but could be the potential problems in SharePoint world. &lt;p&gt;There are three thing you need to concentrate on &lt;p&gt;&lt;strong&gt;1) master.page&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;Remove AutoEventWireup=&amp;quot;true&amp;quot; attribute. SharePoint doesn’t support it on all pages;  &lt;li&gt;User controls are not supported on master.page, so move them to CONTROLTEMPLATES folder and change references  &lt;li&gt;Check that all classes you inherit from has the namespaces&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;2) CSS&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;SharePoint doesn’t support CSS validation on 100%, so I can hardly recommend something specific here. But what did helped me a lot id debuging and CSS customization is just to have the “clean” CSS file, which resets all customization &lt;a title="http://meyerweb.com/eric/tools/css/reset/" href="http://meyerweb.com/eric/tools/css/reset/"&gt;http://meyerweb.com/eric/tools/css/reset/&lt;/a&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;3) Web.config&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;You need to make sure that you are using the right siteMap defaultProvider (&amp;lt;siteMap section&amp;gt;) from your ASP.NET web.config, otherwise all your SiteMap elements will be considered as Sharepoint Publishing classes elements (if u have MOSS), which are differs from asp.net SiteMap classes  &lt;li&gt;If you are using URL rewriting or other specific modules you need to create the &amp;lt;system.webServer&amp;gt; section in SharePoint config file and add them there.  &lt;li&gt;You need to add all your DLLS to the list of SafeControls&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;4) Code&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;You need to have [assembly: AllowPartiallyTrustedCallers()] in your dlls.  &lt;li&gt;DLLs must be signed  &lt;li&gt;All classes must have namespaces&lt;/ul&gt; &lt;p&gt;  &lt;p&gt;Mirror: &lt;a title="http://msmvps.com/blogs/laflour/archive/2008/07/10/moving-asp-net-master-page-to-sharepoint.aspx" href="http://msmvps.com/blogs/laflour/archive/2008/07/10/moving-asp-net-master-page-to-sharepoint.aspx"&gt;http://msmvps.com/blogs/laflour/archive/2008/07/10/moving-asp-net-master-page-to-sharepoint.aspx&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Moving+ASP.NET+master.page+to+SharePoint&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1124.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1124.entry</guid><pubDate>Wed, 09 Jul 2008 13:27:25 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1124/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1124.entry#comment</wfw:comment><dcterms:modified>2008-07-09T13:35:47Z</dcterms:modified></item><item><title>2008 MVP Award</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1117.entry</link><description>&lt;p&gt;Hurray, got the &lt;strong&gt;2008 MVP Award&lt;/strong&gt; today! They re-awarded me again, since year 2005 in [.NET/C#] area for my achievements in “online consulting” ;)  &lt;p&gt;But this year I’m Australian MVP! &lt;p&gt;  &lt;p&gt;Thinking about changing the area and become SharePoint MVP in the next year :) &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+2008+MVP+Award&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>General</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1117.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1117.entry</guid><pubDate>Tue, 01 Jul 2008 23:02:37 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1117/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1117.entry#comment</wfw:comment><dcterms:modified>2008-07-01T23:27:48Z</dcterms:modified></item><item><title>SharePoint Designer removes tags when saves page layout - “file system” feature workaround</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1090.entry</link><description>&lt;p&gt;In the current project we are using SharePoint Designer 2007 intensively to create number of PageLayouts, especially to put WebParts there and pre-configure WebParts connections. SPD is not such a bad tool, because there is no alternative for this. But time to time it really buggy and awful that you start thinking if it passed QA team before being released. (event SP1 doesn’t solve a lot of common crucial bugs, which stops you using SPD at all) &lt;p&gt;The most disgusting stuff of SharePoint Designer is that it formats your pages markup without asking you. And what’s worse it REMOVES some tags. I really can’t understand that behaviour – WHY it removes what you typed when you save document?! &lt;p&gt;Recently, we stumble over the very nasty thing of SPD – accidental formatting. We have a PageLayout with several web parts on the page and we created &amp;lt;SPWebPartConnections&amp;gt; section to predefine WebParts connections. But whenever you save your document, SPD for some reasons removes some of your &amp;lt;SPWebPartConnections&amp;gt;. We spent about 2 hours to understand any dependencies or logic, but without success. It seems that they have some kind of RAND which selects which of the SPWebPartConnections tags to remove. We tried to install several hotfixes for SPD – but nothing works. &lt;p&gt;So, the only way is to use other tools, like Visual Studio. But there is a problem. If you are edit your pageLayout in Visual Studio and want to test it, you need to re-deploy your pagelayouts each time, because VS doesn’t support check-in/check-out to SharePoint Content DB.  &lt;p&gt;But there is alternative way to edit your pages and have check-in support from the Visual Studio. SharePoint has very cool “file system” feature. It means that you can navigate to your PageLayouts from explorer,  open them in any editor and save it back. All your changes will be stored in Content DB(!!) &lt;p&gt;To do this your need to open Windows Explorer and navigate to My Network Places. On the left side you will see the “Add Network Places” item. Open it and type there “http://&amp;lt;yoursite&amp;gt;/_catalogs/masterpage/”, type the name of your network folder like “MySite PageLayouts” and press OK. &lt;p&gt;Now, if you open the “MySite PageLayouts” item from Windows Explorer-&amp;gt;My Network Places you will see the content of your “_catalogs/masterpage/” SharePoint folder. And now your can open your masterPage or PageLayouts in any editor, edit them and save them. All changes will be stored into ContentDB. But don’t forget to checkout your file before editing (via Sharepoint or SPD) &lt;p&gt;So, this trick allows you to edit any SharePoint files and forget about SharePoint Designer issues &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/06/13/sharepoint-designer-removes-tags-when-saves-page-layout-file-system-feature-workaround.aspx"&gt;SharePoint Designer removes tags when saves page layout - “file system” feature workaround&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+SharePoint+Designer+removes+tags+when+saves+page+layout+-+%e2%80%9cfile+system%e2%80%9d+feature+workaround&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1090.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1090.entry</guid><pubDate>Fri, 13 Jun 2008 04:13:30 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1090/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1090.entry#comment</wfw:comment><dcterms:modified>2008-06-13T04:13:30Z</dcterms:modified></item><item><title>Page events stop working after using output stream for binary download</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1082.entry</link><description>&lt;p&gt;In my previous SharePoint projects I've met the situations when you need to outstreem some binary files, like PDF file or something else, but when you do this by the standard way (how you used to do in normal ASP.NET site) you found that page is &amp;quot;dead&amp;quot; after you streamed you file to the client. By &amp;quot;dead&amp;quot; I mean that it doesn't respond to any events, and you can't use this page. &lt;p&gt;The problem lies in the SharePoint JavaScript files, which are integrated into the each web page, and seems that they protect you from unnecessary double-posts. But unfortunately such behaviour breaks your stream output. &lt;p&gt;I didn't have a change to investigate this problem in details, to find out what exactly affects on this, and always solved this by putting stream out in the new popup window.  &lt;p&gt;In these days on SharePoint NGs this question was risen and &amp;quot;&lt;b&gt;andyspears&lt;/b&gt;&amp;quot; &lt;a href="https://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.sharepoint.development_and_programming&amp;amp;tid=cc356848-b0d8-4a60-8176-6df1bd44eb55&amp;amp;cat=〈=&amp;amp;cr=&amp;amp;sloc=&amp;amp;p=1" target="_blank"&gt;posted&lt;/a&gt; a work-around, how to change the SharePoint JS and return the normal behaviour back. &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000"&gt;//1) Set your button's client-side click event to: &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   2:&lt;/span&gt; &lt;span style="color:#006080"&gt;&amp;quot;exportRequested=true;&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   4:&lt;/span&gt; &lt;span style="color:#008000"&gt;//2) register the following JS: &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; beforeSubmitJS = &lt;span style="color:#006080"&gt;&amp;quot;\nvar exportRequested = false; \n&amp;quot;&lt;/span&gt;; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   6:&lt;/span&gt; beforeSubmitJS += &lt;span style="color:#006080"&gt;&amp;quot;var beforeFormSubmitFunction = theForm.onsubmit; \n&amp;quot;&lt;/span&gt;; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   7:&lt;/span&gt; beforeSubmitJS += &lt;span style="color:#006080"&gt;&amp;quot;theForm.onsubmit = function(){ \n&amp;quot;&lt;/span&gt;; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   8:&lt;/span&gt; beforeSubmitJS += &lt;span style="color:#006080"&gt;&amp;quot;var returnVal = beforeFormSubmitFunction(); \n&amp;quot;&lt;/span&gt;; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   9:&lt;/span&gt; beforeSubmitJS += &lt;span style="color:#006080"&gt;&amp;quot;if(exportRequested &amp;amp;&amp;amp; returnVal) &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  10:&lt;/span&gt;     {_spFormOnSubmitCalled=false; exportRequested=false;} \n&amp;quot;; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  11:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  12:&lt;/span&gt; &lt;span style="color:#008000"&gt;//beforeSubmitJS += &amp;quot;alert(returnVal + '\\n' + _spFormOnSubmitCalled);&amp;quot;; &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  13:&lt;/span&gt; beforeSubmitJS += &lt;span style="color:#006080"&gt;&amp;quot;return returnVal; \n&amp;quot;&lt;/span&gt;; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  14:&lt;/span&gt; beforeSubmitJS += &lt;span style="color:#006080"&gt;&amp;quot;}; \n&amp;quot;&lt;/span&gt;; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  15:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  16:&lt;/span&gt; &lt;span style="color:#008000"&gt;//beforeSubmitJS += &amp;quot;alert(theForm.onsubmit);&amp;quot;; &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  17:&lt;/span&gt; &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.Page.ClientScript.RegisterStartupScript(&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.GetType(), &lt;span style="color:#006080"&gt;&amp;quot;alterFormSubmitEvent&amp;quot;&lt;/span&gt;, beforeSubmitJS, &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;); &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Thanks AdnySpears, good work!
&lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/06/06/page-events-stop-working-after-using-output-stream-for-binary-download.aspx" target="_blank"&gt;Page events stop working after using output stream for binary download&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Page+events+stop+working+after+using+output+stream+for+binary+download&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1082.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1082.entry</guid><pubDate>Thu, 05 Jun 2008 13:22:56 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1082/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1082.entry#comment</wfw:comment><dcterms:modified>2008-06-05T13:26:40Z</dcterms:modified></item><item><title>Subclassing Content Query Web Part to override CAML query</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1069.entry</link><description>&lt;p&gt;The Content Query Web Part (CQWP) in MOSS is one of the popular out-of-the-box Publishing components which is used in content management sites, allowing you to get results from different sources. &lt;p&gt;But sometimes out of the box functionality is not enough to meet your requirements, and you need to customize CQWP. There are several resources describing how to do this - &lt;a href="http://blogs.msdn.com/ecm/archive/2006/10/25/configuring-and-customizing-the-content-query-web-part.aspx" target="_blank"&gt;1&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/aa981241.aspx" target="_blank"&gt;2&lt;/a&gt;, &lt;a href="http://www.codeplex.com/ECQWP" target="_blank"&gt;3&lt;/a&gt;, &lt;a href="http://www.codeplex.com/sptoolbox/Release/ProjectReleases.aspx?ReleaseId=11150" target="_blank"&gt;4&lt;/a&gt; &lt;p&gt;The most important features which are missed in CQWP are: &lt;ul&gt; &lt;li&gt;overriding query to use custom CAML  &lt;li&gt;enabling web-part connections&lt;/ul&gt; &lt;p&gt;To implement these functionality you need to subclass ContentByQueryWebPart class and override several methods. &lt;p&gt;Below I will describe what exactly need to be done to achieve desired behaviour. &lt;p&gt;&lt;strong&gt;&lt;u&gt;Query Override&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;To have custom CAML query in your Web part you need to override CreateChildControls base method. You can find samples how to do this in the references above, but it's done so implicitly, that you can easily spend hours to find out why you code doesn't work and gives you different errors &lt;p&gt;The crucial part is in the way sending the query to the base class within overrided CreateChildControls  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; CreateChildControls()&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.QueryOverride = customQueryString;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff"&gt;base&lt;/span&gt;.CreateChildControls();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   7:&lt;/span&gt;     QueryOverride = &lt;span style="color:#0000ff"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   9:&lt;/span&gt;     CommonViewFields = &lt;span style="color:#0000ff"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;First, you need to set your custom query to the &amp;quot;this.QueryOverride&amp;quot; to inform base class about query - line 3
&lt;p&gt;Second, call base CreateChildControls() allowing your query being executed - line 5
&lt;p&gt;Third and last - &lt;strong&gt;CLEAN&lt;/strong&gt; query and view fields properties - line 7,9. Without this step you will get errors when open your Web Part in edit mode
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Enabling Connection&lt;/u&gt;&lt;/strong&gt;
&lt;p&gt;The Content Query WP doesn't accept any connections by default. You need to implement this too. Everything you need to to is just add ConnectionConsumer attribute. But trick in setting the right attribute which is used in Parameter dialog box, when you connect two web-parts.
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   1:&lt;/span&gt; [ConnectionConsumer(&lt;span style="color:#006080"&gt;&amp;quot;Another WebPart&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080"&gt;&amp;quot;IFilterValues&amp;quot;&lt;/span&gt;, AllowsMultipleConnections = &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; SetConnectionInterface(IFilterValues filterProvider)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (filterProvider != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   6:&lt;/span&gt;         &lt;span style="color:#008000"&gt;// save provider with values&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   7:&lt;/span&gt;         providerValues = filterProvider.ParameterValues;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   8:&lt;/span&gt;         _filterProviders.Add(filterProvider);  &lt;span style="color:#008000"&gt;// variable declaration is List&amp;lt;IFilterValues&amp;gt; _filterProviders = new List&amp;lt;IFilterValues&amp;gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;   9:&lt;/span&gt;         List&amp;lt;ConsumerParameter&amp;gt; parameters = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; List&amp;lt;ConsumerParameter&amp;gt;();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  10:&lt;/span&gt;         &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  11:&lt;/span&gt;         &lt;span style="color:#008000"&gt;// add params&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  12:&lt;/span&gt;         parameters.Add(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ConsumerParameter(&lt;span style="color:#006080"&gt;&amp;quot;param1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  13:&lt;/span&gt;                 ConsumerParameterCapabilities.SupportsSingleValue |&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  14:&lt;/span&gt;                 ConsumerParameterCapabilities.SupportsEmptyValue));&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  15:&lt;/span&gt;         parameters.Add(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ConsumerParameter(&lt;span style="color:#006080"&gt;&amp;quot;param2&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  16:&lt;/span&gt;                 ConsumerParameterCapabilities.SupportsMultipleValues |&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  17:&lt;/span&gt;                 ConsumerParameterCapabilities.SupportsAllValue |&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  18:&lt;/span&gt;                 ConsumerParameterCapabilities.SupportsEmptyValue));&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  19:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  20:&lt;/span&gt;         filterProvider.SetConsumerParameters(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ReadOnlyCollection&amp;lt;ConsumerParameter&amp;gt;(parameters));&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  21:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  22:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"&gt;&lt;span style="color:#606060"&gt;  23:&lt;/span&gt; }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Method name can be any, but pay attention which provider you are using . WebPart providers send data via different provider interfaces, for example when you are working with Filtering web parts (like &amp;quot;Current User Filter&amp;quot; web part) then you need to &amp;quot;listen&amp;quot; your incoming connections via IFilterValues (thx Mutaz for this findings), for other WB it could be IWebPartField or IWebPartRow. 
&lt;p&gt;If you are expecting to get data from WP via unsupported provider you connection link will be dimmed
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Practical Sample&lt;/u&gt;&lt;/strong&gt;
&lt;p&gt;@d2design kindly asked to provide practical sample, for example how to use current user as a keyword :)
&lt;p&gt;Actually, it's good example which shows how use both features I described. 
&lt;p&gt;To do this you need to have:
&lt;ol&gt;
&lt;li&gt;ShareServices (SSP) with UserProfile, where current userName is stored 
&lt;li&gt;&amp;quot;Current User Filter&amp;quot; WebPart, to get the userName from SSP. It returns you logged user name by default (not necessary actually, as well as SSP, because you could resolve you user name via standard asp.net User class when construct custom query) 
&lt;li&gt;Enable WebPart connections as I described above. You need to use IFilterValue interface for &amp;quot;Current User Filter&amp;quot; and store your incoming user name in variable. 
&lt;li&gt;Override query to include your userName in resulted custom query.&lt;/ol&gt;
&lt;p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;u&gt;TIPS:&lt;/u&gt;&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;When you are quering content which is not published and approved (like pages) you wont be able to see that content on the page in final view. You data will be available in page edit mode only, because they are treated as &amp;quot;draft&amp;quot; data.
&lt;li&gt;&amp;lt;OrderBy&amp;gt;CAML tag is not parsed by CQWP, you need to remove it from your query and set the related order field of CQWP class&amp;lt;OrderBy&amp;gt;CAML tag is not parsed by CQWP, you need to remove it from your query and set the related order field of CQWP class&lt;/ol&gt;
&lt;p&gt; 
&lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/05/29/subclassing-content-query-web-part-to-override-caml-query.aspx"&gt;Subclassing Content Query Web Part to override CAML query&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Subclassing+Content+Query+Web+Part+to+override+CAML+query&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1069.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1069.entry</guid><pubDate>Wed, 28 May 2008 13:43:42 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1069/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1069.entry#comment</wfw:comment><dcterms:modified>2008-06-05T06:25:18Z</dcterms:modified></item><item><title>MOSS Content Deployment Jobs - Lookup Fields and requirements</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1058.entry</link><description>&lt;p align=justify&gt;Content Deployment Job is a nice feature of MOSS 2007 to secure your main site from unauthorized and accidental changes and have approved content being deployed via standard MOSS functionality. &lt;p align=justify&gt;But Content Deployment Jobs are a bit tricky :( &lt;p align=justify&gt;There are some areas which I'd like to highlight in the current post, which helps you to save hours in configuring Content Deployments Path and Jobs &lt;p align=justify&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt; &lt;strong&gt;&lt;u&gt;Requirements&lt;/u&gt;&lt;/strong&gt; &lt;p align=justify&gt;To have successful contend deployment you need to prepare your sites correctly. There is a great &lt;a href="http://blogs.technet.com/stefan_gossner/archive/2008/04/11/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-6.aspx"&gt;post from Stefan Gossner&lt;/a&gt; who provided detailed explanations to all pre-requirement. &lt;p align=justify&gt;Just to summarize, you need: &lt;ul&gt; &lt;li&gt; &lt;div align=justify&gt;Destination Site without any template pages (don't use &amp;quot;Blank&amp;quot; template even)&lt;/div&gt; &lt;li&gt; &lt;div align=justify&gt;Deploy features to Source and Destination sites&lt;/div&gt; &lt;li&gt; &lt;div align=justify&gt;Activate features ONLY on Destination site&lt;/div&gt;&lt;/ul&gt; &lt;p align=justify&gt; &lt;strong&gt;&lt;u&gt;Incremental Deployment&lt;/u&gt;&lt;/strong&gt; &lt;p align=justify&gt;When you set deployment path and created your first job you need to do full deployment (&amp;quot;Deploy all content&amp;quot; option) first, and after it's done set the incremental deployment. &lt;p align=justify&gt;Your incremental job could fail with the next exception &lt;blockquote&gt; &lt;p&gt;&amp;quot;&lt;font size=1&gt;Violation of PRIMARY KEY constraint 'PK__#ExportObjects____50430BFC'. Cannot insert duplicate key in object 'dbo.#ExportObjects'&lt;/font&gt;.&amp;quot;&lt;/blockquote&gt; &lt;p align=justify&gt;The reason is that SP1 for MOSS changed the document versioning system, but no changes where done to Content Deployment Job functionality. To solve this issue  you may need to install the following hotfix &lt;a title="http://support.microsoft.com/kb/950279" href="http://support.microsoft.com/kb/950279"&gt;http://support.microsoft.com/kb/950279&lt;/a&gt; or disable minor versioning for specific lists (google to find details about this) &lt;p&gt; &lt;strong&gt;&lt;u&gt;Lookup fields&lt;/u&gt;&lt;/strong&gt; &lt;p align=justify&gt;The biggest trick in Content Deployment Jobs relates to Lookup fields deployed via Feature. I think that the following exception will be familiar for those who tried run Content Deployment Jobs for Site with Lookup Fields feature &lt;blockquote&gt; &lt;p&gt;&lt;font size=1&gt;The element 'FieldTemplate' in namespace 'urn:deployment-manifest-schema' has invalid child element 'Field' in namespace 'http://schemas.microsoft.com/sharepoint/'. List of possible elements expected: 'Field' in namespace 'urn:deployment-manifest-schema'. at System.Xml.Schema.XmlSchemaValidator.SendValidationEvent(ValidationEventHandler eventHandler, Object sender, XmlSchemaValidationException e, XmlSeverityType severity) at System.Xml.Schema.XmlSchemaValidator.ElementValidationError(XmlQualifiedName name, ValidationState context, ValidationEventHandler eventHandler, Object sender, String sourceUri, Int32 lineNo, Int32 linePos, Boolean getParticles) at System.Xml.Schema.XmlSchemaValidator.ValidateElementContext(XmlQualifiedName elementName, Boolean&amp;amp; invalidElementInContext) at System.Xml.Schema.XmlSchemaValidator.ValidateElement(String localName, String namespaceUri, XmlSchemaInfo schemaInfo, String xsiType, String xsiNil, String xsiSchemaLocation, String xsiNoNamespaceSchemaLocation) at System.Xml.XsdValidatingReader.ProcessElementEvent() at System.Xml.XsdValidatingReader.ProcessReaderEvent() at System.Xml.XsdValidatingReader.Read() at Microsoft.SharePoint.Deployment.XmlFormatter.ParseObject(Type objectType, Boolean isChildObject) at Microsoft.SharePoint.Deployment.XmlFormatter.DeserializeObject(Type objectType, Boolean isChildObject, DeploymentObject envelope) at Microsoft.SharePoint.Deployment.XmlFormatter.Deserialize(Stream serializationStream) at Microsoft.SharePoint.Deployment.ObjectSerializer.Deserialize(Stream serializationStream) at Microsoft.SharePoint.Deployment.ImportObjectManager.ProcessObject(XmlReader xmlReader) at Microsoft.SharePoint.Deployment.SPImport.DeserializeObjects() at Microsoft.SharePoint.Deployment.SPImport.Run()  &lt;/font&gt; &lt;p&gt;&lt;font size=1&gt;5/22/2008 11:14 AM Content deployment job 'Remote import job for job with sourceID = 0ffd575d-df2f-474f-83b6-f3454f2e7d0d' failed.The exception thrown was 'System.Xml.Schema.XmlSchemaValidationException' : 'The element 'FieldTemplate' in namespace 'urn:deployment-manifest-schema' has invalid child element 'Field' in namespace 'http://schemas.microsoft.com/sharepoint/'. List of possible elements expected: 'Field' in namespace 'urn:deployment-manifest-schema'.'&lt;/font&gt; &lt;/blockquote&gt; &lt;p align=justify&gt;The problems is exactly in deployment scripts of Lookup fields. There are several samples how to deploy lookup fields via feature (&lt;a title="http://www.sharepointnutsandbolts.com/2007/04/feature-to-create-lookup-fields-on.html" href="http://www.sharepointnutsandbolts.com/2007/04/feature-to-create-lookup-fields-on.html"&gt;http://www.sharepointnutsandbolts.com/2007/04/feature-to-create-lookup-fields-on.html&lt;/a&gt;) but all of them are not suitable for the Content Deployment Jobs. Because you will get the exception which I posted above. &lt;p align=justify&gt;The only way to find out why this happens is to use 3rd party tools (SharepointSpy or FieldsExplorer) to compare the SchemaXML of Lookup Fields after deployment via FeatureReceiver. So, after scrutinizing this issue I found out that deploying Lookup Fields via FeatureReceiver differs from Lookup fields create via Central Admin Web site. FeatureReceiver deployment adds additional attribute &lt;strong&gt;&amp;quot;xmlns=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/strong&gt; to the Lookup SchemaXML which breaks the Content Deployment Job. &lt;p align=justify&gt;So, the solution is simple - verify the published schema in FeatureReceiver before calling Update() method for Lookup Field and remove this attribute. &lt;p align=justify&gt;  &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/05/22/moss-content-deployment-jobs-lookup-fields-and-requirements.aspx"&gt;MOSS Content Deployment Jobs - Lookup Fields and requirements&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+MOSS+Content+Deployment+Jobs+-+Lookup+Fields+and+requirements&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1058.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1058.entry</guid><pubDate>Thu, 22 May 2008 12:45:00 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1058/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1058.entry#comment</wfw:comment><dcterms:modified>2008-05-22T12:45:00Z</dcterms:modified></item><item><title>Publishing Content Types and missed "CreatePage.aspx" page in WCM sites</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1055.entry</link><description>&lt;p align=justify&gt;SharePoint content types is very popular thing, and used in almost all Sharepoint projects. Deployment of content types via feature is described in almost every book about SharePoint, but non of them describe how to do in correctly :) This happens mostly because the real nature of deployment content types reveals in Web Content Managed (WCM) projects, where you are working with content types inherited from publishing types. And there is no Sharepoint WCM book yet. &lt;p align=justify&gt;So, what's exactly specific in publishing content types for WCM? It's the nature on publishing types and using content types in publishing lists, such as &amp;quot;Pages&amp;quot; for example.  &lt;p align=justify&gt;&lt;a href="http://byfiles.storage.msn.com/y1pBe4xOSod8timrMlPRnOaJbkgeo8R07zsR0TMUjAbdCxtZWeDoVFxhOpU-0O-Bj_vq9v1yHzqlcE?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 0px 0px;border-right-width:0px" height=95 alt=image src="http://byfiles.storage.msn.com/y1pBe4xOSod8tjNr36o5Wi1LGquwNcszkfb7L8wK1rUzobPHRxmDlrjwpBG_QU4LLARF19NKKkSH9k?PARTNER=WRITER" width=244 align=left border=0&gt;&lt;/a&gt; &lt;p align=justify&gt;If to follow the standard practices in deployment of content types via feature, but inherited from any &amp;quot;Publishing&amp;quot; types and then add your custom content type to specific list (let's consider &amp;quot;Pages&amp;quot; list) you will find a bit strange results. &lt;p align=justify&gt;Adding new custom publishing content type pages will fail in that scenario - you will be redirected to &amp;quot;UploadPage.aspx&amp;quot; page, not to &amp;quot;CreatePage.aspx&amp;quot; page where you usually create new pages for your custom publishing content types. &lt;p align=justify&gt;The problem in that, if you create the content type inherited from publishing types, and don't specify the &amp;quot;CreatePage.aspx&amp;quot; template pages explicitly then you will loose the ability to create new pages for your content types in list toolbar menu (like on the screen above). &lt;blockquote&gt; &lt;p align=justify&gt;Actually it depends how you are adding new content type page - via Site Action menu, or via List toolbar menu. I realized that adding new page for custom publishing type fails from list toolbar menu (in default screnario), and works if you add it via Site Action menu.&lt;/blockquote&gt; &lt;p align=justify&gt;The workaround is next - add the reference to &amp;quot;CreatePage.aspx&amp;quot; template explicitly using the &amp;lt;DocumentTemplate&amp;gt; tag inside the &amp;lt;ContentType&amp;gt; feature tag. The code-snipped is following &lt;p&gt;&lt;font face=Arial size=1&gt;&amp;lt;ContentType&lt;/font&gt; &lt;p&gt;&lt;font face=Arial size=1&gt;        ID=&amp;quot;0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900&amp;lt;GUID&amp;gt;&amp;quot;&lt;br&gt;        Name=&amp;quot;my Publishing Content Type&amp;quot;&lt;br&gt;        Group=&amp;quot;my Publishing Content Type&amp;quot;&lt;br&gt;        Description=&amp;quot;Content Type inherited from Publishing Page&amp;quot;&lt;br&gt;        &amp;gt;&lt;br&gt;        &amp;lt;FieldRefs&amp;gt;&lt;br&gt;            &amp;lt;FieldRef ID=&amp;quot;{&amp;lt;GUID&amp;gt;}&amp;quot; DisplayName=&amp;quot;Title&amp;quot; Name=&amp;quot;Title&amp;quot; Sealed=&amp;quot;TRUE&amp;quot; /&amp;gt;&lt;br&gt;            &amp;lt;FieldRef ID=&amp;quot;{&amp;lt;GUID&amp;gt;}&amp;quot; DisplayName=&amp;quot;Description&amp;quot; Name=&amp;quot;Comments&amp;quot; /&amp;gt;&lt;br&gt;        &amp;lt;/FieldRefs&amp;gt;&lt;br&gt;        &lt;strong&gt;&amp;lt;DocumentTemplate TargetName =&amp;quot;/_layouts/CreatePage.aspx&amp;quot;/&amp;gt;&lt;/strong&gt; &lt;/font&gt; &lt;p&gt;&lt;font face=Arial size=1&gt;&amp;lt;/ContentType&amp;gt;&lt;/font&gt;  &lt;p&gt;When you deploy this content type via feature and add this content type to the list, &amp;quot;CreatePage.aspx&amp;quot; become available and you could create your publishing content via list toolbar menu. The work is done :)  &lt;p&gt;Another trick is how to make your publishing content type available in specific list during feature deployment. For this reason you need to use following tag inside feature deployment xml  &lt;p&gt;&amp;lt;&lt;font face=Arial size=1&gt;ContentTypeBinding &lt;br&gt;    ContentTypeId=&amp;quot;&amp;lt;LIST ID where your content type should be added&amp;gt;&amp;quot;&lt;br&gt;    ListUrl=&amp;quot;$Resources:cmscore,List_Pages_UrlName;&amp;quot;&lt;br&gt;/&amp;gt;&lt;/font&gt;  &lt;p&gt;  &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/05/20/publishing-content-types-and-missed-quot-createpage-aspx-quot-page-in-wcm-sites.aspx"&gt;Publishing Content Types and missed &amp;quot;CreatePage.aspx&amp;quot; page in WCM sites&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Publishing+Content+Types+and+missed+%22CreatePage.aspx%22+page+in+WCM+sites&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1055.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1055.entry</guid><pubDate>Tue, 20 May 2008 12:40:39 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1055/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1055.entry#comment</wfw:comment><dcterms:modified>2008-05-20T12:41:17Z</dcterms:modified></item><item><title>Sharepoint Tools Overview for Windows 2008 and Visual Studio 2008</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1047.entry</link><description>&lt;p&gt;I used to use a couple of tools in WSS/MOSS development which covered 90% of all functionality. These tools are &lt;ul&gt; &lt;li&gt;Sharepoint Spy  &lt;li&gt;WSS Extensions for Visual Studio 2005&lt;/ul&gt; &lt;p&gt;but when I switched on Windows 2008 Server + Visual Studio 2008 I noted that these tools are not supported there. Sharepoint Spy can't be installed on Windows 2008 (actually I can, but u need to use ORCA and change MSI); WSS Extensions works with VS 2005 only, and you can't use them with TFS builds. &lt;p&gt;Well... there is another reality, where you can survive without these tools :) &lt;p&gt;There I'd like to post the list of other tools which help you to substitute the Sharepoint Spy and WSS Extensions &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/tmt/Release/ProjectReleases.aspx?ReleaseId=7044"&gt;Imtech Fields Explorer&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.codeplex.com/tmt/Release/ProjectReleases.aspx?ReleaseId=10875"&gt;Imtech StsAdm Commands&lt;/a&gt; to export List definitions  &lt;li&gt;&lt;a href="http://www.codeplex.com/spi"&gt;Sharepoint Inspector&lt;/a&gt; to browse your SharePoint 2007 farm  &lt;li&gt;&lt;a href="http://www.codeplex.com/sharepointloggingspy"&gt;Sharepoint Logging Spy&lt;/a&gt; to allow real time diagnostics of multiple servers  &lt;li&gt;&lt;a href="http://blogs.msdn.com/gderun/archive/2008/01/11/sharepoint-visual-studio-project-and-deployment-templates.aspx"&gt;SharePoint Visual Studio Project and Deployment Templates&lt;/a&gt; to package SharePoint solution properly for deployment  &lt;li&gt;&lt;a href="http://www.andrewconnell.com/blog/articles/ACs-VS-SharePoint-Project-Utility-Tool-Window-for-SharePoint-Developers.aspx"&gt;Visual Studio SharePoint Project Utility Tool Window&lt;/a&gt; to customize Sharepoint content creation&lt;/ul&gt; &lt;p&gt;  &lt;p&gt;I welcome if you post in comments other tools which help you in Sharepoint development, deployment and debugging &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/05/15/sharepoint-tools-overview.aspx"&gt;Sharepoint Tools Overview for Windows 2008 and Visual Studio 2008&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Sharepoint+Tools+Overview+for+Windows+2008+and+Visual+Studio+2008&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1047.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1047.entry</guid><pubDate>Wed, 14 May 2008 13:49:17 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1047/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1047.entry#comment</wfw:comment><dcterms:modified>2008-05-14T13:53:39Z</dcterms:modified></item><item><title>CSS and ASP.NET Menu in Sharepoint</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1046.entry</link><description>&lt;p&gt;Using CSS in SharePoint differs a little bit from the standard approach we use in ASP.NET applications - some styles doesn't work as they expected to work. &lt;p&gt;The major problem is that SharePoint doesn't understand some CSS applied on ASP.NET сontrols. I stumbled over several cases. There is a simple rule how to avoid this - just use the SharePoint controls instead of ASP.NET once. In this cases CSS will be applied correctly &lt;p&gt;The nastiest thing I remember about CSS and Sharepoint is using asp:Menu control :) This control is very dodgy under normal asp.net sites, but it's double dodgy under Sharepoint. &lt;p&gt;The situation is that - you have page area height equal 100% of client browser height. It means that if you change the size of your browser window page layout height is changing too. On this page we have navigation which is implemented via &amp;lt;asp:Menu&amp;gt; control. So far so good, but there is a small issue. If you navigate on menu and dynamic sub-items are shown your page height changes and you noticing that vertical scroll bar is shown. WTF you could think :) Why this scroll bar appears?! This never happens in ASP.NET sites.  &lt;p&gt;The answer is - CSS &amp;quot;min-height&amp;quot; property. This property sets the minimum height of your page when scroll bar appears. So, what you do is just edit your page and add the .min-height: 2000 for the page's root element and test the page in browser.  &lt;p&gt;Unfortunately, situation the same - scroll bar appears when your menu items are shown. You can use IE Dev Toolbar of other tool to debug DOM model in browser, but changing this property doesn't help at all. &lt;p&gt;The issue is exactly in &amp;lt;asp:Menu&amp;gt; control. I dunno why but it breaks the page CSS style of min-height (I'd pleased if someone explain me WHY and HOW this happens?!). To fix this you need to use &amp;lt;Sharepoint:AspMenu&amp;gt; control instead of &amp;lt;asp:Menu&amp;gt; and min-height is set correctly in this case - no scroll bar when you navigate on menu. &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/05/15/css-and-asp-net-menu-in-sharepoint.aspx" target="_blank"&gt;CSS and ASP.NET Menu in Sharepoint&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+CSS+and+ASP.NET+Menu+in+Sharepoint&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1046.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1046.entry</guid><pubDate>Wed, 14 May 2008 13:15:55 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1046/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1046.entry#comment</wfw:comment><dcterms:modified>2008-05-14T13:18:12Z</dcterms:modified></item><item><title>Export Sharepoint List Definition with OCDExportList and reusing standard Views</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1045.entry</link><description>&lt;p&gt;When you are engaged in SharePoint development under Windows Server 2008 you are limited in 3rd party tools, because not all tools are working there, for example you can't use Sharepoint Spy - it requests Windows Server 2003 only (actually you can run Sharepoint Spy by modifying MSI and removing Windows version check) &lt;p&gt;There are some other tools which support Windows 2008, one of this tools is &amp;quot;&lt;a href="http://blog.mastykarz.nl/2008/02/19/export-list-definition-free-stsadm-command/" target="_blank"&gt;OCDExportList&lt;/a&gt;&amp;quot;, as you could imply from its name it allows you to export the List Definitions.  &lt;p&gt;OCDExportList is just STSADM extension which gives you list's schema xml . But, if you gonna use this schema xml in your feature deployment, you need to make some changes. &lt;p&gt;By default &amp;quot;OCDExportList&amp;quot; exports list with all views, like &amp;quot;AllItems.aspx&amp;quot; and etc, but actually in 90% cases you need to use standard views, and don't deploy custom ones. So, to deploy list and use standard views the following changes of list schema xml should be applied &lt;ol&gt; &lt;li&gt;Add SetupPath=&amp;quot;pages\form.aspx&amp;quot; for each &amp;lt;Form&amp;gt; in &amp;lt;MetaData&amp;gt;/&amp;lt;Forms&amp;gt;  &lt;li&gt;Find &amp;lt;View&amp;gt; ulr=&amp;quot;AllItems.asxp&amp;quot; and change attributes&lt;/ol&gt; &lt;ul&gt; &lt;ul&gt; &lt;li&gt;add SetupPath=&amp;quot;pages\viewpage.aspx&amp;quot;  &lt;li&gt;change &amp;quot;DisplayName&amp;quot; value on &amp;quot;$Resources:core,objectiv_schema_mwsidcamlidC24;&amp;quot;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;After that, the deployed list will use standard views &lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/05/14/export-list-definition-with-ocdexportlist-and-reusing-standard-views.aspx"&gt;Export List Definition with OCDExportList and reusing standard Views&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Export+Sharepoint+List+Definition+with+OCDExportList+and+reusing+standard+Views&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Sharepoint</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1045.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1045.entry</guid><pubDate>Wed, 14 May 2008 12:47:15 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1045/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1045.entry#comment</wfw:comment><dcterms:modified>2008-05-14T13:25:10Z</dcterms:modified></item><item><title>Attend ReMIX 08 in Sydney - Experts stand</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1035.entry</link><description>&lt;p&gt;Going to attend the &lt;a href="http://www.microsoft.com/australia/remix08/index.aspx" target="_blank"&gt;ReMIX 08 in Sydney&lt;/a&gt;. You can catch me in &amp;quot;Expert Stand&amp;quot; section during breaks. &lt;p&gt;&lt;font size=1&gt;Mirror: &lt;/font&gt;&lt;a title="Attend ReMIX 08 in Sydney - Experts stand" href="http://msmvps.com/blogs/laflour/archive/2008/05/08/attend-remix-08-in-sydney-experts-stand.aspx"&gt;&lt;font size=1&gt;Attend ReMIX 08 in Sydney - Experts stand&lt;/font&gt;&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Attend+ReMIX+08+in+Sydney+-+Experts+stand&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><category>Web</category><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1035.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1035.entry</guid><pubDate>Thu, 08 May 2008 10:41:32 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!1035/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!1035.entry#comment</wfw:comment><dcterms:modified>2008-05-08T10:42:57Z</dcterms:modified></item><item><title>Custom List: Custom List</title><link>http://laflour.spaces.live.com/Lists/cns!7575E2FFC19135B4!954</link><description>&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://twitter.com&amp;#47;laflour"&gt;Twitter account&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.facebook.com&amp;#47;profile.php&amp;#63;hiq&amp;#61;laflour"&gt;Facebook account&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://msmvps.com&amp;#47;blogs&amp;#47;laflour"&gt;Mirror blog on MSMVPS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Custom+List%3a+Custom+List&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><guid isPermaLink="false">cns!7575E2FFC19135B4!954</guid><pubDate>Thu, 06 Mar 2008 12:15:17 GMT</pubDate><msn:type>list</msn:type><live:type>list</live:type><live:typelabel>List</live:typelabel><cf:itemRSS>http://laflour.spaces.live.com/Lists/cns!7575E2FFC19135B4!954/feed.rss</cf:item