<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Suman Chakrabarti - SharePoint and ASP.NET blog : SharePoint</title><link>http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx</link><description>Tags: SharePoint</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>'How do I' get redirected to the default Error or Success layouts pages?</title><link>http://blogs.msdn.com/sumanc/archive/2009/01/25/how-do-i-get-redirected-to-the-default-error-or-success-layouts-pages.aspx</link><pubDate>Sun, 25 Jan 2009 23:32:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9375251</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/9375251.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=9375251</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=9375251</wfw:comment><description>&lt;p&gt;You just want the error message to be displayed on the default SharePoint error page. Is this an easy&lt;/p&gt; &lt;p&gt;In Microsoft.SharePoint.Utilities.SPUtility there are 2 functions:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SPUtility.TransferToErrorPage - this transfers the user to the administrative layouts page for error messages  &lt;li&gt;SPUtility.TransferToSuccessPage - this transfers the user to the page one would see after something such as a long running transaction&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There are a few overloads for each and they come in handy when developing custom admin pages or custom lists.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9375251" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/How+do+I/default.aspx">How do I</category></item><item><title>'How do I' create a layouts page</title><link>http://blogs.msdn.com/sumanc/archive/2009/01/25/how-do-i-create-an-admin-layouts-page.aspx</link><pubDate>Sun, 25 Jan 2009 22:42:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9375213</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/9375213.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=9375213</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=9375213</wfw:comment><description>&lt;p&gt;Following the lead of &lt;a href="http://blogs.msdn.com/SaraFord/" target="_blank"&gt;Sara Ford&lt;/a&gt;, I think I want to do a 'How do I' piece for SharePoint developers. I don't know how long this will last, but this is the first post.&lt;/p&gt;  &lt;p&gt;First off, layout pages require the following directives. Try as I may, I have never been able to get around whatever permission demand is blocking layout pages from inheriting a specific class.&lt;/p&gt;  &lt;p class="code"&gt;&lt;code&gt;&amp;lt;%@ Assembly Name=&amp;quot;Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt;      &lt;br /&gt;&amp;lt;%@ Page language=&amp;quot;C#&amp;quot; MasterPageFile=&amp;quot;~/_layouts/application.master&amp;quot; inherits=&amp;quot;Microsoft.SharePoint.WebControls.LayoutsPageBase, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;The files must be placed in the %12-hive%\Template\Layouts directory-I usually create a custom folder underneath based on my specific feature to separate my custom code from SharePoint code. Incidentally, I recommend putting stylesheets, JavaScripts, and generic HTTP handlers here as well (the HttpHandler does allow you to create a code behind compile and deploy to this directory, which is cool). On your layouts pages you can add any web parts and custom controls you wish, you just have to add them manually as you don't have web part zones or personalization.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Note: By putting pages in the layouts directory, you may be breaching your security for the application as layouts pages are available to any authenticated user (not in a publishing scenario, though). Ensure that your pages are secured using controls such as the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.spsecuritytrimmedcontrol.aspx"&gt;SPSecurityTrimmedControl.&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9375213" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/How+do+I/default.aspx">How do I</category></item><item><title>Starting/Canceling a SharePoint Designer workflow programmatically </title><link>http://blogs.msdn.com/sumanc/archive/2008/08/16/starting-canceling-a-workflow-programmatically.aspx</link><pubDate>Sun, 17 Aug 2008 00:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8872553</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/8872553.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=8872553</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=8872553</wfw:comment><description>&lt;p&gt;I had enough trying to find this code, so I'm putting what I've pieced together to activate a workflow programmatically (specifically a SharePoint Designer Workflow)&lt;/p&gt;  &lt;p class="code"&gt;&lt;code&gt;public static string StartWorkflow(ContractListItem contract, string workflowName) {      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPListItem wfListItem = contract.ListItem;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPWorkflowAssociationCollection wfAssocs = wfListItem.ParentList.WorkflowAssociations;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPWorkflowAssociation activeWorkflowAssoc = null;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string errorMessage = string.Empty;       &lt;br&gt;      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (SPWorkflowAssociation wfAssoc in wfAssocs) {       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (wfAssoc.Name.Equals(workflowName)) {       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeWorkflowAssoc = wfAssoc;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br&gt;      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if the workflow exists, start the workflow       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPWorkflow activeWorkflow = null;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (activeWorkflowAssoc != null) {       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeWorkflow = SPContext.Current.Site.WorkflowManager.StartWorkflow(       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wfListItem,       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeWorkflowAssoc,       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;Data&amp;gt;&amp;lt;/Data&amp;gt;");       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex) {       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ErrorHandler.LogError(Resources.ActionBarWebPart_WorkflowNotStarted, ex);       &lt;br&gt;      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (activeWorkflow != null)       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPWorkflowManager.CancelWorkflow(activeWorkflow);       &lt;br&gt;      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errorMessage = Resources.ActionBarWebPart_WorkflowNotStarted;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ErrorHandler.LogError(Resources.ActionBarWebPart_WorkflowDoesNotExist);       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errorMessage = Resources.ActionBarWebPart_WorkflowDoesNotExist;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return errorMessage;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br&gt;&amp;nbsp; }&lt;/code&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8872553" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/Win+WF/default.aspx">Win WF</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint+Designer/default.aspx">SharePoint Designer</category></item><item><title>SharePoint ReadOnly Field can be written to by workflows</title><link>http://blogs.msdn.com/sumanc/archive/2008/06/24/sharepoint-readonly-field-can-be-written-to-by-workflows.aspx</link><pubDate>Tue, 24 Jun 2008 18:16:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8647561</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/8647561.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=8647561</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=8647561</wfw:comment><description>&lt;p&gt;So, I scoured the internet (all of it, I swear) to find some information on readonly fields in SharePoint. Apparently, SharePoint workflows &lt;em&gt;can &lt;/em&gt;write to readonly columns. The only problem I'm having now is getting the column to show up in a columns list.&lt;/p&gt;  &lt;p class='code'&gt;&lt;code&gt; private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e) {&lt;br/&gt; &amp;nbsp;&amp;nbsp;SPList list = workflowProperties.List;&lt;br/&gt; &lt;br/&gt; &amp;nbsp;&amp;nbsp;if (!list.Fields.ContainsField(FIELD_NAME))&lt;br/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Fields.Add(FIELD_NAME, SPFieldType.User, false);&lt;br/&gt; &lt;br/&gt; &amp;nbsp;&amp;nbsp;SPFieldUser field = (SPFieldUser)list.Fields[FIELD_NAME];&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.Title = FIELD_NAME;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.AllowDisplay = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ReadOnlyField = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInDisplayForm = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInEditForm = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInDisplayForm = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInEditForm = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInListSettings = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInNewForm = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInVersionHistory = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.ShowInViewForms = true;&lt;br/&gt; &amp;nbsp;&amp;nbsp;field.Update();&lt;br/&gt; }&lt;br/&gt; &lt;br/&gt; private void codeActivity1_ExecuteCode(object sender, EventArgs e) {&lt;br/&gt; &amp;nbsp;&amp;nbsp;workflowProperties.Item["restricted"] = "test: " + DateTime.Now.ToShortTimeString();&lt;br/&gt; &amp;nbsp;&amp;nbsp;workflowProperties.Item.Update();&lt;br/&gt; } &lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Woo- hoo! It works!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8647561" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/Win+WF/default.aspx">Win WF</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Addition to Steve Peschka's PartCheck code</title><link>http://blogs.msdn.com/sumanc/archive/2008/03/26/addition-to-steve-peschka-s-partcheck-code.aspx</link><pubDate>Wed, 26 Mar 2008 16:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8337765</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/8337765.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=8337765</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=8337765</wfw:comment><description>&lt;P&gt;I ran into a problem when trying to use Peschka's PartCheck code for&amp;nbsp;My Site autoconfiguration&amp;nbsp;to modify some boolean fields on the Colleague Tracker web part and found some modifications you'll need to make in order to set boolean fields on controls with this code:&lt;/P&gt;
&lt;P class=code&gt;&lt;CODE&gt;private object GetPropertySetterValue(string Value) {&lt;BR&gt;&amp;nbsp; ...&lt;BR&gt;&amp;nbsp; switch {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;bool result;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bool.TryParse(Value, out result))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; ...&lt;BR&gt;}&lt;/CODE&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;This will allow the boolean value to be passed correctly to the control.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8337765" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Branding/default.aspx">Branding</category></item><item><title>IIS app pool limits to keep in mind for SharePoint</title><link>http://blogs.msdn.com/sumanc/archive/2008/03/25/iis-app-pool-limits-to-keep-in-mind-for-sharepoint.aspx</link><pubDate>Wed, 26 Mar 2008 00:18:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8336549</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/8336549.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=8336549</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=8336549</wfw:comment><description>&lt;p&gt;Depending on your hardware configuration IIS 6.0 does have a potential limit to the number of application pools. The TechNet FAQ for IIS stated &lt;a href="http://www.microsoft.com/technet/community/en-us/iis/iis6_faq.mspx#EFBAE"&gt;here&lt;/a&gt; says:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The answer varies depending on the hardware and software configurations of your server as well as the types of content it hosts. If you are setting up your application pools with unique identities, depending on the applications and memory resources of your server, you will reach a limit of about 60 application pools. There are finite limits to some system resources that are allocated with each new logon session. This means that 60 processes can run concurrently as distinct accounts. IIS 6.0 supports running these processes in a single shared desktop, at a cost of sharing a single encapsulation of a user session among all parties.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There is a way to scale far beyond 60 worker processes, but why would anyone want to do that?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8336549" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/IIS/default.aspx">IIS</category></item><item><title>SharePoint Star Wars lines</title><link>http://blogs.msdn.com/sumanc/archive/2008/03/20/sharepoint-star-wars-lines.aspx</link><pubDate>Fri, 21 Mar 2008 06:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8328436</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/8328436.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=8328436</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=8328436</wfw:comment><description>&lt;P&gt;I posted these to &lt;A class="" href="http://blogs.msdn.com/joelo" mce_href="http://blogs.msdn.com/joelo"&gt;Joel Oleson's MSDN blog&lt;/A&gt;, but since he's moving the blog, I didn't want to lose them.&lt;/P&gt;
&lt;P&gt;Uber-nerd SharePoint versions of Star Wars lines:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;These aren't the content databases you are looking for. (compliments &lt;A class="" href="http://blogs.msdn.com/echarran" mce_href="http://blogs.msdn.com/echarran"&gt;Eric Charran&lt;/A&gt;)&lt;/LI&gt;
&lt;LI&gt;If you only knew the power of the stsadm -o installfeature -force.&lt;/LI&gt;
&lt;LI&gt;There will be a substantial reward to the Site Collection Admin that finds the deleted document, but I want it restored, no disintegration's!&lt;/LI&gt;
&lt;LI&gt;What is thy bidding, my Master page?&lt;/LI&gt;
&lt;LI&gt;Search your index, you know it to be true.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8328436" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Migrating Web Part Pages to Publishing Pages</title><link>http://blogs.msdn.com/sumanc/archive/2008/03/16/migrating-web-part-pages-to-publishing-pages.aspx</link><pubDate>Mon, 17 Mar 2008 04:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8277106</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/8277106.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=8277106</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=8277106</wfw:comment><description>&lt;P&gt;Unfortunately, you cannot natively migrate web part pages to WCM publishing pages. The benefit of publishing pages manifests itself in the centralized page layouts. Web part pages cannot be modified universally, but publishing page layouts can be thusly modified.&lt;/P&gt;
&lt;P&gt;So, to build a utility for migrating web part pages, it's a messy recipe. The result is only publishing pages with web parts intact, but not in the proper location nor is the page layout maintained; however, it is a better deal than to have to migrate web parts individually.&lt;/P&gt;
&lt;P&gt;Start by making sure the web is a &lt;A href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.publishing.publishingweb.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.publishing.publishingweb.aspx"&gt;PublishingWeb&lt;/A&gt;:&lt;/P&gt;
&lt;P class=code&gt;&lt;CODE&gt;if (PublishingSite.IsPublishingWeb)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return PublishingWeb.GetPublishingWeb(web);&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Get all web part pages by looping through all document libraries and getting web part pages:&lt;/P&gt;
&lt;P class=code&gt;&lt;CODE&gt;foreach (SPListItem item in doclib.Items) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (item.File.Url.EndsWith(".aspx")) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WL("Adding web part page: {0}", item.File.Url);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; webPartPages.Add(item.File.Url, item);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count++;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Next, create a new publishing page from a selected page layout (BlankWebPartPage.aspx is a good one): 
&lt;P class=code&gt;&lt;CODE&gt;// get the blank web part page layout&lt;BR&gt;List&amp;lt;PageLayout&amp;gt; layouts = new List&amp;lt;PageLayout&amp;gt;(pubWeb.GetAvailablePageLayouts());&lt;BR&gt;PageLayout layout = layouts.Find(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delegate(PageLayout l) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return l.Name.Equals(pageLayoutName, StringComparison.CurrentCultureIgnoreCase);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;&lt;BR&gt;// get the pages collection and add the new publishing page&lt;BR&gt;PublishingPageCollection pages = pubWeb.GetPublishingPages();&lt;BR&gt;&lt;BR&gt;// change the name of the new page if it already exists&lt;BR&gt;SPQuery query = new SPQuery();&lt;BR&gt;query.Query = "&amp;lt;Where&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='FileLeafRef'/&amp;gt;&amp;lt;Value Type='Text'&amp;gt;" + item.File.Name + "&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/Where&amp;gt;";&lt;BR&gt;SPListItemCollection items = pubWeb.PagesList.GetItems(query);&lt;BR&gt;string pageName = item.File.Name;&lt;BR&gt;if (items.Count &amp;gt; 0) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string fileExtension = DateTime.Now.ToString("_MMddyy_hhmmss");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pageName = pageName.Replace(".aspx", fileExtension+".aspx");&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;// create the new page&lt;BR&gt;PublishingPage publishingPage = pages.Add(pageName, layout);&lt;BR&gt;publishingPage.Title = item.Title;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Get a few &lt;A href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.webpartpages.splimitedwebpartmanager.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.webpartpages.splimitedwebpartmanager.aspx"&gt;SPLimitedWebPartManagers&lt;/A&gt; to read the old web parts and store them and to create new web parts on the publishing page:&lt;/P&gt;
&lt;P class=code&gt;&lt;CODE&gt;SPLimitedWebPartManager wppWpm = ((SPWeb)site).GetLimitedWebPartManager(item.File.Url, PersonalizationScope.Shared);&lt;BR&gt;SPLimitedWebPartManager publishingWpm = ((SPWeb)site).GetLimitedWebPartManager(item.File.Url, PersonalizationScope.Shared);&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Now you've got to copy the web parts and save the publishing page:&lt;/P&gt;
&lt;P class=code&gt;&lt;CODE&gt;foreach (WebPart oldWP in oldPageWpm.WebParts) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // don't move the Title bar, it's already built into the page&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (oldWP.ToString().Equals("Microsoft.SharePoint.WebPartPages.TitleBarWebPart")) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TitleBarWebPart titleBar = (TitleBarWebPart)oldWP;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do steal the title bar property data, though&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; publishingPage.Title = titleBar.HeaderTitle;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; publishingPage.Description = titleBar.HeaderDescription;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;StringBuilder sb = new StringBuilder();&lt;BR&gt;try {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // export the web part to a stream&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldWP.ExportMode = WebPartExportMode.All;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlWriter xwriter = XmlTextWriter.Create(sb);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wppWpm.ExportWebPart(oldWP, xwriter);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xwriter.Close(); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // import the web part from the stream&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string output = sb.ToString();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlReader xreader = XmlTextReader.Create(new StringReader(output));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string errorMessage;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebPart newWP = publishingWpm.ImportWebPart(xreader, out errorMessage);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xreader.Close();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // check for import errors&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!string.IsNullOrEmpty(errorMessage)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpgradeLog(errorMessage, EventLogEntryType.Error);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // add the web part to the page&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; publishingWpm.AddWebPart(newWP, "Header", oldWP.ZoneIndex);&lt;BR&gt;}&lt;BR&gt;catch (Exception ex) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine(ex.ToString());&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;publishingPage.Update();&lt;/CODE&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8277106" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Migration/default.aspx">Migration</category></item><item><title>Joined the Community Kit for SharePoint team</title><link>http://blogs.msdn.com/sumanc/archive/2008/02/25/joined-the-community-kit-for-sharepoint-team.aspx</link><pubDate>Mon, 25 Feb 2008 17:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7893219</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/7893219.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=7893219</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=7893219</wfw:comment><description>&lt;p&gt;I recently joined the Community Kit for SharePoint team. I'm hoping to enhance the Discussion Board features of SharePoint beyond the very basic forums we get out-of-box.&lt;/p&gt;  &lt;p&gt;Check it out: &lt;a title="http://codeplex.com/cks" href="http://codeplex.com/cks"&gt;http://codeplex.com/cks&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7893219" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>OpenSearch provider for MOSS search</title><link>http://blogs.msdn.com/sumanc/archive/2008/01/29/opensearch-provider-for-moss-search.aspx</link><pubDate>Wed, 30 Jan 2008 03:13:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7315279</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/7315279.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=7315279</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=7315279</wfw:comment><description>&lt;p&gt;It's nice to have that handy-dandy search bar in the upper right corner of your Internet Explorer browser, but how do you get that to show up with custom searches for MOSS?&lt;/p&gt;  &lt;p&gt;Well, you'll need to build a custom opensearch provider for your MOSS site. For this instance, I will demonstrate a simple provider that you will add to your page layouts to direct searches to your main search.&lt;/p&gt;  &lt;p&gt;First, we must make the OpenSearch XML. If you want a quick cheat, you can go &lt;a title="IE Search Providers" href="http://www.microsoft.com/windows/ie/searchguide/en-en/default.mspx?dcsref=http://runonce.msn.com/runonce2.aspx" target="_blank"&gt;here&lt;/a&gt; to use the IE search providers add-in. So, you'll need to create a file for each search provider you want to add to your page (i.e. All Sites, People, Intranet, Extranet, etc.).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;IntranetSearch.xml&lt;/strong&gt;&lt;/p&gt;  &lt;p class="code"&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;      &lt;br /&gt;&amp;lt;OpenSearchDescription xmlns=&amp;quot;http://a9.com/-/spec/opensearch/1.1&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;ShortName&amp;gt;This text appears in the IE dropdown&amp;lt;/ShortName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;Description&amp;gt;This is the description&amp;lt;/Description&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;InputEncoding&amp;gt;UTF-8&amp;lt;/InputEncoding&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;Url type=&amp;quot;text/html&amp;quot;       &lt;br /&gt;template=&amp;quot;http://search/searchcenter/pages/results.aspx?k={searchTerms}&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;lt;/OpenSearchDescription&amp;gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Next, you'll have to add this to a common location that you will reference with the search provider.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open SharePoint designer. &lt;/li&gt;    &lt;li&gt;Create a folder called &lt;strong&gt;IESearchProviders&lt;/strong&gt; (the name is unimportant). &lt;/li&gt;    &lt;li&gt;Copy all your OpenSearchProviders in the folder. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Finally, you'll need to go to your page layout. If you're like everyone else who customizes SharePoint, then you have a custom master page as well as custom page layouts. In any page layout (*.aspx) or master page (*.master) add the following link tag to the &lt;strong&gt;PlaceHolderAdditionalPageHead&lt;/strong&gt; content placeholder:&lt;/p&gt;  &lt;p class="code"&gt;&lt;code&gt;&amp;lt;link title=&amp;quot;This appears in IE dropdown as a new search type&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type=&amp;quot;application/opensearchdescription+xml&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rel=&amp;quot;search&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; href=&amp;quot;/SearchCenter/IESearchProviders/IntranetSearch.xml&amp;quot;       &lt;br /&gt;/&amp;gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Another scenario is to build an HttpHandler for the OpenSearch provider. This would allow you to programmatically modify the search results. Maybe you want to put the &amp;lt;link&amp;gt; tag on your master page so it appears on all sites, but you want the user to be able to define a search at the simplest of levels (as low as a document library).&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Update:&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I seemed to have forgotten to mention how to add a button to the page to provide the user an easier way of knowing that the search provider exists&lt;/p&gt;  &lt;p class="code"&gt;&lt;code&gt;window.external.AddSearchProvider(&lt;a href="http://search/SearchCenter/IESearchProviders/IntranetSearch.xml"&gt;http://search/SearchCenter/IESearchProviders/IntranetSearch.xml&lt;/a&gt;)&lt;/code&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7315279" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Search/default.aspx">Search</category></item><item><title>Migrating MyLinks</title><link>http://blogs.msdn.com/sumanc/archive/2008/01/10/migrating-mylinks.aspx</link><pubDate>Thu, 10 Jan 2008 08:56:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7050460</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/7050460.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=7050460</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=7050460</wfw:comment><description>&lt;p&gt;So, I was recently asked how to migrate MyLinks from an SPS2003 SharePoint site. The hurdle is that that MyLinks are not easily available in the SPS 2003 API nor are they easy to migrate (provided you don't want to upgrade the shared services provider).&lt;/p&gt;  &lt;p&gt;Well, I only need readonly access to the SPS2003 database (now decommissioned) and SharePoint admin rights (the MOSS admin account) to add new links to the MyLinks section for all users.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Querying the SPS2003 database     &lt;br /&gt;&lt;/strong&gt;Connect to the *_PROF database and join on the QuickLinks and UserProfile table.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Select up.NTName, ql.Title, ql.Group, ql.PageUrl, ql.IsPublic     &lt;br /&gt;from quicklinks ql join userprofile up on ql.userid=up.userid      &lt;br /&gt;where ntname=@ntname      &lt;br /&gt;order by ntname, linkid&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Creating the link     &lt;br /&gt;&lt;/strong&gt;Create a UserProfileManager to get the UserProfile and retreive the QuickLinkManager.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ServerContext context = ServerContext.GetContext(siteCollection);     &lt;br /&gt;UserProfileManager profileManager = new UserProfileManager(context, true);      &lt;br /&gt;UserProfile userProfile = profileManager.GetUserProfile(accountName);      &lt;br /&gt;QuickLinkManager qlm = userProfile.QuickLinks;      &lt;br /&gt;QuickLinkGroupType groupType = groupName.Equals(&amp;quot;General&amp;quot;) ?      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; QuickLinkGroupType.General : QuickLinkGroupType.UserSpecified;      &lt;br /&gt;Privacy privacy = isPublic ? Privacy.Public : Privacy.Private;      &lt;br /&gt;qlm.Create(title, url, groupType, groupName, privacy);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;From the code above, it's just a distinct NTName query and a few loops away from migrating links for all users.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7050460" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SPS+2003_2F00_WSS+2/default.aspx">SPS 2003/WSS 2</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Migration/default.aspx">Migration</category></item><item><title>SharePoint development best practices on MSDN</title><link>http://blogs.msdn.com/sumanc/archive/2007/11/16/sharepoint-development-best-practices-on-msdn.aspx</link><pubDate>Fri, 16 Nov 2007 15:28:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6300589</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/6300589.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=6300589</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=6300589</wfw:comment><description>&lt;p&gt;Some great articles on SharePoint best practices have been published on MSDN.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/bb687949%28office.12%29"&gt;Best Practices: Common Coding Issues When Using the SharePoint Object Model&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/aa973248%28office.12%29"&gt;Best Practices: Using Disposable Windows SharePoint Services Objects&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/aa973249%28office.12%29"&gt;Creating a Windows SharePoint Services 3.0 Web Part Using Visual Studio 2005 Extensions&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/bb530302%28office.12%29"&gt;Development Tools and Techniques for Working with Code in Windows SharePoint Services 3.0 (Part 1 of 2)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/bb530301%28office.12%29"&gt;Development Tools and Techniques for Working with Code in Windows SharePoint Services 3.0 (Part 2 of 2)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/bb814929%28office.12%29"&gt;Usage Event Logging in Windows SharePoint Services 3.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/bb153523%28office.12%29"&gt;Working with ASP.NET 2.0 Web Parts and Windows SharePoint Services 3.0&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6300589" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Branding/default.aspx">Branding</category></item><item><title>SharePoint customization guide - Brett Geoffroy</title><link>http://blogs.msdn.com/sumanc/archive/2007/11/13/sharepoint-customization-guide-brett-geoffroy.aspx</link><pubDate>Tue, 13 Nov 2007 22:14:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6180773</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/6180773.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=6180773</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=6180773</wfw:comment><description>&lt;p&gt;If you're into MOSS customizations, check out &lt;a href="http://blogs.msdn.com/bgeoffro/" target="_blank"&gt;Brett Geoffroy's MSDN blog&lt;/a&gt;. He's done a sweet job organizing all his experience into a guide.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-introduction.aspx"&gt;Branding a MOSS Corporate Intranet Portal, Introduction&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-1a-high-level-overview-terminology-and-approach.aspx"&gt;Branding a MOSS Corporate Intranet Portal, Part 1a: High-level overview, terminology, and approach&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-1b-branding-methods-by-scope-and-scenario.aspx"&gt;Branding a MOSS Corporate Intranet Portal, Part 1b: Branding Methods by Scope and Scenario&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-2-site-system-pages.aspx"&gt;Branding a MOSS Corporate Intranet Portal, Part 2: Site &amp;amp; System Pages&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-3-layouts-pages.aspx"&gt;Branding a MOSS Corporate Intranet Portal, Part 3: LAYOUTS Pages&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Great job, Brett!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6180773" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Branding/default.aspx">Branding</category></item><item><title>Some great SharePoint training</title><link>http://blogs.msdn.com/sumanc/archive/2007/09/19/some-great-sharepoint-training.aspx</link><pubDate>Wed, 19 Sep 2007 16:52:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4997155</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/4997155.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=4997155</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=4997155</wfw:comment><description>&lt;p&gt;&lt;strong&gt;Official SharePoint Blog&lt;/strong&gt; &amp;#x2013; this site has real world examples &lt;a href="http://sharepoint.microsoft.com/blogs/GetThePoint/"&gt;http://sharepoint.microsoft.com/blogs/GetThePoint/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Test drive Office 2007 system     &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://office.microsoft.com/en-us/products/HA101687261033.aspx"&gt;http://office.microsoft.com/en-us/products/HA101687261033.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MSDN SharePoint Blog&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/sharepoint"&gt;http://blogs.msdn.com/sharepoint&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;E-learning courses available:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=81048" target="_blank"&gt;Course 5465: Getting Started with Windows SharePoint Services 3.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=81049" target="_blank"&gt;Course 5466: Creating and Managing Windows SharePoint Services 3.0 Site&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=81050&amp;amp;lc=1033" target="_blank"&gt;Course 5467: Team Collaboration with Windows SharePoint Services 3.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=81047" target="_blank"&gt;Course 5468: Using Windows SharePoint Services 3.0 with Microsoft 2007 Office System Applications&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Learning     &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://www.microsoft.com/sharepoint/learning"&gt;http://www.microsoft.com/sharepoint/learning&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4997155" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Learning/default.aspx">Learning</category></item><item><title>Managed paths for new site collections</title><link>http://blogs.msdn.com/sumanc/archive/2007/07/25/managed-paths-for-new-site-collections.aspx</link><pubDate>Wed, 25 Jul 2007 08:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4038569</guid><dc:creator>Suman Chakrabarti</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sumanc/comments/4038569.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sumanc/commentrss.aspx?PostID=4038569</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sumanc/rsscomments.aspx?PostID=4038569</wfw:comment><description>&lt;P&gt;Just saw a great demo on planning sites and found out how to use managed paths to create site collections in a web application that do &lt;STRONG&gt;not&lt;/STRONG&gt; have to be the &lt;EM&gt;/sites/&lt;/EM&gt; path. I'm guessing this was the intended approach in SPS 2003, but having never seen it before it's really alleviated a lot of the problems I'm used to running into.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Things to know about managed paths&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Managed paths allow you to create another option besides /sites and /personal.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Exclusions - I basically used managed paths in SPS 2003 to exclude paths for&amp;nbsp;virtual directories in the SharePoint site. This isn't necessary in&amp;nbsp;WSS/MOSS anymore since it's built on ASP.NET 2.0.&lt;/LI&gt;
&lt;LI&gt;Wildcard inclusions - this allows you to create many sites under the named path. The default is /sites, but you could easily have /itservices or /hr for a site collection that has many IT Services or HR sites.&lt;/LI&gt;
&lt;LI&gt;Explicit inclusions - this allows you to create a site collection with the name you apportion.&amp;nbsp;Creating&amp;nbsp;the&amp;nbsp;managed path&amp;nbsp;/itservices makes SharePoint&amp;nbsp;reserve the path.&amp;nbsp;You can now create a new collection under the site and apply quotas and expiration.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;So, as you can see, the fable of being stuck with using /sites is no more (maybe it never existed)!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4038569" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sumanc/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/sumanc/archive/tags/Getting+users+into+SharePoint/default.aspx">Getting users into SharePoint</category></item></channel></rss>