<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://byounge.spaces.live.com/mmm2008-05-17_13.22/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fbyounge.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>Brad Younge's Blog</title><description>All About Microsoft Technologies</description><link>http://byounge.spaces.live.com/</link><language>en-US</language><pubDate>Thu, 17 Jul 2008 12:39:52 GMT</pubDate><lastBuildDate>Thu, 17 Jul 2008 12:39:52 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>6671814606667300620</live:id><live:alias>byounge</live:alias></live:identity><image><title>Brad Younge's Blog</title><url>http://byfiles.storage.live.com/y1pnowDpAJM1UWbdt-LSbipnmwQ4xKKGpG4rpwLAqd8npC0MnDkl0QxvRWsaywiVUup</url><link>http://byounge.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>Logging Errors in SharePoint 2007</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!165.entry</link><description>&lt;p&gt;Quick post here… I had the need to log to the SharePoint log files found at &lt;span style="text-decoration:underline"&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\LOGS&lt;/span&gt; and had a hard time finding the 1 line of code to do it, so I thought I'd blog about it really quick.  If you have this need, use something like the following line of code:
&lt;p style="margin-left:36pt"&gt;catch(Exception myException)&lt;br&gt;{&lt;br&gt;     Microsoft.Office.Server.Diagnostics.PortalLog.LogString(&amp;quot;Exception Occurred: {0} || {1}&amp;quot;, myException.Message, myException.StackTrace); &lt;br&gt;}
&lt;p&gt;Hope this saves someone out there a bit of time searching for this…&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Logging+Errors+in+SharePoint+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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!165.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!165.entry</guid><pubDate>Mon, 10 Sep 2007 20:48:45 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!165/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!165.entry#comment</wfw:comment><dcterms:modified>2007-09-10T20:48:45Z</dcterms:modified></item><item><title>Copying, Exporting and Importing SharePoint Document Libraries</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!161.entry</link><description>&lt;p&gt;Well, it's been a while since I blogged about anything, but I've got what is hopefully going to be a good one here.  I've got a small SPS 2003 to MOSS 2007 migration project to help with over the next week or two and one aspect of the project is the need to move some documents from an SPS 2003 document library to a MOSS 2007 document library.  Generally this would be part of an upgrade process, but our client already has a MOSS 2007 farm deployed and in use and wants to slowly build out additional MOSS 2007 sites and site collections and move the documents from their old SPS 2003 server.
&lt;p&gt;I know there are a couple of ways to do this such as using the Explorer View and then Copy or Cut from one location and Past to another location, but I wanted a way to do this where I could script it out and do a couple of dry runs over the course of a week or two and then do a final cut-over one evening (the SPS 2003 farm is still in use so documents are being added and changed on a daily basis).  So, I've written a command line utility called MOSSadm.exe which does the following:
&lt;ul&gt;&lt;li&gt;Copies a document library from an SPS 2003 site (via Web Service calls) to a  MOSS 2007 document library
&lt;li&gt;Exports a document library from an SPS 2003 (via Web Service calls) to a ZIP file
&lt;li&gt;Exports a document library from a MOSS 2007 site (via the object model) to a ZIP file
&lt;li&gt;Imports a ZIP file to a MOSS 2007 document library (via the object model)
&lt;/ul&gt;&lt;p&gt;I've packaged this all up into a simple setup program which can be &lt;a href="http://temp.theyoungescom.officelive.com/downloads.aspx"&gt;DOWNLOAD HERE&lt;/a&gt;.  Once downloaded, run the Setup.exe program to install the application on your MOSS 2007 Farm.  When you run the setup, the following is done (I included this because I always like to know what's going on when I run a setup program):
&lt;ul&gt;&lt;li&gt;&lt;div&gt;The following files are put in the 12 Hive bin directory: 
&lt;/div&gt;&lt;ul&gt;&lt;li&gt;MOSSadm.exe 
&lt;li&gt;ICSharpCode.SharpZipLib.dll (complements of  ic#code… see &lt;a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/"&gt;http://www.icsharpcode.net/OpenSource/SharpZipLib/&lt;/a&gt;)
&lt;/ul&gt;&lt;li&gt;&lt;div&gt;The following files are put in the C:\Program Files\Statera\MOSSadm_Setup\WSDL Files directory:
&lt;/div&gt;&lt;ul&gt;&lt;li&gt;DocService.asmx
&lt;li&gt;DocServicedisco.aspx
&lt;li&gt;DocSerevicewsdl.aspx
&lt;li&gt;Document03Service.dll
&lt;li&gt;Readme.txt
&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;If you want to use the web service calls to download documents from an SPS 2003 server, you'll need to go read the Readme.txt file installed in the previous step.  This tells you what files to copy out to your SPS 2003 server and where to put them in order to install the web service).
&lt;p&gt;Now… as long as the 12 Hive bin directory is in your path, just open up a command prompt and type mossadm.exe.  You should get the following:
&lt;p&gt;&lt;img src="http://i184.photobucket.com/albums/x318/byounge/081207_0131_CopyingExpo1.png" alt=""&gt;
	&lt;p&gt;As the help text in the screenshot above shows you, there are 4 operations you can run (note the * next to the first two… those make use of the SPS 2003 Web Services).  If you enter in an operation, such as &lt;span style="text-decoration:underline"&gt;mossadm –o copydoclib&lt;/span&gt; then you'll get additional help text such as:
&lt;p&gt;&lt;img src="http://i184.photobucket.com/albums/x318/byounge/081207_0131_CopyingExpo2.png" alt=""&gt;
	&lt;p&gt;You're all set and ready to start using this utility.  Here are some sample commands you can now use:
&lt;ul&gt;&lt;li&gt;mossadm –o copydoclib http://www.mySps2003Svr.com &amp;quot;Some Doc Lib&amp;quot; bsmith mydomain pass@word1 http://www.myMoss2007Svr.com &amp;quot;Documents&amp;quot;
&lt;li&gt;mossadm –o exportdoclibfromwebsvc http://www.mySps2003Svr.com &amp;quot;Some Doc Lib&amp;quot; bsmith mydomain pass@word1 MyDocumentLibrary.zip
&lt;li&gt;mossadm –o exportdoclib http://www.mySps2003Svr.com &amp;quot;Some Doc Lib MyDocumentLibrary.zip
&lt;li&gt;mossadm –o importdoclib MyDocumentLibrary.zip http://www.myMoss2007Svr.com &amp;quot;Documents&amp;quot;
&lt;/ul&gt;&lt;p&gt;Additionally, you can specify a new folder within a document library to put everything such as:
&lt;ul&gt;&lt;li&gt;mossadm –o importdoclib MyDocumentLibrary.zip http://www.myMoss2007Svr.com &amp;quot;Documents/a new folder&amp;quot;
&lt;li&gt;mossadm –o importdoclib MyDocumentLibrary.zip http://www.myMoss2007Svr.com &amp;quot;Documents/a new folder/myDocs&amp;quot;
&lt;/ul&gt;&lt;p&gt;If you have any problems, please feel free to drop me a note and I'll let you know if I have a solution (please include your email address so I can get back to you easily).
&lt;p&gt;Couple Notes:
&lt;ul&gt;&lt;li&gt;This utility copies some document properties, but not all of them.  It also doesn't copy past versions and it marks the document at the destination location with your name as the creator.
&lt;li&gt;When you run the utility you must be on the MOSS 2007 server and it'll be best if you're logged in as a site administrator of the site you're interacting with.
&lt;/ul&gt;&lt;p&gt;
 &lt;h2&gt;Download Code:  &lt;a href="http://temp.theyoungescom.officelive.com/downloads.aspx"&gt;&lt;span style="color:blue;text-decoration:underline"&gt;click here&lt;/span&gt;&lt;/a&gt;
	&lt;/h2&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Copying%2c+Exporting+and+Importing+SharePoint+Document+Libraries&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!161.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!161.entry</guid><pubDate>Sun, 12 Aug 2007 01:31:19 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!161/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!161.entry#comment</wfw:comment><dcterms:modified>2007-08-12T02:06:17Z</dcterms:modified></item><item><title>Microsoft eScrum Version 1.0 for Team Foundation Server</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!152.entry</link><description>&lt;p&gt;My buddy &lt;a href="http://blog.wadewegner.com/"&gt;Wade Wegner&lt;/a&gt; just notified me of this tool from Microsoft:
&lt;p&gt;&lt;em&gt;&amp;quot;eScrum is a Web-based, end-to-end project management tool for Scrum built on the Microsoft Visual Studio Team Foundation Server platform. It provides multiple ways to interact with your Scrum project: eScrum Web-based UI, Team Explorer, and Excel or Project, via Team Foundation Office Integration. In addition, it provides a single place for all Scrum artifacts such as product backlog, sprint backlog, task management, retrospective, and reports with built-in context sensitive help.&amp;quot;
&lt;/em&gt;&lt;p&gt;To download, visit &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=55a4bde6-10a7-4c41-9938-f388c1ed15e9&amp;amp;displaylang=en&amp;amp;tm"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=55a4bde6-10a7-4c41-9938-f388c1ed15e9&amp;amp;displaylang=en&amp;amp;tm&lt;/a&gt;
	&lt;p&gt;Haven't had a chance to play with it yet, but it definitely looks very valuable!
&lt;p&gt;I also recently became aware of a Project Server 2007 VSTS Connector.  To read more about this tool and/or download the code visit   &lt;a href="http://www.codeplex.com/pstfsconnector"&gt;http://www.codeplex.com/pstfsconnector&lt;/a&gt;
	&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Microsoft+eScrum+Version+1.0+for+Team+Foundation+Server&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!152.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!152.entry</guid><pubDate>Thu, 14 Jun 2007 13:11:45 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!152/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!152.entry#comment</wfw:comment><dcterms:modified>2007-06-14T13:11:45Z</dcterms:modified></item><item><title>Localize a Date in SharePoint 2007 or WSS 3.0</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!151.entry</link><description>&lt;p&gt;One great thing about SharePoint 2007 is the ease of localizing information. Each user of a SharePoint site can change settings such as their Locale, Time zone, Calendar, etc. by selecting the &amp;quot;My Settings&amp;quot; choice that drops down when the user clicks on the Welcome link in the upper right corner of a site and then proceeds to their Regional Settings. Like this: 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060807_1826_LocalizeaDa1.png"&gt; 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060807_1826_LocalizeaDa2.png"&gt; 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060807_1826_LocalizeaDa3.png"&gt; 
&lt;p&gt;If the user selects a different Locale such as &amp;quot;English (New Zealand)&amp;quot;, then they will see dates formatted the way they are use to. For example, May 30&lt;sup&gt;th&lt;/sup&gt;, 2007 is displayed as &amp;quot;30/04/2007&amp;quot;. This works great with all of the OOTB SharePoint pages and web parts (as far as I know), but if you develop your own page or web part, you'll need to write a little localization code to have the date display correctly. Here's some example code to convert the date in the example above appropriately for each user of the site: 
&lt;p&gt; 
&lt;div&gt;
&lt;table style="border-collapse:collapse" border=0&gt;
&lt;colgroup&gt;
&lt;col style="width:638px"&gt;
&lt;tbody valign=top&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;border-top:black 0.5pt solid;border-left:black 0.5pt solid;border-bottom:black 0.5pt solid"&gt;
&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:teal"&gt;DateTime&lt;/span&gt; dtSomeDate = &lt;span style="color:teal"&gt;DateTime&lt;/span&gt;.Today;&lt;br&gt;if (&lt;span style="color:teal"&gt;SPContext&lt;/span&gt;.Current.Web.CurrentUser.RegionalSettings != null)&lt;br&gt;{&lt;br&gt;&lt;span style="color:blue"&gt;int&lt;/span&gt; iCultureId = &lt;span style="color:teal"&gt;Convert&lt;/span&gt;.ToInt32(&lt;span style="color:teal"&gt;SPContext&lt;/span&gt;.Current.Web.CurrentUser.RegionalSettings.LocaleId);&lt;br&gt;&lt;span style="color:teal"&gt;Label&lt;/span&gt; lblLocalizedDate = &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;Label&lt;/span&gt;();&lt;br&gt;lblLocalizedDate.Text = dtSomeDate.ToString(&lt;span style="color:maroon"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;, &lt;span style="color:blue"&gt;new&lt;/span&gt; System.Globalization.&lt;span style="color:teal"&gt;CultureInfo&lt;/span&gt;(iCultureId));&lt;br&gt;}&lt;br&gt;else&lt;br&gt;{&lt;br&gt;lblLocalizedDate.Text = dtSomeDate.ToString(&lt;span style="color:maroon"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;);&lt;br&gt;}&lt;br&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;  If you also want to adjust the time to the person's Time Zone, you'll need to write a little bit more code, but I'll blog about that some other day. &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Localize+a+Date+in+SharePoint+2007+or+WSS+3.0&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>SharePoint 2007 &amp; WSS 3.0</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!151.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!151.entry</guid><pubDate>Fri, 08 Jun 2007 18:26:20 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!151/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!151.entry#comment</wfw:comment><dcterms:modified>2007-06-09T02:17:30Z</dcterms:modified></item><item><title>If Having Problems with Visual Studio Extensions for WSS 3.0</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!150.entry</link><description>&lt;p&gt;I just posted a blog about how I re-organized a bunch of code into multiple projects to get past some deployment issues I was having with Visual Studio Extensions for WSS 3.0, but have since found what *may* have been one of my problems over the past couple of weeks (though I'm sure it wasn't my only problem). Turns out that if you have a comment in the &amp;lt;Lists&amp;gt; section of your onet.xml file, sometimes (not always – though – very wired) Visual Studio will throw an exception stating that an &amp;quot;object reference not set to an instance of an object&amp;quot;. 
&lt;p&gt;For example, if your onet.xml file looks like this, you *may* get the object reference not set to an instance of an object error: 
&lt;div&gt;
&lt;table style="border-collapse:collapse" border=0&gt;
&lt;colgroup&gt;
&lt;col style="width:638px"&gt;
&lt;tbody valign=top&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;border-top:black 0.5pt solid;border-left:black 0.5pt solid;border-bottom:black 0.5pt solid"&gt;
&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Lists&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;List&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;FeatureId&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;00BFEA71-E717-4E80-AA17-D0C71B360101&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Type&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;101&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Title&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Templates&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Url&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Templates&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; /&amp;gt;&lt;br&gt;&lt;span style="background-color:yellow"&gt;&amp;lt;!--&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;background-color:yellow"&gt; Create a List for the Afe Attachments &lt;/span&gt;&lt;span style="color:blue"&gt;&lt;span style="background-color:yellow"&gt;--&amp;gt;&lt;/span&gt;&lt;br&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;List&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;FeatureId&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;ba2bb031-da03-4b55-9e38-170ae9edc59e&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Type&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;101&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Title&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;AFEAttachments&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Url&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;AfeAttachments&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; /&amp;gt;&lt;br&gt;…&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Lists&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt; 
&lt;p&gt;If you remove the highlighted comment, it works! Adding comments to other areas of your onet.xml file may also cause issues, but I haven't tested all the different areas to see where it is problematic. If anyone else comes across any other areas, I'd love to get a comment from you. &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+If+Having+Problems+with+Visual+Studio+Extensions+for+WSS+3.0&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>SharePoint 2007 &amp; WSS 3.0</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!150.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!150.entry</guid><pubDate>Fri, 08 Jun 2007 14:36:01 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!150/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!150.entry#comment</wfw:comment><dcterms:modified>2007-06-08T19:35:57Z</dcterms:modified></item><item><title>Tip if Having Problems with Visual Studio Extensions for Windows SharePoint Services 3.0</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!149.entry</link><description>&lt;p&gt;Over the past several weeks, I have been having some serious headaches using the Visual Studio Extensions for WSS 3.0 and it came to a climax today. For a project I'm working on, we have the need to create several content types, several Custom Lists based on these content types, and then a Site Definition that makes use of these content types and lists. I've put a good amount of time into creating a Visual Studio project with several &amp;quot;Project Items&amp;quot; based on the &amp;quot;Visual C# Project Items – SharePoint&amp;quot; templates that get installed with the mentioned extensions, image shown here: 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060807_1417_TipifHaving1.png"&gt; 
&lt;p&gt;In summary, I performed the following steps to get where I'm at now: 
&lt;ol&gt;
&lt;li&gt;Create a new VS C# Project based on the &amp;quot;Blank Site Definition&amp;quot; template 
&lt;li&gt;Added 4 content type items 
&lt;li&gt;Added 9 list definitions (some of which are based on the content types I created) &lt;/ol&gt;
&lt;p&gt;One of the great things about the VS Extensions for WSS is that as I wrote the content types, lists and site definition, I could easily deploy everything to my local SharePoint site collection by right-clicking on the VS Project and selecting deploy. 
&lt;p&gt;Things went pretty well for a couple of weeks, but then I started getting the following error when I tried to deploy: &amp;quot;object reference not set to an instance of an object&amp;quot;. The error was NOT an error with my code (I know - bold statement), but instead was an exception being thrown by Visual Studio. You see, when you choose to deploy to project, VS actually has to do a good amount of work to re-organize all of the files you've created, create a manifest, create the actual .wsp file (SharePoint Solution File) and then a batch script (setup.bat) which is executed after all is done to actually deploy your SharePoint *stuff* to the server. The exception was occurring during the step within Visual Studio that creates the .wsp and setup.bat files. 
&lt;p&gt;For a few weeks I was able to get past this problem by shutting down and then re-launching Visual Studio and then try deploying again and whola… it would work. Lately, however, the problem started occurring more and more often and has gotten harder and harder to work around. Yesterday, it got so bad that my workaround became: 
&lt;ol&gt;
&lt;li&gt;Check all code into TFS 
&lt;li&gt;Shut down Visual Studio 
&lt;li&gt;Delete the local copy of my code 
&lt;li&gt;Launch Visual Studio and do an Open from Source Control to get the code 
&lt;li&gt;Run the Deploy – and it would work… not a single change to any of code or CAML &lt;/ol&gt;
&lt;p&gt;Then, if I made even the smallest, most insignificant change to any of the files in this project, the Deploy would fail and I'd have to go through the above steps again. 
&lt;p&gt;Well… today it got even worse. Now, I can't get it to deploy at all!!! Even if I roll back all my changes to a version that was deploying fine this morning, it still doesn't work… Ugh. 
&lt;p&gt;So, over the past 2 hours I've been trying to narrow down the problem by excluding directories in the project (which I had tried before), and narrowed it down to the Site Definition folder. If it's included in the project, the Deploy fails. If it's NOT included in the project, the Deploy works. 
&lt;p&gt;-----------------------------------------------------------------------------------------------&lt;br&gt;----- Took a break here to figure out what's causing the problem ------&lt;br&gt;----------------------------------------------------------------------------------------------- 
&lt;p&gt;OK… I'm back, and I've got a &amp;quot;kind-of-ok&amp;quot; solution, so here it is: 
&lt;ol&gt;
&lt;li&gt;Since I had so many Content Type and List definitions in the existing project, I created a new project just for the site definition 
&lt;li&gt;Now that there's no Site Definition in my original project, I had to remove all the instances of my lists, or they'd get created at the Site Collection Root, which is not where I want them. So, I went through each of the list directories in my original project and if there was a file by the name of &amp;quot;instance.xml&amp;quot;, I excluded it from the project. 
&lt;li&gt;In my new project, I updated the default.aspx and onet.xml files with the contents of the default.aspx and onet.xml files in my original project (which are now excluded from the original project, but I kept them on the hard drive just for this reason). 
&lt;li&gt;Things are looking good, and both projects are deploying well, but now since the Site Definition and all of the List Definitions are in separate Visual Studio Projects, Visual Studio will no longer do the leg work to make sure that each of the list definitions (which were implemented as Features) are activated in the Web when it gets created, nor will it do the work that creates the instances of the lists which I want instances of. So, I needed to add 2 lines to the onet.xml file in my Site Definition project for each List Definition I wanted to have activated and an instance created for. Those lines are shown below – highlighted. &lt;/ol&gt;
&lt;div&gt;
&lt;table style="border-collapse:collapse" border=0&gt;
&lt;colgroup&gt;
&lt;col style="width:638px"&gt;
&lt;tbody valign=top&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;border-top:black 0.5pt solid;border-left:black 0.5pt solid;border-bottom:black 0.5pt solid"&gt;
&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Configurations&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Configuration&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Blank&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Modules&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Module&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;DefaultBlank&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Module&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;UploadTempate&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Modules&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;SiteFeatures&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;!--&lt;/span&gt;&lt;span style="color:green"&gt; BasicWebParts Feature &lt;/span&gt;&lt;span style="color:blue"&gt;--&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Feature&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;00BFEA71-1C5E-4A24-B310-BA51C3EB7A57&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;!--&lt;/span&gt;&lt;span style="color:green"&gt; Three-state Workflow Feature &lt;/span&gt;&lt;span style="color:blue"&gt;--&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Feature&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;FDE5D850-671E-4143-950A-87B473922DC7&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;SiteFeatures&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;WebFeatures&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Feature&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;00BFEA71-4EA5-48D4-A4AD-7EA5C011ABE5&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;!--&lt;/span&gt;&lt;span style="color:green"&gt; TeamCollab Feature &lt;/span&gt;&lt;span style="color:blue"&gt;--&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Feature&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;F41CC668-37E5-4743-B4A8-74D1DB3FD8A4&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;           &amp;lt;!--&lt;/span&gt;&lt;span style="color:green"&gt; MobilityRedirect &lt;/span&gt;&lt;span style="color:blue"&gt;--&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &lt;span style="background-color:yellow"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#a31515;background-color:yellow"&gt;Feature&lt;/span&gt;&lt;span style="color:blue;background-color:yellow"&gt; &lt;/span&gt;&lt;span style="color:red;background-color:yellow"&gt;ID&lt;/span&gt;&lt;span style="color:blue;background-color:yellow"&gt;=&lt;/span&gt;&lt;span style="background-color:yellow"&gt;&amp;quot;&lt;span style="color:blue"&gt;ba2bb031-da03-4b55-9e38-170ae9edc59e&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &lt;span style="background-color:yellow"&gt;&amp;lt;!--&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;background-color:yellow"&gt; AFE Attachmetns&lt;/span&gt;&lt;span style="color:blue"&gt;&lt;span style="background-color:yellow"&gt;--&amp;gt;&lt;/span&gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;WebFeatures&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Lists&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;List&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;FeatureId&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;00BFEA71-E717-4E80-AA17-D0C71B360101&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Type&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;101&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Title&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Templates&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Url&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Templates&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &lt;span style="background-color:yellow"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#a31515;background-color:yellow"&gt;List&lt;/span&gt;&lt;span style="color:blue;background-color:yellow"&gt; &lt;/span&gt;&lt;span style="color:red;background-color:yellow"&gt;FeatureId&lt;/span&gt;&lt;span style="color:blue;background-color:yellow"&gt;=&lt;/span&gt;&lt;span style="background-color:yellow"&gt;&amp;quot;&lt;span style="color:blue"&gt;ba2bb031-da03-4b55-9e38-170ae9edc59e&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Type&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;101&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Title&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;AFEAttachments&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:red"&gt;Url&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;AfeAttachments&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Lists&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Configuration&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Configurations&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;&lt;span style="font-size:8pt"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Courier New"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;  
&lt;p&gt;In the code above, there are two things to note: 
&lt;ol&gt;
&lt;li&gt;The Feature Id can be found near the top of the schema.xml file for the list in a comment line (which Visual Studio uses to create the wsp package):&lt;br&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:green"&gt; _filecategory=&amp;quot;ListDefinition&amp;quot; _filetype=&amp;quot;Schema&amp;quot; _filename=&amp;quot;schema.xml&amp;quot; _uniqueid=&amp;quot;&lt;span style="background-color:yellow"&gt;ba2bb031-da03-4b55-9e38-170ae9edc59e&lt;/span&gt;&amp;quot; &lt;/span&gt;&lt;span style="color:blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt; 
&lt;li&gt;Be sure that you move the &amp;lt;Lists&amp;gt; section to be BELOW the &amp;lt;SiteFeatures&amp;gt; and &amp;lt;WebFeatures&amp;gt; section since the feature needs to be activated in the web before a list can be created based on the feature. &lt;/ol&gt;
&lt;p&gt;Now that I have my code re-organized in Visual Studio as stated above, deployment is very smooth. However, it has only been one day since I re-organized as stated above, so only time will tell if this is more stable than my original organization. If this turns out to be troublesome after a few days or weeks, I'll be sure to blog about what I find then. &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Tip+if+Having+Problems+with+Visual+Studio+Extensions+for+Windows+SharePoint+Services+3.0&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>SharePoint 2007 &amp; WSS 3.0</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!149.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!149.entry</guid><pubDate>Fri, 08 Jun 2007 14:17:28 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!149/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!149.entry#comment</wfw:comment><dcterms:modified>2007-06-09T02:18:58Z</dcterms:modified></item><item><title>Profile Linked Content Query in MOSS 2007</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!145.entry</link><description>&lt;p&gt;Earlier this year, I had the opportunity to create a MOSS 2007 web part for a client which integrates information from the current user's profile with a MOSS Search Query in order to find information most relevant to the current user (similar to the Personalized Content Objects in CMS). For example, the client has offices all over the world, and one of the things they wanted to do was have a &amp;quot;Most recent content additions&amp;quot; page which would show the most recent information added to the portal, filtered by the region that the information was targeted to (e.g. North America, Europe, Asia, Middle East, Africa, etc.). I accomplished this through the implementation of a web part that could be placed on any page and configured by the content manager for the site. The web part turned out pretty well, and the other day a couple guys I've worked with over the years from MCS, Henry Winkler and Matt Fangman, asked if I'd be up for blogging about it, so that brings me here. 
&lt;h2&gt;The Problem &lt;/h2&gt;
&lt;p&gt;At first glance, we thought we'd use audiences, which seems to be the obvious choice, to target the content as described above, but when we dove a bit deeper into the customer's requirements, it was apparent that as soon as we started adding additional filter criteria such as current user job role and primary technology of interest, that the number of audiences which would be needed increased exponentially, making correct categorization of content extremely difficult (because when you post content, you need to choose each and every audience that the content should be targeted to). Let me give you an example: 
&lt;p&gt;Let's say that we wanted to create a page which would be called &amp;quot;Recent Postings in your Region related to your Job&amp;quot;. This page would display content with the following criteria: 
&lt;ul&gt;
&lt;li&gt;Region = current user's region (North America, Europe, Asia) 
&lt;li&gt;Job Role = current user's job role (Project Manager, Engineer, Tester, Accounting) 
&lt;li&gt;Primary Technology = current user's primary technology (MOSS, Microsoft Dynamics, BizTalk, Portfolio Server) &lt;/ul&gt;
&lt;p&gt;With just the example choices given above, if we wanted to use audiences to target this information, we would need to create 48 audiences (3*4*4) to cover all of the possible combinations. If we added just one more region, such as Africa, then the number or audiences would increase to 64 (4*4*4). In case this isn't entirely obvious, here are the first few audiences we would need: 
&lt;ul&gt;
&lt;li&gt;North America Project Managers for MOSS 
&lt;li&gt;North America Project Managers for Dynamics 
&lt;li&gt;North America Project Managers for BizTalk 
&lt;li&gt;North America Project Managers for Portfolio Server 
&lt;li&gt;North America Engineer for MOSS 
&lt;li&gt;… &lt;/ul&gt;
&lt;p&gt;Taking this one step further, if we had 12 regions, 8 job roles and 15 technologies, we'd need 1440 audiences, not going to happen. 
&lt;h2&gt;The Solution &lt;/h2&gt;
&lt;p&gt;So, we needed to come up with a different solution. Without much discussion, it was obvious that the best thing to do was going to be looking up information from current user's profile and combining this with a MOSS SQL Search query to find the relevant information. Luckily for us, there was a parallel Microsoft Identity Integration Server project (see &lt;a href="http://www.microsoft.com/miis"&gt;http://www.microsoft.com/miis&lt;/a&gt;) being implemented which would provide all of the profile information we were going to need, so we didn't have to worry about populating this information within the scope of our project. 
&lt;p&gt;Now that we had a good approach, it was merely a matter of implementing the web part and providing the content manager a way to &amp;quot;match up&amp;quot; content metadata with the user's profile attributes. This was achieved relatively easily with the use of the MOSS Enterprise Search SQL Syntax (see &lt;a href="http://msdn2.microsoft.com/en-us/library/ms493660.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms493660.aspx&lt;/a&gt;) query capabilities and a little bit of code to structure the query appropriately before sending it off to the search server. 
&lt;p&gt;So, for the example above, we can get the region, job role and primary technology out of the user's profile (e.g. Asia, Engineer &amp;amp; MOSS), inject the values into the search query, execute the search and then display the results. 
&lt;p&gt;The resulting web part turned out very well and has been successfully deployed to a number of sites and site collections. Since initial deployment, the web part has been extended so that the content manager can further filter on things such as content type, search scope or keywords. 
&lt;h2&gt;The Result &lt;/h2&gt;
&lt;p&gt;If you plan to read further through this blog, you'll probably want to download the Visual Studio Solution I've made available so you can follow my code examples (there's too much code to blog about everything, so I'm just going to focus on the things pertinent to this post). To download a Zip file of the Visual Studio 2005 Solution, go to my &lt;a href="http://temp.theyoungescom.officelive.com/downloads.aspx"&gt;Office Live Site Download Page&lt;/a&gt; and click on the QueryForIt.img link (&lt;span style="color:red"&gt;2 IMPORTANT NOTES: 1. I had to rename the file to have a *.img extension in order to get it to work, so after you download the QueryForIt.img file, rename it to QueryForIt.zip before opening. 2. When you build the solution, you must switch your build configuration to RELEASE or the post-build commands will fail – or you can go edit the DDF file&lt;/span&gt;). 
&lt;p&gt;The code is spread across several files, but this is primarily due to the fact that I used some existing custom toolparts plus one just for this web part as well as a couple of helper classes to do some dirty work. Here's a breakdown of the code: 
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Visual Studio Project (Statera.Moss.Webparts.QueryForIt) &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Source (directory) &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;LookupListAndChoiceHelpers (directory with helper classes) 
&lt;li&gt;Toolparts (directory with copies of the existing custom toolparts I created) 
&lt;li&gt;FilterChooserToolpart.cs (new custom toolpart created for this web part) 
&lt;li&gt;PersonalizedQueryHelper.cs (very small class used to bind to the SPGridView for display purposes) 
&lt;li&gt;&lt;strong&gt;QueryForIt.cs (the main code for the web part) &lt;/strong&gt;&lt;/ul&gt;
&lt;li&gt;manifest.xml – Manifest file for deployment (see very end of post) 
&lt;li&gt;Statera.Moss.Webparts.QueryForIt.ddf – input file for the makecab utility in order to create a SharePoint solution (see very end of post) &lt;/ul&gt;&lt;/ul&gt;
&lt;h2&gt;The Custom Toolparts &lt;/h2&gt;
&lt;p&gt;In order to make configuration of the web part as easy as possible, I create a few custom toolparts to be used when modifying the web part. These custom toolparts' functionality include: 
&lt;ol&gt;
&lt;li&gt;Ability to select which Content Types should be searched 
&lt;li&gt;Ability to select which Search Scope to be searched 
&lt;li&gt;Ability to further filter results with an additional Query Phrase (keyword search) 
&lt;li&gt;Ability to select which columns are displayed in the search results 
&lt;li&gt;The column which the results should initially be sorted by and which direction 
&lt;li&gt;An advanced query phrase (this is where you can link in information from the user profile) &lt;/ol&gt;
&lt;p&gt;Here are some screenshots of what the toolparts look like: 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060407_2237_ProfileLink1.png"&gt; &lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060407_2237_ProfileLink2.png"&gt; 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060407_2237_ProfileLink3.png"&gt; 
&lt;p&gt;The third image above titled &amp;quot;Filter &amp;amp; Customize Output&amp;quot; is where the user can input a keyword, select the columns to display, and finally enter an &amp;quot;Advanced Query&amp;quot;. The &amp;quot;Advanced Query&amp;quot; textbox is where the content manager would write the code which will be injected into the SQL Syntax Search Query. The syntax for this &amp;quot;Advanced Query&amp;quot; textbox is very specific and is explained in the comment below the textbox. (I know… this isn't very user friendly, but I wasn't expecting the typical content administrator to be modifying this web part. If you were expecting this, then this custom toolpart could be extended to be much more user friendly). 
&lt;h2&gt;Integrating User Profile Information with the Enterprise SQL Search &lt;/h2&gt;
&lt;p&gt;Once the toolparts were created, the next step was to implement the actual web part which would integrate the current user's profile information with a basic SQL Query. I started with a base web part with properties to hold the information provided by the toolparts above and then wrote the code to create and then execute the query. Here are a few code snippets of how the query is created and executed (if you want to make fun of my variable naming techniques, go ahead… habits are hard to break): 
&lt;div&gt;
&lt;table style="border-collapse:collapse" border=0&gt;
&lt;colgroup&gt;
&lt;col style="width:638px"&gt;
&lt;tbody valign=top&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;border-top:black 0.5pt solid;border-left:black 0.5pt solid;border-bottom:black 0.5pt solid"&gt;
&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;private &lt;/span&gt;&lt;span style="color:#2b91af"&gt;PersonalizedQueryHelper&lt;/span&gt;&lt;span style="color:blue"&gt; GetPersonalizedQueryHelperClass() &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:#2b91af"&gt;DataSet&lt;/span&gt;&lt;span style="color:blue"&gt; mySearchQueryResultsDS = new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;DataSet&lt;/span&gt;&lt;span style="color:blue"&gt;(&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;MyMetaDataDS&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;try &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    &lt;/span&gt;&lt;span style="color:green"&gt;//----------------------------------------------------------- &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    &lt;/span&gt;&lt;span style="color:green"&gt;// Execute the query &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    &lt;/span&gt;&lt;span style="color:green"&gt;//----------------------------------------------------------- &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    &lt;/span&gt;&lt;span style="color:#2b91af"&gt;FullTextSqlQuery&lt;/span&gt;&lt;span style="color:blue"&gt; kRequest = new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;FullTextSqlQuery&lt;/span&gt;&lt;span style="color:blue"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af"&gt;ServerContext&lt;/span&gt;&lt;span style="color:blue"&gt;.Current); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;&lt;strong&gt;    kRequest.QueryText = &lt;span style="text-decoration:underline"&gt;SQLQueryToExecute&lt;/span&gt;; &lt;br&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    kRequest.TrimDuplicates = false; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    kRequest.ResultTypes |= &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ResultType&lt;/span&gt;&lt;span style="color:blue"&gt;.RelevantResults; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    kRequest.RowLimit = _iResultLimit; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ResultTableCollection&lt;/span&gt;&lt;span style="color:blue"&gt; resultTbls = kRequest.Execute(); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    if ((int)&lt;/span&gt;&lt;span style="color:#2b91af"&gt;ResultType&lt;/span&gt;&lt;span style="color:blue"&gt;.RelevantResults != 0) &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ResultTable&lt;/span&gt;&lt;span style="color:blue"&gt; tblResult = resultTbls[&lt;/span&gt;&lt;span style="color:#2b91af"&gt;ResultType&lt;/span&gt;&lt;span style="color:blue"&gt;.RelevantResults]; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        if (tblResult.TotalRows == 0) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &lt;/span&gt;&lt;span style="color:green"&gt;// NO RESULTS &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;PersonalizedQueryHelper&lt;/span&gt;&lt;span style="color:blue"&gt; myPersonalizedQueryHelperEmpty = new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;PersonalizedQueryHelper&lt;/span&gt;&lt;span style="color:blue"&gt;(); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;            return myPersonalizedQueryHelperEmpty; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        else &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &lt;/span&gt;&lt;span style="color:green"&gt;// Get the results, put them in a Datatable and create an instance of MetadataBrowserHelper &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;DataTable&lt;/span&gt;&lt;span style="color:blue"&gt; relResultsTbl = new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;DataTable&lt;/span&gt;&lt;span style="color:blue"&gt;(); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            relResultsTbl.TableName = &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;TheSearchResults&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;            mySearchQueryResultsDS.Tables.Add(relResultsTbl); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            mySearchQueryResultsDS.Load(tblResult, &lt;/span&gt;&lt;span style="color:#2b91af"&gt;LoadOption&lt;/span&gt;&lt;span style="color:blue"&gt;.OverwriteChanges, relResultsTbl); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;} &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;catch (&lt;/span&gt;&lt;span style="color:#2b91af"&gt;Exception&lt;/span&gt;&lt;span style="color:blue"&gt; myExc) &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;    _lblQueryResult.Text = &lt;/span&gt;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;&lt;span style="color:blue"&gt;.Format(&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;The following error occurred while trying to execute the search query for this web part. If the problem continues, please contact your administrator: {0}&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;, myExc.Message); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;} &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;… &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;} &lt;/span&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;border-top:medium none;border-left:black 0.5pt solid;border-bottom:black 0.5pt solid"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:blue"&gt;public string SQLQueryToExecute &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    get &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        … &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &lt;/span&gt;&lt;span style="color:green"&gt;//----------------------------------------------------------- &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &lt;/span&gt;&lt;span style="color:green"&gt;// Create the Personal Query filter if applicable for the WHERE CLAUSE &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &lt;/span&gt;&lt;span style="color:green"&gt;//----------------------------------------------------------- &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        string sPersonalizedWhereClause = &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        if (_sPersonalFilters != null) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;            foreach (string sFilter in _sPersonalFilters) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;            { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;                if (sFilter.IndexOf(&lt;/span&gt;&lt;span style="color:#a31515"&gt;':'&lt;/span&gt;&lt;span style="color:blue"&gt;) &amp;gt; 0) &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;                    string sMetaDataField = sFilter.Split(&lt;/span&gt;&lt;span style="color:#a31515"&gt;':'&lt;/span&gt;&lt;span style="color:blue"&gt;)[0]; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;                    string sProfileField = sFilter.Split(&lt;/span&gt;&lt;span style="color:#a31515"&gt;':'&lt;/span&gt;&lt;span style="color:blue"&gt;)[1]; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                    string sProfileFieldValue = &lt;span style="text-decoration:underline"&gt;&lt;strong&gt;GetCurrentUserProfileProperty&lt;/strong&gt;&lt;/span&gt;(sProfileField); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                    if (sProfileFieldValue.Length &amp;gt; 0) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                    { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                        if (sPersonalizedWhereClause.Length == 0) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;                            sPersonalizedWhereClause += string.Format(&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot; {0} = '{1}' &amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;, sMetaDataField, sProfileFieldValue); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                        else &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;                            sPersonalizedWhereClause += string.Format(&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot; AND {0} = '{1}' &amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;, sMetaDataField, sProfileFieldValue); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                    } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;                } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;            } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        string sKeywordsWhereClause = &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        if (_sKeywords.Length &amp;gt; 0) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;            sKeywordsWhereClause += string.Format(&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot; CONTAINS('\&amp;quot;{0}\&amp;quot;') &amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;, _sKeywords); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;… &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;} &lt;/span&gt;
&lt;tr&gt;
&lt;td style="border-right:black 0.5pt solid;border-top:medium none;border-left:black 0.5pt solid;border-bottom:black 0.5pt solid"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:blue"&gt;private string GetCurrentUserProfileProperty(string sKey) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    try &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &lt;/span&gt;&lt;span style="color:#2b91af"&gt;UserProfileManager&lt;/span&gt;&lt;span style="color:blue"&gt; profileManager = new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;UserProfileManager&lt;/span&gt;&lt;span style="color:blue"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af"&gt;ServerContext&lt;/span&gt;&lt;span style="color:blue"&gt;.Current); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt"&gt;&lt;span style="color:blue"&gt;        &lt;/span&gt;&lt;span style="color:#2b91af"&gt;UserProfile&lt;/span&gt;&lt;span style="color:blue"&gt; myCurrentUserProfile = profileManager.GetUserProfile(&lt;/span&gt;&lt;span style="color:#2b91af"&gt;SPContext&lt;/span&gt;&lt;span style="color:blue"&gt;.Current.Web.CurrentUser.LoginName); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        return myCurrentUserProfile[sKey].Value.ToString(); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    catch &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;        return string.Empty; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;    } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue"&gt;} &lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;  
&lt;p&gt;The first box of code above contains the code used to actually execute the Enterprise Search using the SQL syntax. The second box of code above contains the code which is used to generate the part of the SQL where clause containing information from the user's profile. And the third box of code shows the few lines it takes to actually retrieve the info from the current user's profile. 
&lt;h2&gt;Formatting of Search Results &lt;/h2&gt;
&lt;p&gt;If you've gotten this far through this post, then you're here for the long haul, so I should point out that the results returned from the SQL Search are not quite ready for being displayed. When result content contains either site columns of type &amp;quot;Option&amp;quot; or &amp;quot;Lookup&amp;quot;, the results returned from search are not always textual, but sometimes are integers (representing the ID of the actual choice that was made). Furthermore, if the possible values are Multi-select, then the results returned from the Search Query are delimitated with ';#'. In order to convert these results to more friendly strings, I had to write the FixLookupAndMultiChoiceColumns() method which exists in the Util.cs file (not shown in this post). If you look at this method, you'll notice that I look through all of the results returned from the search and correct the columns that need correcting. Something to note: when I first wrote this method I was a little concerned with performance, but once I got to testing it, it appeared to be just fine. 
&lt;h2&gt;Binding the Search Results to an SPGridView &lt;/h2&gt;
&lt;p&gt;Now that I have the results, I wanted to display them in a grid which had both sorting and paging functionality. I've written a lot of .NET code over the years and this use to be kind of a pain in the butt task that we all had to do. Luckily, though, with the implementation of the GridView class in .NET 2.0, and the extension of this component by WSS 3.0 to the SPGridView class, I'm able to do this without writing any paging or sorting code. However, this isn't so straight forward when you have to write all of the code within a web part and don't have use of code-in-front, but I'm not going to get into it in detail here, but you can read my posting titled &lt;a href="http://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!139.entry"&gt;My Memberships Web Part for WSS 3.0&lt;/a&gt; to get a bit more information about how I accomplished this with the use of an the SPGridView and an ObjectDataSource. 
&lt;h2&gt;Deploying the Web Part with a SharePoint Solution &lt;/h2&gt;
&lt;p&gt;In addition to writing the code for the web part, I also setup the Visual Studio solution so that a SharePoint solution (.wsp) file would be created for easy deployment to SharePoint whenever you run a build. This was accomplished by doing the following: 
&lt;ol&gt;
&lt;li&gt;Create a Manifest file and place it in the Visual Studio Project (manifest.xml) 
&lt;li&gt;Create a DDF file for the makecab utility to use and place it in the Visual Studio Project (Statera.Moss.Webparts.QueryForIt.ddf) 
&lt;li&gt;Add the following two lines to the post build event command line (Build Event tab of the project properties) so that the WSP file specified in the DDF file gets created with every build:&lt;br&gt;&lt;span style="font-size:8pt;color:blue"&gt;cd $(ProjectDir)&lt;br&gt;makecab /f Statera.Moss.Webparts.QueryForIt.ddf&lt;/span&gt; &lt;/ol&gt;
&lt;p&gt;Now, every time I run a build, the Statera.Moss.Webparts.QueryForIt.wsp file gets created. 
&lt;p&gt;To add and deploy this solution to a SharePoint 2007 web, you need to follow these steps: 
&lt;ol&gt;
&lt;li&gt;Copy the wsp file (provided in the ZIP file I posted) to the SharePoint server and then execute the following STSADM commands from the command line: &lt;br&gt;&lt;span style="font-size:8pt;color:blue"&gt;stsadm –o addsolution –filename Statera.Moss.Webparts.QueryForIt.wsp&lt;br&gt;stsadm –o deploysolution –name Statera.Moss.Webparts.QueryForIt.wsp –immediate –allcontenturls \&lt;br&gt;&lt;/span&gt;NOTE: for some reason, if you copy and paste the above two lines into a command prompt, it won't work. You need to type them out by hand.&lt;br&gt;NOTE: when you deploy this solution, the you have to deploy it to a specific Web App, and the DLLs go into the web app's bin directory instead of the GAC – long story there… still trying to figure out the problem… something to do with my Namespace is too deep - I think) 
&lt;li&gt;Add the web part to the list of web parts for the Site Collection 
&lt;li&gt;Add the web part to a page 
&lt;li&gt;Modify the web part and setup the properties. Most of these properties are self explanatory except for the &amp;quot;Advanced Query&amp;quot; textbox, but I've provided some instructions below it (as mentioned before).&lt;br&gt;Note: in order to use a metadata property within the Advanced Query (e.g. &amp;quot;region&amp;quot; in the screenshots above), the metadata property must be added to the list of &amp;quot;Metadata Property Mappings&amp;quot; in the configuration of the Search Server for the SSP (go to &amp;quot;Shared Service Administration &lt;span style="font-family:Wingdings"&gt;à&lt;/span&gt; Search Settings &lt;span style="font-family:Wingdings"&gt;à&lt;/span&gt; Metadata property mappings&amp;quot; and add any and all properties you want to be able to query by to the list of properties). &lt;/ol&gt;
&lt;h2&gt;Bonus: From Date &amp;amp; To Date Connected Web Parts &lt;/h2&gt;
&lt;p&gt;In addition to the functionality already mentioned, I also added the ability to connect up to two Date Filter web parts. You would do this if you wanted to limit the results to say, postings or modifications over the past 7 days. To do this, you would add two date filter web parts to the page, set their default values accordingly, and then connect them to the &amp;quot;FromDate&amp;quot; and &amp;quot;ToDate&amp;quot; properties on this web part. 
&lt;h2&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Well… that pretty much covers it. Here's a screenshot of the final web part in use with the results sorted by the created date descending. Note that since I'm using the SPGridView, I didn't have to write any sort of formatting code within my web part, it all gets taken care of so the grid matches other grids within SharePoint (and if the CSS files are customized, those customizations will be applied to this web part as well). 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060407_2237_ProfileLink4.png"&gt; 
&lt;p&gt;If you download the code and make any cool additions to it, I'd love to get a copy of what you did. Just send me an email at: &lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060407_2237_ProfileLink5.png"&gt; 
&lt;p&gt;Check out &lt;a href="http://blog.wadewegner.com/"&gt;Wade Wegner's blog &lt;/a&gt;for great information on Commerce Server 2007.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Profile+Linked+Content+Query+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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>SharePoint 2007 &amp; WSS 3.0</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!145.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!145.entry</guid><pubDate>Mon, 04 Jun 2007 22:37:08 GMT</pubDate><slash:comments>30</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!145/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!145.entry#comment</wfw:comment><dcterms:modified>2007-06-26T14:16:41Z</dcterms:modified></item><item><title>Got my own Office Live Basics site now…</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!144.entry</link><description>&lt;p&gt;Something I've been meaning to check out for a while now and finally had some time this morning is the new Office Live services. Turns out, there are three services that you can sign-up for which provide you with public facing and private MOSS 2007 sites: 
&lt;ul&gt;
&lt;li&gt;Office Live Basics    - Free 
&lt;li&gt;Office Live Essentials    - $19.95/month 
&lt;li&gt;Office Live Premium    - $39.95/month &lt;/ul&gt;
&lt;p&gt;I went ahead and got my own Office Live Basics site and have just started checking it out. There are a lot of great things that a developer like myself can have fun doing with this site…. And it'll be good knowledge to have and be able to talk to with customers. I'll probably blog more about this in the future, but here are a couple of URLs that may be of interest to you: 
&lt;ul&gt;
&lt;li&gt;Office Live Signup Page: &lt;a href="http://office.microsoft.com/en-us/officelive/default.aspx"&gt;http://office.microsoft.com/en-us/officelive/default.aspx&lt;/a&gt; 
&lt;li&gt;My Office Live Basics Site (I haven't done anything to it yet): &lt;a href="http://temp.theyoungescom.officelive.com/default.aspx"&gt;http://temp.theyoungescom.officelive.com/default.aspx&lt;/a&gt; 
&lt;li&gt;
&lt;div&gt;Innovate on Microsoft Office Live site: &lt;a href="http://innovateonmicrosoftofficelive.com/"&gt;http://innovateonmicrosoftofficelive.com/&lt;/a&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Training Modules: &lt;a href="http://innovateonmicrosoftofficelive.com/TrainingModules.aspx"&gt;http://innovateonmicrosoftofficelive.com/TrainingModules.aspx&lt;/a&gt; 
&lt;li&gt;Office Live Developers Guide: &lt;a href="http://msdn2.microsoft.com/en-us/library/aa751764.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa751764.aspx&lt;/a&gt; 
&lt;li&gt;Office Live Developer Portal: &lt;a href="http://msdn2.microsoft.com/en-us/office/aa905514.aspx"&gt;http://msdn2.microsoft.com/en-us/office/aa905514.aspx&lt;/a&gt; 
&lt;li&gt;Office Live Developer Forum: &lt;a href="http://forums.microsoft.com/msdn/showforum.aspx?forumid=1064&amp;amp;siteid=1"&gt;http://forums.microsoft.com/msdn/showforum.aspx?forumid=1064&amp;amp;siteid=1&lt;/a&gt; &lt;/ul&gt;&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Got+my+own+Office+Live+Basics+site+now%e2%80%a6&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>Mrosoft General</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!144.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!144.entry</guid><pubDate>Sun, 03 Jun 2007 15:25:54 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!144/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!144.entry#comment</wfw:comment><dcterms:modified>2007-06-07T01:32:15Z</dcterms:modified></item><item><title>My Memberships Web Part for WSS 3.0 (SharePoint 2007)</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!139.entry</link><description>&lt;p&gt;The other day I wrote a quick web part for our corporate intranet which shows a list of all sites that the current user is a member of. The part is a bit slow, because it traverses the site hierarchy and checks to see if the current user is a member of the &amp;quot;Members&amp;quot; group of each site, but it works (for the most part). I just came across a blog posting titled &amp;quot;Increased performance for MOSS apps using the PortalSiteMapProvider&amp;quot; at &lt;a href="http://blogs.msdn.com/ecm/archive/2007/05/23/increased-performance-for-moss-apps-using-the-portalsitemapprovider.aspx"&gt;http://blogs.msdn.com/ecm/archive/2007/05/23/increased-performance-for-moss-apps-using-the-portalsitemapprovider.aspx&lt;/a&gt; that I'll probably try to use to improve the performance of this web part at some point, but don't have time right now. I'm doing this blog post in order to share a few techniques I used to create the web part, and also give a link to a zip file of the web part Visual Studio project I created (yep… I'm finally giving back to the SharePoint community after taking-taking-taking). 
&lt;p&gt;I've zipped and uploaded the Visual Studio solution to my &lt;a href="http://temp.theyoungescom.officelive.com/downloads.aspx"&gt;Office Live Site site&lt;/a&gt; download page, and the file is named Statera.Moss.Webparts.MyMemberships.img (NOTE: after you download the file, you need to change the extension to .ZIP and then you will be able to unzip it). 
&lt;p&gt;There's not very much code to this project at all, but there are a few things of interest above and beyond the purpose of the web part, so I'll walk through a few things here. 
&lt;h2&gt;Overview &lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;All of the code is in the two c# files within the Source Directory 
&lt;li&gt;The &amp;quot;MyMemberships.cs&amp;quot; file is the code for the web part 
&lt;li&gt;The &amp;quot;MyMembershipsHelper.cs&amp;quot; file is the code for the MyMembershipsHelper class which is used as an ObjectDataSource within the web part so that I can make use of all the great features that the &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.spgridview.aspx"&gt;SPGridView&lt;/a&gt; server component. 
&lt;li&gt;
&lt;div&gt;Here's what the part looks like: &lt;/div&gt;
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060207_1943_MyMembershi1.png"&gt; 
&lt;p&gt; &lt;/ol&gt;
&lt;h2&gt;Making good use of the SPGridView &lt;/h2&gt;
&lt;p&gt;The &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.spgridview.aspx"&gt;SPGridView&lt;/a&gt; is a great SharePoint class which inherits from the .NET 2.0 GridView class and adds in all of the necessary css classes and other style stuff so that the grid looks like the other grids in SharePoint. I found a good posting about using the SPGridView at &lt;a href="http://blogs.msdn.com/powlo/archive/2007/02/25/displaying-custom-data-through-sharepoint-lists-using-spgridview-and-spmenufield.aspx"&gt;http://blogs.msdn.com/powlo/archive/2007/02/25/displaying-custom-data-through-sharepoint-lists-using-spgridview-and-spmenufield.aspx&lt;/a&gt;. The great thing about using the SPGridView (or even just the .NET 2.0 GridView class) is that you don't have to write any paging or sorting code if you get it all hooked up correctly. 
&lt;p&gt;Hooking the SPGridView up correctly within a web part is a bit tricky since you don't have use of the designer in Visual Studio. If you look at the code you'll notice a couple of things. First, the MyMembershipHelper class is extremely small… so small that I'll post its entire contents here: 
&lt;p&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Text;&lt;br&gt;using System.Data;&lt;br&gt;using System.Collections;&lt;br&gt;using System.Collections.Specialized;&lt;br&gt;using Microsoft.SharePoint;&lt;br&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;namespace Statera.Moss.Webparts &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;    public class MyMembershipsHelper &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;    { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        DataTable _myData; &lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt; &lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        public MyMembershipsHelper() &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;            _myData = new DataTable(); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        } &lt;/span&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        public MyMembershipsHelper(DataTable myData) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;            _myData = myData; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        } &lt;/span&gt;  
&lt;p&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        public DataView GetQueryResults() &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        { &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;            DataView myView = new DataView(_myData, &amp;quot;&amp;quot;, &amp;quot;sitename&amp;quot;, DataViewRowState.CurrentRows); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;            return myView; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;        } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;    } &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;} &lt;/span&gt;
&lt;p&gt;  
&lt;p&gt;All this class does is provide a place to store a DataTable as well as a method that the SPGridView can call when it needs the data (GetQueryResults). Now if you look at the MyMemberships cless, you'll see that during the initialization of the Web Part that an ObjectDataSource object is created and added to the web part's controls: 
&lt;p&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;//----------------------------- &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;// Create the ObjectDataSource object &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;_myObjectDataSource = new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ObjectDataSource&lt;/span&gt;&lt;span style="color:blue"&gt;(&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;Statera.Moss.Webparts.MyMembershipsHelper&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;, &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;GetQueryResults&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;&lt;br&gt;_myObjectDataSource.ID = &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;_myObjectDataSource&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;_myObjectDataSource.ObjectCreating += new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ObjectDataSourceObjectEventHandler&lt;/span&gt;&lt;span style="color:blue"&gt;(_myObjectDataSource_ObjectCreating); &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;&lt;br&gt;this.Controls.Add(_myObjectDataSource); &lt;br&gt;&lt;/span&gt;
&lt;p&gt;By doing this, you can then set the DataSourceID of the SPGridView object to this new ObjectDataSource and the SPGridView will know where to get its data: 
&lt;p&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;_grdResults = new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SPGridView&lt;/span&gt;&lt;span style="color:blue"&gt;(); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;_grdResults.ID = &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;_grdResults&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;_grdResults.EnableViewState = false; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;_grdResults.DataSourceID = &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;_myObjectDataSource&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;; &lt;/span&gt;&lt;/span&gt;
&lt;p&gt;The only other thing you need to do is create the _myObjectDataSource_ObjectCreating method so that you can set the object instance of the ObjectDataSource to the instance of the myMembershipsQueryHelper class that you'll later create and populate: 
&lt;p&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;public void _myObjectDataSource_ObjectCreating(object sender, &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ObjectDataSourceEventArgs&lt;/span&gt;&lt;span style="color:blue"&gt; e) &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;{ &lt;br&gt;     &lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;e.ObjectInstance = _myMembershipsQueryHelper; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;} &lt;/span&gt;  
&lt;p&gt;Now that we have the SPGridView and ObjectDataSource objects all linked up, we just need to create an instance of the myMemberships class populate it with the sites that the current user is a member of.  
&lt;p&gt;  
&lt;h2&gt;Determining Site Membership &lt;/h2&gt;
&lt;p&gt;The only other interesting methods are the code is the GetMyMembershipsHelperClass() and the AddSite() methods. The GetMyMembershipsHelperClass() method creates the DataTable in order to store the membership information and then calls the AddSite() method. The AddSite() method is a recursive method (calls itself) in order to traverse the site hierarchy. Probably the most important line of code in the AddSite() method is: 
&lt;p&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;string sIdOfMemberGroup = mySpWeb.Properties[&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;vti_associatemembergroup&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;]; &lt;/span&gt;&lt;/span&gt;
&lt;p&gt;This line of code gets the ID of the &amp;quot;Members Group&amp;quot; so that we can later determine if the current user is a member of this group. The ID of the &amp;quot;Members Group&amp;quot; is stored in the Properties bag of the SPWeb when the site is created and a Members Group is created. NOTE: you can set the value of this property programmatically if you ever have the need to change it or set it to be a different group than the one that SharePoint sets up for you. 
&lt;p&gt;Now that we have the Group ID of the &amp;quot;Members Group&amp;quot; for the site, we can determine if the current user is in this group with the following code: 
&lt;p&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:#2b91af"&gt;SPGroup&lt;/span&gt;&lt;span style="color:blue"&gt; myMemberGroup = mySpWeb.Groups.GetByID(iGroupId); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;if (myMemberGroup.ContainsCurrentUser) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;    string sSiteUrl = mySpWeb.Url; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;    string sSiteDescription = mySpWeb.Description; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;    &lt;/span&gt;&lt;span style="color:#2b91af"&gt;DataRow&lt;/span&gt;&lt;span style="color:blue"&gt; myNewRow = mySites.NewRow(); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;    myNewRow[&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;sitename&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;] = &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;li&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt; + sSiteName + &lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot; &amp;lt;/li&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;    myNewRow[&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;siteurl&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;] = sSiteUrl; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:Courier New"&gt;&lt;span style="color:blue"&gt;    myNewRow[&lt;/span&gt;&lt;span style="color:#a31515"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span style="color:blue"&gt;] = sSiteDescription; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;    mySites.Rows.Add(myNewRow); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;    mySites.AcceptChanges(); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:blue;font-family:Courier New"&gt;} &lt;/span&gt;
&lt;p&gt;I had to put this code inside a try/catch block in order to catch the Access Denied exceptions that occur if the current user doesn't have enough permission to enumerate the Members Group. This is one place where performance could be drastically improved. 
&lt;p&gt;  
&lt;h2&gt;Deploying the SharePoint Solution &lt;/h2&gt;
&lt;p&gt;So, in addition to writing the code for the web part, I also setup the Visual Studio solution so that a SharePoint solution (.wsp) file would be created for easy deployment to SharePoint whenever you run a build. This was accomplished by doing the following: 
&lt;ol&gt;
&lt;li&gt;Create a manifest.xml file 
&lt;li&gt;Create a DDF file for the makecab utility (Statêra.Moss.Webparts.MyMemberships.ddf) 
&lt;li&gt;Putting the following two lines in the post build event command line (Build Even tab of the project properties):&lt;br&gt;cd $(ProjectDir)&lt;br&gt;makecab /f Statera.Moss.Webparts.MyMemberships.ddf &lt;/ol&gt;
&lt;p&gt;Now, every time I run a build the Statêra.Moss.Webparts.MyMemberships.wsp file gets created. 
&lt;p&gt;To add and deploy this solution to a WSS 3.0 or SharePoint 2007 web, you just copy the wsp file to the SharePoint server and then execute the following STSADM commands from the command line: 
&lt;p&gt;    stsadm –o addsolution –filename Statera.Moss.Webparts.MyMemberships.wsp&lt;br&gt;    stsadm –o deploysolution –name Statera.Moss.Webparts.MyMemberships.wsp –immediate –allcontenturls 
&lt;p&gt;NOTE: for some reason, if you copy and paste the above two lines into a command prompt, it won't work. You need to type them out by hand. 
&lt;p&gt;Well… that's all I've got to say at this time. Feel free to let me know if you have any problems… 
&lt;p&gt;Other key words or phrases:  Membership Web Part MOSS 2007 WSS 3.0 Windows SharePoint Services 3.0&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+My+Memberships+Web+Part+for+WSS+3.0+(SharePoint+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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>SharePoint 2007 &amp; WSS 3.0</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!139.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!139.entry</guid><pubDate>Sat, 02 Jun 2007 19:43:40 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!139/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!139.entry#comment</wfw:comment><dcterms:modified>2007-06-26T14:08:44Z</dcterms:modified></item><item><title>Blogging to Spaces with Photos</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!136.entry</link><description>&lt;p&gt;Well… it's been about 9 months since I blogged last… not that anyone has noticed, and I thought I'd try to get back into it. The first thing I wanted to do was figure out how to Blog from Word 2007 and include pictures. Well… it took me about an hour and $25, but now its working great. Here's proof: 
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060207_1415_BloggingtoS1.jpg"&gt; 
&lt;p&gt;I didn't do a tremendous amount of research, so there may be cheaper/free ways of doing it, but here's what I did… 
&lt;p&gt;  
&lt;ul&gt;
&lt;li&gt;Connected my Word Blogger to my spaces account. Note, when it asks for your &amp;quot;Space Name&amp;quot;, enter just the name part of your space, not the entire URL. The Secret word is something that I was able to setup by going to spaces.live.com and editing my account &lt;/ul&gt;
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060207_1415_BloggingtoS2.png"&gt; 
&lt;ul&gt;
&lt;li&gt;Clicking Picture Options gave me the following screen, and the help links weren't of much help, though they did point me to Photobucket. After going to &lt;a href="http://www.photobucket.com/"&gt;www.photobucket.com&lt;/a&gt; and creating an account, I found that in order to upload images via FTP, I had to subscribe to the Pro service. It was only $25 for a year, so instead of spending my time looking for a free service, I went ahead and upgraded to pro. Once I did this, and read the FTP guide Photobucket provided, I was able to get the Upload and Source URLs figured out and entered in (NOTE: the xxxxxxx in the upload URL is where your password would go). &lt;/ul&gt;
&lt;p&gt;&lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060207_1415_BloggingtoS3.png"&gt; 
&lt;ul&gt;
&lt;li&gt;That was it! &lt;/ul&gt;
&lt;p&gt;So, now I'll click on the &lt;img alt="" src="http://i184.photobucket.com/albums/x318/byounge/060207_1415_BloggingtoS4.png"&gt; button in the upper left hand corner of Word and the images in this Blog Post will be FTP'd to Photobucket and the content should go right up to my Spaces blog. Let's give it a try… &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Blogging+to+Spaces+with+Photos&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>Mrosoft General</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!136.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!136.entry</guid><pubDate>Sat, 02 Jun 2007 14:16:02 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!136/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!136.entry#comment</wfw:comment><dcterms:modified>2007-06-07T01:33:48Z</dcterms:modified></item><item><title>Problems with SharePoint 2007 Beta 2 Configuration Wizard</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!124.entry</link><description>&lt;div&gt;I just spent a good part of my day trying to get the SharePoint 2007 Beta2 Configuration Wizard  to work and finally got past a very frustrating problem.  I continued to receive &amp;quot;&lt;strong&gt;Exception: System.InvalidOperationException: This access control list is not in canonical form and therefore cannot be modified&amp;quot;&lt;/strong&gt; even after reading several blog entries and following the suggestions.  The most thorough entry I found was on Nerd Notes.net at &lt;a href="http://www.nerdnotes.net/blog/PermaLink.aspx?guid=93c5d391-39aa-4905-be2e-c12233a9d929"&gt;http://www.nerdnotes.net/blog/PermaLink.aspx?guid=93c5d391-39aa-4905-be2e-c12233a9d929&lt;/a&gt;, but even after following the suggestions there, I still continued to get the error.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;After looking through the log file that the configuration wizard produces I found that the last registry key that was attmpted to be accessed was at HKLM/SOFTWARE/Microsoft/Office Server.  I browsed to this key using RegEdit.exe, right clicked on it and selected Properties.  Just like in the Nerd Notes blow, I received a dialog stating that the Key's permissions were corrupt.  After clicking OK and then closing out of RegEdit, I re-ran the Configuration Wizard and it completed successfully!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I you are having similar problems but can't find the exact resolution, my recommendation would be to search through the log file that the configuration wizard produces for the last reference to a registry key.  Then use RegEdit to pull up the permissions on the key, and if you're lucky, you'll get an error message stating that the permissions are corrupt and you'll be able to click OK to resolve them.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Problems+with+SharePoint+2007+Beta+2+Configuration+Wizard&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>SharePoint 2007 &amp; WSS 3.0</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!124.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!124.entry</guid><pubDate>Wed, 23 Aug 2006 20:25: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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!124/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!124.entry#comment</wfw:comment><dcterms:modified>2007-06-07T01:33:23Z</dcterms:modified></item><item><title>Continuous Integration with TFS</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!122.entry</link><description>&lt;div&gt;Vertigo Software's blog about continuous integration can be found at &lt;a href="http://blogs.vertigosoftware.com/teamsystem/archive/2006/07/14/3075.aspx"&gt;http://blogs.vertigosoftware.com/teamsystem/archive/2006/07/14/3075.aspx&lt;/a&gt;.  This is the best blog I have found on the subject.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+Continuous+Integration+with+TFS&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>Visual Studio Team System</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!122.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!122.entry</guid><pubDate>Thu, 20 Jul 2006 19:43: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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!122/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!122.entry#comment</wfw:comment><dcterms:modified>2007-06-07T01:49:11Z</dcterms:modified></item><item><title>ReGhost.NET</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!115.entry</link><description>&lt;div&gt;
&lt;p&gt;ReGhost.NET is another great utility for SharePoint v2.  Here are a couple of links to more info:
&lt;p style="text-indent:-0.25in"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Download Instructions and Application:  &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=6eff7d8a-92ee-4525-a625-b592bb9d0c95"&gt;http://www.gotdotnet.com/workspaces/workspace.aspx?id=6eff7d8a-92ee-4525-a625-b592bb9d0c95&lt;/a&gt;
&lt;p style="text-indent:-0.25in"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Shane Perran’s blog about it: &lt;a href="http://www.graphicalwonder.com/2006/04/ghosting_and_reghosting.html"&gt;http://www.graphicalwonder.com/2006/04/ghosting_and_reghosting.html&lt;/a&gt;
&lt;p&gt; 
&lt;p&gt;In addition to the above, I also came across a great Sharepoint Tips and Tricks blog at &lt;a href="http://spstips.blogspot.com/"&gt;http://spstips.blogspot.com/&lt;/a&gt;
&lt;p&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+ReGhost.NET&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!115.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!115.entry</guid><pubDate>Sun, 18 Jun 2006 13:24:21 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!115/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!115.entry#comment</wfw:comment><dcterms:modified>2006-06-21T18:24:10Z</dcterms:modified></item><item><title>MOSS 2007: SharePoint Feature Manager</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!114.entry</link><description>&lt;p&gt;Todd Baginski has developed a very useful tool for management of Features in SharePoint Feature Manager. Read more and download at &lt;a href="http://www.sharepointblogs.com/tbaginski/archive/2006/06/16/8423.aspx"&gt;http://www.sharepointblogs.com/tbaginski/archive/2006/06/16/8423.aspx&lt;/a&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+MOSS+2007%3a+SharePoint+Feature+Manager&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>SharePoint 2007 &amp; WSS 3.0</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!114.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!114.entry</guid><pubDate>Sat, 17 Jun 2006 22:20:05 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!114/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!114.entry#comment</wfw:comment><dcterms:modified>2007-06-07T01:48:54Z</dcterms:modified></item><item><title>VSTS Tools and Utilities</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!113.entry</link><description>&lt;span style="font-size:10px;font-family:Arial"&gt;
&lt;p&gt;If you’re using VSTS and want to look into some of the tools and utilities that are available on the web, there si a comprehensive list at: &lt;a href="http://accentient.com/widgets.aspx"&gt;http://accentient.com/widgets.aspx&lt;/a&gt; 
&lt;p&gt;Some of the ones I think are the best include: 
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;VS Team System Customization Toolkit: &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=812a68af-5e74-48c6-9623-1a4469142a84"&gt;http://www.gotdotnet.com/workspaces/workspace.aspx?id=812a68af-5e74-48c6-9623-1a4469142a84&lt;/a&gt; &lt;/div&gt;
&lt;li&gt;
&lt;div&gt;Team Foundation Server Work Item Utility:  &lt;a href="http://www.gotdotnet.com/codegallery/codegallery.aspx?id=b29d4456-c4ba-474e-a422-0479471776e1"&gt;http://www.gotdotnet.com/codegallery/codegallery.aspx?id=b29d4456-c4ba-474e-a422-0479471776e1&lt;/a&gt; &lt;/div&gt;
&lt;li&gt;
&lt;div&gt;Team Foundation Administration Too: &lt;a href="http://www.gotdotnet.com/codegallery/codegallery.aspx?id=cea30722-cd0a-4ef4-9c75-a5a5e4932b05"&gt;http://www.gotdotnet.com/codegallery/codegallery.aspx?id=cea30722-cd0a-4ef4-9c75-a5a5e4932b05&lt;/a&gt; &lt;/div&gt;
&lt;li&gt;
&lt;div&gt;Other VSTS Command Line Utilities: &lt;a href="http://msdn2.microsoft.com/en-us/library/ms253088(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms253088(VS.80).aspx&lt;/a&gt; &lt;/div&gt;&lt;/ol&gt;&lt;/span&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+VSTS+Tools+and+Utilities&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><category>Visual Studio Team System</category><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!113.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!113.entry</guid><pubDate>Thu, 15 Jun 2006 17:04: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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!113/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!113.entry#comment</wfw:comment><dcterms:modified>2007-06-07T01:48:11Z</dcterms:modified></item><item><title>First Post</title><link>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!112.entry</link><description>&lt;p&gt;Well, I’m finally going to get into this blogging thing.  Partly because I want to see what it’s all about, partly because it’s obviously a good way to share ideas and comments, and partly because it’ll be a good place for me to post important things and be able to find them in the future.
&lt;p&gt;I’m doing my first post within Microsoft Word 2007 Beta2 from TechEd 2006, so if you’re reading this, then that means this feature of the beta is working great.
&lt;p&gt;That’s all for now… &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6671814606667300620&amp;page=RSS%3a+First+Post&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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><comments>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!112.entry#comment</comments><guid isPermaLink="true">http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!112.entry</guid><pubDate>Wed, 14 Jun 2006 22:03:33 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://byounge.spaces.live.com/blog/cns!5C970C0935AABF0C!112/comments/feed.rss</wfw:commentRss><wfw:comment>http://byounge.spaces.live.com/Blog/cns!5C970C0935AABF0C!112.entry#comment</wfw:comment><dcterms:modified>2006-06-14T22:03:39Z</dcterms:modified></item><item><title>Custom List: My Favorite Sites</title><link>http://byounge.spaces.live.com/Lists/cns!5C970C0935AABF0C!140</link><description>&lt;p&gt;My Favorite Sites&lt;/p&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.richfinn.net"&gt;Rich Finn&amp;#39;s Blog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.wadewegner.com"&gt;Wade Wegner&amp;#39;s Blog&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=6671814606667300620&amp;page=RSS%3a+Custom+List%3a+My+Favorite+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=byounge.spaces.live.com&amp;amp;GT1=byounge"&gt;</description><guid isPermaLink="false">cns!5C970C0935AABF0C!140</guid><pubDate>Tue, 11 Sep 2007 15:09:27 GMT</pubDate><msn:type>list</msn:type><live:type>list</live:type><live:typelabel>List</live:typelabel><cf:itemRSS>http://byounge.spaces.live.com/Lists/cns!5C970C0935AABF0C!140/feed.rss</cf:itemRSS><dcterms:modified>2007-09-11T15:09:27Z</dcterms:modified></item></channel></rss>