<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6343300690276792504</id><updated>2012-02-16T04:04:10.562-08:00</updated><category term='SharePoint'/><category term='UserProfiles'/><category term='SharePoint 2007'/><category term='Search'/><category term='VS2008'/><category term='Code behind variable in aspx pages'/><category term='InfoPath'/><category term='SQL Server'/><title type='text'>SharePoint  and .Net Fun</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default?start-index=101&amp;max-results=100'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>112</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5146283607187653559</id><published>2011-02-01T09:55:00.001-08:00</published><updated>2011-02-01T09:55:53.426-08:00</updated><title type='text'>Kerberos Debugging Tool</title><content type='html'>DelegConfig&lt;br /&gt;&lt;br /&gt;http://blogs.iis.net/bretb/archive/2008/03/27/How-to-Use-DelegConfig.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5146283607187653559?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5146283607187653559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5146283607187653559' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5146283607187653559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5146283607187653559'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2011/02/kerberos-debugging-tool.html' title='Kerberos Debugging Tool'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-898369141363576363</id><published>2010-05-04T08:18:00.002-07:00</published><updated>2010-05-04T08:18:52.359-07:00</updated><title type='text'>ASP.NET 2.0 Tag Mapping</title><content type='html'>http://community.bamboosolutions.com/blogs/bambooteamblog/archive/2009/06/20/sharepoint-people-picker-override-validation-logic.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-898369141363576363?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/898369141363576363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=898369141363576363' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/898369141363576363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/898369141363576363'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/05/aspnet-20-tag-mapping.html' title='ASP.NET 2.0 Tag Mapping'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3158046913096509284</id><published>2010-05-04T08:18:00.000-07:00</published><updated>2010-10-07T06:24:15.337-07:00</updated><title type='text'>SharePoint auth provider web.config settings</title><content type='html'>Check this out:&lt;br /&gt;http://blogs.msdn.com/harsh/archive/2007/01/10/forms-based-authentication-in-moss.aspx&lt;br /&gt;http://technet.microsoft.com/en-us/library/cc262069.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3158046913096509284?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3158046913096509284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3158046913096509284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3158046913096509284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3158046913096509284'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/05/sharepoint-authentication-provider.html' title='SharePoint auth provider web.config settings'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-7182584276398896565</id><published>2010-04-29T08:45:00.000-07:00</published><updated>2010-04-29T08:46:53.542-07:00</updated><title type='text'>Automatic NTLM auth with Firefox</title><content type='html'>&lt;div class="itemBodyStyle"&gt;Being a dedicated &lt;a href="http://www.mozilla.org/products/firefox"&gt;Firefox&lt;/a&gt;  user, one of the few things that was still thwarting me was &lt;span class="searchword"&gt;SharePoint&lt;/span&gt;.&amp;nbsp; We use &lt;span class="searchword"&gt;SharePoint&lt;/span&gt;  internally for a ton of stuff, and it was a drag to have to fall back  to that other browser.&amp;nbsp; &lt;span class="searchword"&gt;SharePoint&lt;/span&gt; pages  look and work fine in Firefox, but I was having to reauthenticate on  every single page, which really hindered my enjoyment of the experience.&lt;br /&gt;I  finally figured out how to get Firefox to do NTLM, which means I don’t  have to deal with the authentication dialogs, thereby reducing my  dependence on IE to one and only one application (&lt;a href="http://www.oddpost.com"&gt;Oddpost&lt;/a&gt;).&amp;nbsp;  &lt;br /&gt;It’s not at all obvious how to make it work, and it took me a  few tries.&amp;nbsp; You have to go to your Firefox address bar and type &lt;em&gt;about:config.&amp;nbsp;  &lt;/em&gt;This will bring up the internal config editor, which allows you to  set all kinds of properties that influence Firefox’s behavior.&amp;nbsp; Look  for the key called &lt;em&gt;network.automatic-ntlm-auth.trusted-uris&lt;/em&gt;.&amp;nbsp;  Set that key’s value to a comma separated list of servers you want NTLM  auth for.&amp;nbsp; So if your internal &lt;span class="searchword"&gt;SharePoint&lt;/span&gt;  sites are on servers called Larry and Mo, use “larry,mo”.&amp;nbsp; You can also  add the same value to the key &lt;em&gt;network.negotiate-auth.trusted-uris.&lt;/em&gt;&amp;nbsp;  It’s unclear to me if that second one is required, but I set it, and  everything works.&amp;nbsp; Now &lt;span class="searchword"&gt;SharePoint&lt;/span&gt; works  like a champ, and authenticates automatically.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-7182584276398896565?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/7182584276398896565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=7182584276398896565' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7182584276398896565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7182584276398896565'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/04/automatic-ntlm-auth-with-firefox.html' title='Automatic NTLM auth with Firefox'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-2968314555160953099</id><published>2010-04-28T09:11:00.000-07:00</published><updated>2010-04-28T09:11:18.280-07:00</updated><title type='text'>Update Site Quota for existing sites- Tips &amp; Tricks</title><content type='html'>&lt;p&gt;There is a little known discrepancy in the SharePoint 2007 Site Quota Templates; they are not easily updated. You see Site Quotas are based upon a template model that is disconnected in nature. That means that all new sites that have the template applied will get the updated version but any existing sites for which it was previously applied retain the previous values.  &lt;p&gt;Unfortunately when you make changes to the template in Central Administration and then check the site quota of an existing site it does appear that the changes have taken effect. This is because the page is simply pulling the settings from the new Quota Template instead of pulling the settings applied at the site level. If you use StsAdm.exe to enumerate through the sites you will see that the site quota retains the previous values. I'll demonstrate.  &lt;p&gt;Lets edit an existing Quota Template for Personal Sites. You navigate to Central Administration and click on Quota Templates. You can see that the existing values are set to allow a maximum storage limit of 100 MB.  &lt;p&gt;&lt;a href="http://7ggvcw.bay.livefilestore.com/y1pgjcTiSgiGubPapQKn_IbhiozCmdUwdyu4QnliSFCrg--lD7Q9AlZ7XguP7u8T0dfqP3vvFZ4zLJx9eH1cR3C-w?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height="184" alt="quota1" src="http://by1.storage.msn.com/y1p9CQ5srM9ZjSCRkqGnszzfbuOvYuUoFnkxxyMzZ98NrMF_gRdqJz02EDenJS4gvVerP89NLRq3A6QMxlKRAW8p5OZ28yzpV-Z?PARTNER=WRITER" width="244" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;Now change the Storage Limit Maximum to 200 MB as below.  &lt;p&gt;&lt;a href="http://7ggvcw.bay.livefilestore.com/y1pX_Mbb1TWo3qRbpm3oIxBdWu7Je5RCpg2CJrj7Mfq9thNREQcdpBL3H-aWHv7cdrbqCi8WgSdmtyD7UK3bbNn6R9FSrypS3c3?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height="184" alt="quota2" src="http://by1.storage.msn.com/y1p9CQ5srM9ZjRqvpMC-d0ETWMNL8xazKXbdHHPLa5gPC1RPw5TYU0Dhja2U3T5r1w0jVbF8QF05wn6Jb3rFiTqluzSyXES0k3v?PARTNER=WRITER" width="244" border="0" /&gt;&lt;/a&gt; &lt;p&gt;If we navigate to Site Quotas and Locks and choose the MySites web application we can see that our changes have taken effect. Or so it would appear.  &lt;p&gt;&lt;a href="http://7ggvcw.bay.livefilestore.com/y1pX_Mbb1TWo3r_cWxSUHXhb0iu1Jr6N2kfYPCbOtr0czxyrP3KIbJZoFhuXMiJW-QTbSYI7MXKINHu1MCzy9CL3oKHWeqCsmOR?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height="184" alt="quota3" src="http://by1.storage.msn.com/y1p9CQ5srM9ZjRIhWW0WwgOiYVxNuJOT0pQdoW0u4I-_rZ1VufvmO583TTyYcyMd-npUxLHkCRfJsTZG6zoMh5_0Mv69Zaw93Q8?PARTNER=WRITER" width="244" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;However, if we use Stsadm.exe and Enumerate through the sites in the web application though we can see that our initial value of 100 MB still applies.  &lt;p&gt;&lt;a href="http://7ggvcw.bay.livefilestore.com/y1pX_Mbb1TWo3pMZhb7NuvcvmU0n0FrdjFe0RjeK0vyXTV6CMx-wlhdM85Z3h8u_IU-FTvzEa5sc10o-X5vR9BXQjKOTnF9J7Y2?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height="184" alt="enumSites" src="http://by1.storage.msn.com/y1p9CQ5srM9ZjSlOtKOfTlTw2oOMNbXSAG_Z3JRuG4krApfq_Pf2vgrqw8CuBDftMgdtUg6NWJUgSqqi3u2qHiqDMjcCDK7kJ3s?PARTNER=WRITER" width="244" border="0" /&gt;&lt;/a&gt; &lt;p&gt;This is because the Quota Template is just that, a template, it only applies to new sites that are assigned the quota from that point forward. It does not propagate its changes.  Actually there really is no way to propagate these changes and of course we can't have that, so I wrote a little extension to Stsadm.exe to make that possible.  &lt;p&gt;Rather than bore you with the specifics of how I did this I'll refer you to the blog that I used for references on extending Stsadm.exe. John Holiday has a great article &lt;a href="http://johnholliday.net/archive/2006/11/04/Extending-STSADM-with-Custom-Commands.aspx" target="_blank"&gt;here&lt;/a&gt;. And of course there is the trusty SDK with which I could not live without.  &lt;p&gt;Below is a screen shot of the help for the Update Quota command that I wrote for Stsadm.exe.  &lt;p&gt;&lt;a href="http://7ggvcw.bay.livefilestore.com/y1pX_Mbb1TWo3o1IKMLwNYkzlfHqu93Q5yLmJ9q1V-wlrskFuPnylkXKl1N93PDv13XNIOQpPFVbZx_u_GMmP1ySLbOgXtpz6qW?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height="135" alt="updateQuotaHelp" src="http://by1.storage.msn.com/y1p9CQ5srM9ZjQxTd4hYijcgNObJW3MP6Hl8R3yR6FxXyrr1x09nnAOLrTe9wIR17vYuq9Fjuyz5JOrlmgwLgc3_APGQ9wSHNbI?PARTNER=WRITER" width="244" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;As you can see it takes 2 parameters, one for the URL and another for the Quota Template Name. The command would be stsadm -o updatequota -url &amp;quot;http://my.demo.com&amp;quot; -quotaname &amp;quot;Personal Site&amp;quot;.  &lt;p&gt;After running the command we can go back and use stsadm to enumerate through the sites and see that our changes have taken effect.  &lt;p&gt;&lt;a href="http://7ggvcw.bay.livefilestore.com/y1pgjcTiSgiGuYTMuR2BvdjORCsb3sNNz7BdnymCw2zpUB_Ap4wZyrI1TC6KkB2AH3fAuW_NWfjYWwYachdV4eBEg?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height="123" alt="quotasUpdated" src="http://by1.storage.msn.com/y1p9CQ5srM9ZjTnIRaKwiXNZaJ69lGILih1RorjrDXGqwNyTp0MyywueJLoEE_NQG6caQ78TVP9Rr3g0UBE2bHOm4CnI7KJTjXY?PARTNER=WRITER" width="244" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Most everything in MOSS 2007 is extensible in one way or another and Stsadm is no exceptions. Actually extending stsadm is quite simple. In this blog entry I am going to walk through creating a custom extension for stsadm that I use in a real life scenario. This extension is called Quota Updater and you can read a little history about how this came about in my post &lt;a href="http://joeshepherd.spaces.live.com/blog/cns!9AE2097A4A610B63!286.entry" target="_blank"&gt;here&lt;/a&gt;.  &lt;p&gt;The first thing we do is create a new VS project and add a new class called &lt;em&gt;quotaupdater.cs&lt;/em&gt; and implement the ISPStsadmCommand interface. Now we have to implement the &lt;em&gt;Run&lt;/em&gt; and &lt;em&gt;GetHelpMessage&lt;/em&gt; methods. These look like this:&lt;pre&gt;&lt;span style="color:blue"&gt;public int &lt;/span&gt;Run(&lt;span style="color:blue"&gt;string &lt;/span&gt;command, &lt;span style="color:#2b91af"&gt;StringDictionary &lt;/span&gt;keyValues, &lt;span style="color:blue"&gt;out string &lt;/span&gt;output)&lt;br /&gt;        {&lt;br /&gt;          //logic here&lt;br /&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;public string &lt;/span&gt;GetHelpMessage(&lt;span style="color:blue"&gt;string &lt;/span&gt;command)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;StringBuilder &lt;/span&gt;sb = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;            sb.AppendLine(&lt;span style="color:#a31515"&gt;&amp;quot;-url &amp;lt;url&amp;gt;\t\tthe url of the site to process&amp;quot;&lt;/span&gt;);&lt;br /&gt;            sb.AppendLine(&lt;span style="color:#a31515"&gt;&amp;quot;\t-quotaname &amp;lt;quotaname&amp;gt;\tthe template to process&amp;quot;&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color:blue"&gt;return &lt;/span&gt;sb.ToString();&lt;br /&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;The second thing we have to do is create an XML file that describes our commands and add it to the 12/config directory. This looks as follows:&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515"&gt;xml &lt;/span&gt;&lt;span style="color:red"&gt;version&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;encoding&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color:blue"&gt;?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;commands&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;command &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;updatequotas&lt;/span&gt;&amp;quot;&lt;br /&gt;&lt;br /&gt;          &lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;STSAdmExtensions.QuotaUpdater, STSAdmExtensions, &lt;br /&gt;      Version=1.0.0.0, Culture=neutral, PublicKeyToken=86a65a77eee85b51&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;command&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;commands&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;In the above XML file the command name is whatever you would like your user to type to activate the custom command with stsadm. This does not necessarily have to be the same as your method or class. It can literally be whatever you would like. The class section is the typical stuff you can get by using &lt;a href="http://www.devexpress.com/Products/NET/IDETools/Refactor/" target="_blank"&gt;Refactor&lt;/a&gt; on your assembly. &lt;br /&gt;&lt;p&gt;Now for the meat of the application. Basically what I wanted to do was get a reference to a site collection and a quota template and force updates to the template down to the sites on which it is applied. The Run method is as follows:&lt;pre&gt;&lt;span style="color:blue"&gt;public int &lt;/span&gt;Run(&lt;span style="color:blue"&gt;string &lt;/span&gt;command, &lt;span style="color:#2b91af"&gt;StringDictionary &lt;/span&gt;keyValues, &lt;span style="color:blue"&gt;out string &lt;/span&gt;output)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#2b91af"&gt;StringBuilder &lt;/span&gt;sb = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;    &lt;span style="color:blue"&gt;string &lt;/span&gt;url = keyValues[&lt;span style="color:#a31515"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;], quotaName = keyValues[&lt;span style="color:#a31515"&gt;&amp;quot;quotaname&amp;quot;&lt;/span&gt;];&lt;br /&gt;    &lt;span style="color:green"&gt;//if no URL specified then return 0 and message&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue"&gt;if &lt;/span&gt;(url == &lt;span style="color:blue"&gt;null &lt;/span&gt;|| url.Length == 0)&lt;br /&gt;    {&lt;br /&gt;        output = &lt;span style="color:#a31515"&gt;&amp;quot;No url specified&amp;quot;&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color:blue"&gt;return &lt;/span&gt;0;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:green"&gt;//if no Quota Template name supplied then return 0 and message&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue"&gt;if &lt;/span&gt;(quotaName == &lt;span style="color:blue"&gt;null &lt;/span&gt;|| quotaName.Length == 0)&lt;br /&gt;    {&lt;br /&gt;        output = &lt;span style="color:#a31515"&gt;&amp;quot;No Quota Template specified&amp;quot;&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color:blue"&gt;return &lt;/span&gt;0;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue"&gt;try&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        SPSite site = &lt;span style="color:blue"&gt;new &lt;/span&gt;SPSite(url);&lt;br /&gt;        SPWebApplication webApp = site.WebApplication;&lt;br /&gt;        SPSiteCollection col = webApp.Sites;&lt;br /&gt;&lt;br /&gt;        SPGlobalAdmin globalAdmin = &lt;span style="color:blue"&gt;new &lt;/span&gt;SPGlobalAdmin();&lt;br /&gt;        SPGlobalConfig globalConfig = globalAdmin.Config;&lt;br /&gt;        SPQuotaTemplate quota = globalConfig.QuotaTemplates[quotaName];&lt;br /&gt;&lt;br /&gt;        UpdateQouta(col, quota);&lt;br /&gt;        output = message;&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color:green"&gt;//clean up resources&lt;br /&gt;        &lt;/span&gt;site.Close();&lt;br /&gt;        site.Dispose();&lt;br /&gt;        &lt;span style="color:blue"&gt;return &lt;/span&gt;1;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue"&gt;catch &lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Exception &lt;/span&gt;ex)&lt;br /&gt;    {&lt;br /&gt;        output = ex.Message;&lt;br /&gt;        &lt;span style="color:blue"&gt;return &lt;/span&gt;0;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;And the UpdateQuota method is shown below. &lt;pre&gt;&lt;span style="color:gray"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// &lt;/span&gt;&lt;span style="color:green"&gt;Updates all site quotas in a site collection with updated quota template values&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;sites&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;quotaTemplate&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;public void &lt;/span&gt;UpdateQouta(SPSiteCollection sites, SPQuotaTemplate quotaTemplate)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;int &lt;/span&gt;iCount = 0;&lt;br /&gt;    &lt;span style="color:#2b91af"&gt;StringBuilder &lt;/span&gt;sb = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(SPSite site &lt;span style="color:blue"&gt;in &lt;/span&gt;sites)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:green"&gt;//verify quota on the site against the quota template to prevent overwrite&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:blue"&gt;if &lt;/span&gt;(site.Quota.QuotaID == quotaTemplate.QuotaID)&lt;br /&gt;        {&lt;br /&gt;            iCount++;&lt;br /&gt;            site.Quota.InvitedUserMaximumLevel = quotaTemplate.InvitedUserMaximumLevel;&lt;br /&gt;            site.Quota.StorageMaximumLevel = quotaTemplate.StorageMaximumLevel;&lt;br /&gt;            site.Quota.StorageWarningLevel = quotaTemplate.StorageWarningLevel;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue"&gt;if &lt;/span&gt;(iCount == 0)&lt;br /&gt;    { &lt;br /&gt;            message = &lt;span style="color:#a31515"&gt;&amp;quot;No sites were updated. Make sure you specified the correct &amp;quot; &lt;/span&gt;+_&lt;br /&gt;                    &lt;span style="color:#a31515"&gt;&amp;quot;Quota Template Name.&amp;quot;&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue"&gt;else&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        sb.AppendLine(iCount + &lt;span style="color:#a31515"&gt;&amp;quot; Sites Updated&amp;quot;&lt;/span&gt;);&lt;br /&gt;        sb.AppendLine(&lt;span style="color:#a31515"&gt;&amp;quot;The Command Completed Successfully&amp;quot;&lt;/span&gt;);&lt;br /&gt;        message = sb.ToString();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Now all you have to do is deploy the assembly to the GAC and copy your XML file to the 12/config directory and you are set to go. &lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-2968314555160953099?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/2968314555160953099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=2968314555160953099' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2968314555160953099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2968314555160953099'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/04/update-site-quota-for-existing-sites.html' title='Update Site Quota for existing sites- Tips &amp; Tricks'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-9063052475616801460</id><published>2010-04-26T09:41:00.000-07:00</published><updated>2010-04-26T09:41:28.317-07:00</updated><title type='text'>Host Multiple Websites using SSL on Port 443- WildCard Server Certificate</title><content type='html'>&lt;div style="font-family:verdana;font-size:10px"&gt;&lt;p&gt;Wildcard SSL certificates can allow you to publish multiple IIS web sites--all using SSL on port 443--that are accessible by host headers. That is, if you're running on IIS 6 or above.&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;So you read about these things, wildcard certificates, but mostly you read about how to buy them. It is possible (and easy) to create one for yourself, however, so long as you don't mind it not being trusted by folks' browsers.&lt;br /&gt;&lt;br /&gt;There are some really good uses for these, not least in a test environment in which you don't care about the trust. Production environments need them, too, sometimes, such as when you're using a network appliance like a Netscaler or F5 load balancer. Those devices allow you to point multiple URLs (cnames, really) to a single (or multiple) server(s). Very handy. In our case, we have several web sites that we'd like to secure using SSL. Problem is: they're all on a single server.&lt;br /&gt;&lt;br /&gt;There are several options for dealing with such a case: assign multiple IP addresses to the server, use different SSL ports for each IIS site, or (definitely the coolest option) use a wildcard certificate on the server to allow IIS to decipher the http host header. This option, by the way, is a new feature with IIS 6, so if there's anyone out there still using IIS v5, this is another reason to upgrade.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Background&lt;/span&gt;&lt;br /&gt;A little background on the problem might be in order: a SSL certificate is used to encrypt the http data. Normally, in setting up a IIS web site, we differentiate that site from all the others by assigning unique host headers to each site. IIS can use those host headers to determine to which site to route any given http request.&lt;br /&gt;When the site is using ssl, however, the host header is encrypted, which introduces something of a chicken-and-egg thing: since the host header (along with all the rest of the data) is encrypted, IIS can't use that to determine which site to send the request to. And, since a SSL certificate is site-specific, IIS can't use a certificate to decrypt the data until it knows which site the request belongs to. Thus, it widely is reported that it isn't possible to have multiple SSL sites on a single server, all sharing the same port.&lt;br /&gt;&lt;br /&gt;Enter wildcard SSL certificates and secure server bindings. The wildcard certificate allows IIS to use the same certificate for all of the sites on a particular port. That takes away the requirement that IIS know which site's certificate to use in decrypting the data. Secure server bindings help IIS in securing the wildcard certificate, a requirement for setting this up.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Note that a similar solution is available to apache. You can read about it &lt;a href="http://lanestechblog.blogspot.com/2008/03/creating-self-signed-wildcard-ssl_13.html"&gt;here&lt;/a&gt;.&lt;/span&gt; Thus, it is very possible to have multiple SSL sites on a single server, all sharing the same port.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Configure your sites to use host headers&lt;/span&gt;&lt;br /&gt;&lt;p&gt;Host headers are the backbone of this.  Open the properties window for each site in IIS and click the &lt;strong&gt;advanced&lt;/strong&gt; button.  There, you can add the appropriate host header on port 80.  &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Creating a self-signed wildcard SSL certificate:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The next step in this process is to make sure that all of the relevant sites have the same SSL port assigned to them. In IIS, go to each site's properties and enter the appropriate port number (the same one for each site) in the SSL Port field. 443 is the default SSL port.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Note that once you do this, all but one of the affected sites will stop. That is because, at this point, IIS isn't configured to allow multiple sites to share the same SSL port. That's OK; we'll take care of that in a moment.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Now, to generate the certificate: using SelfSSL, generate the certificate for one existing IIS site. SelfSSL is a tool that's a part of the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=56FC92EE-A71A-4C73-B628-ADE629C89499&amp;amp;displaylang=en"&gt;Microsoft IIS Resource kit&lt;/a&gt;. If you haven't downloaded and installed it, you'll need to do that first. Here's the syntax:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="codesnippet"&gt;selfssl /n:cn=*.server.edu /s:1 /P:443 /v:3650&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Where &lt;span style="font-style: italic;"&gt;*.server.edu&lt;/span&gt; would be your own URL. So if you had these sites:&lt;br /&gt;mysite.sharepoint.com&lt;br /&gt;portal.sharepoint.com&lt;br /&gt;auth.sharepoint.com&lt;br /&gt;you'd use this code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codesnippet"&gt;selfssl /n:cn=*.sharepoint.com /s:1 /P:443 /v:3650&lt;br /&gt;&lt;/div&gt;It's the * that makes it a wildcard certificate.&lt;br /&gt;&lt;br /&gt;The /s:1 is the site identification. There are a variety of ways to view a site's identifier, but the easiest simply is to open the IIS manager and click on the "web sites" tree on the left. The right-hand pane will show the description and identifier. The default site has an identifier of 1; the other sites have very long identifiers.&lt;br /&gt;&lt;br /&gt;/P: is the SSL port you're using, and /V: is the number of days for which this cert is valid. Why would you want it to expire, anyway?&lt;br /&gt;&lt;br /&gt;Now you've generated a wildcard certificate.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Assign the Certificate to your sites&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The easiest way to assign a certificate to a site, having already created it, is to view the site properties in IIS Manager. Click on &lt;span style="font-weight: bold;"&gt;Directory Security&lt;/span&gt;, and then on the &lt;span style="font-weight: bold;"&gt;Server Certificate&lt;/span&gt; button. This will start the wonderful wizard of IIS.&lt;br /&gt;&lt;br /&gt;You already have created a certificate, so when the wizard prompts you, choose "Assign an existing certificate." When you click next, you'll see a list of available certs, including the wildcard certificate you created. Select this certificate, click next, and make sure you assign it the same port that was assigned to the first site.&lt;br /&gt;&lt;br /&gt;That's it: once the wizard has finished its magic, you've assigned the cert to your site. Repeat this for all of the sites you want to secure on this port with SSL.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Configure Secure Server Bindings&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is the final step. It involves running a vbs script to set up secure bindings, which allows IIS to use host headers with SSL and secure the new wildcard certificate you created and installed.&lt;br /&gt;&lt;br /&gt;The syntax is like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codesnippet"&gt;cscript adsutil.vbs set /w3svc/844934796/SecureBindings ":443:mysite.sharepoint.com"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The adsutil.vbs script, at least on my systems, is at C:\Inetpub\AdminScripts. You'll need to run the script command from that location.&lt;br /&gt;&lt;br /&gt;The syntax breaks down like this:&lt;br /&gt;844934796 is the site ID. Substitute your own site identifier there.&lt;br /&gt;443, again, is the port&lt;br /&gt;mysite.sharepoint.com is the host header for the site. Make sure that you have this host header configured in the site properties in IIS, as well.&lt;br /&gt;&lt;br /&gt;Run this script for each of your IIS sites.&lt;br /&gt;&lt;br /&gt;That should be all you need to do. Start up the stopped sites after you've run cscript, and you should be good to go.&lt;br /&gt;&lt;br /&gt;Microsoft has a few documents that run through this, but they don't really put the pieces together for you. Here they are:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/596b9108-b1a7-494d-885d-f8941b07554c.mspx?mfr=true"&gt;Configure SSL Host Headers (IIS 6.0)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://http//www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/8d9f2a8f-cd23-448c-b2c7-f4e87b9e2d2c.mspx?mfr=true"&gt;Configuring Server Bindings for SSL Host Headers (IIS 6.0)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/5d0fb4c2-3333-4fec-82fc-6e15d3733937.mspx?mfr=true"&gt;Obtaining and Installing a Wildcard Server Certificate&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By the way: if you've done a lot of testing, and you've generated a bunch of certificates you're no longer using, you can delete them. Run mmc.exe and add the &lt;span style="font-weight: bold;"&gt;certificates &lt;/span&gt;snap-in. You'll want to choose the "local computer" version. Using that, you can manage all of your local certificates, including deleting the ones you no longer need.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-9063052475616801460?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/9063052475616801460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=9063052475616801460' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/9063052475616801460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/9063052475616801460'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/04/host-multiple-websites-using-ssl-on.html' title='Host Multiple Websites using SSL on Port 443- WildCard Server Certificate'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5109258987166228413</id><published>2010-03-29T08:03:00.002-07:00</published><updated>2010-03-29T08:03:43.564-07:00</updated><title type='text'>How to create a browser cache save URL to a javascript or css file in SharePoint</title><content type='html'>&lt;p&gt;&lt;h4&gt;How to create a browser cache save URL to a javascript or css file in SharePoint&lt;/h4&gt;&lt;P&gt;Often it is necessary to ensure that updates to files on the server get populated to the client asap. Especially when it comes to dependencies to custom javascript of CSS files and server controls.&lt;/P&gt;&lt;P&gt;SharePoint itself does this by adding a query string to some of its vital Javascript files. E.g.:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;/_layouts/1033/core.js?rev=PQia%2B0EyudqxiQyTfOSR%2Fw%3D%3D&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Whenever the core.js file changes on the server a new query string value is generated. That allows browsers to cache the file as long as the file does not change on the server. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;Today I got the question if it is possible to utilize the same method for custom js and css files. The answer is yes.&lt;/P&gt;&lt;P&gt;SharePoint provides the functionality to generate browser cache save Urls for such files if they reside inside the _layouts directory or one of it's localized subdirectory using the following method:&lt;/P&gt;&lt;TT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;br /&gt;&lt;P&gt;public static string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Microsoft.SharePoint.Utilities.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;SPUtility&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.MakeBrowserCacheSafeLayoutsUrl(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; name, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;bool&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; localizable)&lt;/FONT&gt;&lt;/P&gt;&lt;/TT&gt;&lt;br /&gt;&lt;P&gt;The first parameter needs to be the filename without a path (e.g. test.css) the second defines if the file resides in a language specific subdirectory or directly in the _layouts directory.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;The following code will (e.g.) create the output below for german locale:&lt;/P&gt;&lt;TT&gt;&lt;br /&gt;&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; saveUrl = Microsoft.SharePoint.Utilities.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;SPUtility&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.MakeBrowserCacheSafeLayoutsUrl(&lt;FONT color=#a31515&gt;"my-own.js"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;/TT&gt;&lt;br /&gt;&lt;P&gt;&lt;FONT size=2&gt;/_layouts/1031/my-own.js?rev=PQia%2B0EyudqxiQyTfOSR%2Fw%3D%3D&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5109258987166228413?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5109258987166228413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5109258987166228413' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5109258987166228413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5109258987166228413'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/how-to-create-browser-cache-save-url-to.html' title='How to create a browser cache save URL to a javascript or css file in SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-7812712591688880972</id><published>2010-03-29T08:03:00.000-07:00</published><updated>2010-03-29T08:03:19.356-07:00</updated><title type='text'>SharePoint Caching</title><content type='html'>&lt;p&gt;&lt;h4&gt;Bring Cache&lt;/h4&gt;&lt;p&gt;Depending on your user base you may care very little about how caching works in SharePoint. But whether you plan on using it or not, you should at least know it's there and that it takes very little effort to turn it on.&lt;/p&gt;&lt;p&gt;Remember that almost everything in SharePoint resides in the content database. This coupled with the fact that opening a database connection is an extremely expensive operation means that there's potentially a lot more capacity to be had from a SharePoint site by simply enabling caching.&lt;/p&gt;&lt;p&gt;In my experience running the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e2c0585a-062a-439e-a67d-75a89aa36495&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Web Application Stress Tool&lt;/a&gt; on test SharePoint sites, most sites running caching profiles were able to achieve 33% more requests per second that those using no caching at all. That's a LOT more capacity to be had, and best of all it's free (you know...you've already paid a lot of money for MOSS). &lt;/p&gt;&lt;p&gt;To enable &lt;strong&gt;Page Output Caching&lt;/strong&gt; you need to turn on both the &lt;strong&gt;Office SharePoint Server Publishing Infrastructure&lt;/strong&gt; feature in the Site Collection and the &lt;strong&gt;Office SharePoint Server Publishing&lt;/strong&gt; in the sub site. &lt;strong&gt;Disk Caching&lt;/strong&gt; is turned on through the web.config.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;Page Output Caching&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Page Output Caching works a lot like ASP.NET page output caching, allowing you to cache pages in memory for a certain period of time and also maintain many cached versions of pages based off of Browser Type, Query String, HTTP Header, or some custom function that you write and implement in your pages. It's quite flexible.&lt;/p&gt;&lt;p&gt;You start off by defining Caching Profiles in Site Settings (that is, how you want to determined if something should be cached) and then assigning profiles to either of Authenticated or Anonymous users as they visit your site. For instance, you could choose to cache pages for anonymous users and not cache pages for authenticated users.&lt;/p&gt;&lt;p&gt;By default Cache Profiles inherit down to sub sites just like security, and like security you can change the inheritance at any sub site along the way.&lt;/p&gt;&lt;h4&gt;Disk Caching&lt;/h4&gt;&lt;p&gt;The other type of caching is Disk Caching which simply stores assets that you would normally fetch from the content database on disk. Disk Caching and Page Output Caching aren't mutually exclusive and actually marry quite well together. To enable disk output caching all you really need to do is open up the web.config for the site and change the &lt;strong&gt;BlobCache &lt;/strong&gt;key to look like below:&lt;/p&gt;&lt;div class="code"&gt;&amp;lt;Blobcache location=&amp;quot;C:\blobCache&amp;quot; path=&amp;quot;\.(gif|jpg|png|css|js)$&amp;quot; maxSize=&amp;quot;10&amp;quot; enabled=&amp;quot;&lt;strong&gt;&lt;u&gt;&lt;em&gt;true&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt;&amp;quot; /&amp;gt;&lt;/div&gt;&lt;p&gt;It's worth mentioning that &lt;strong&gt;path&lt;/strong&gt; is a regular expressions of file types to cache to disk and &lt;strong&gt;maxSize&lt;/strong&gt; is measured in &lt;strong&gt;gigabytes&lt;/strong&gt;. The &lt;strong&gt;location&lt;/strong&gt; is of course where these files will be persisted to disk.&lt;/p&gt;&lt;h4&gt;Some Thoughts&lt;/h4&gt;&lt;p&gt;I would strongly encourage you to enable caching schemes one or more of your SharePoint sites to try it out. Those that make the best candidates (stand to gain the most performance) are those that have a lot of users and have anonymous access turned on for the entire site collection (usually synonymous with public facing sites). If you think you're viewing a cached version of a page and you want to see the real content you can always suffix the query string with a nocache=1. IE. http://somedomain/Pages/default.aspx?nocache=1 displays the non cached version of default.aspx for the somedomain site.&lt;/p&gt;&lt;p&gt;So there it is. Enjoy your free performance gains. Like &lt;a href="http://en.wikipedia.org/wiki/G.I._Joe" target="_blank"&gt;G.I. Joe&lt;/a&gt; says: &amp;quot;Knowing is half the battle.&amp;quot;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-7812712591688880972?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/7812712591688880972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=7812712591688880972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7812712591688880972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7812712591688880972'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/sharepoint-caching.html' title='SharePoint Caching'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5084047630184937223</id><published>2010-03-19T14:15:00.000-07:00</published><updated>2010-03-19T14:15:35.240-07:00</updated><title type='text'>Hide New Icon or Change the Duration SharePoint</title><content type='html'>Use the command&lt;br /&gt;&lt;br /&gt;Hide the Icon&lt;br /&gt;stsadm -o setproperty -pn days-to-show-new-icon -pv 0 -url http://machinename/sites/teamsite.&lt;br /&gt;&lt;br /&gt;Change the duration from default "2" days to "10"&lt;br /&gt;&lt;br /&gt;stsadm -o setproperty -pn days-to-show-new-icon -pv 10 -url http://machinename/sites/teamsite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5084047630184937223?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5084047630184937223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5084047630184937223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5084047630184937223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5084047630184937223'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/hide-new-icon-or-change-duration.html' title='Hide New Icon or Change the Duration SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-2586030339727337428</id><published>2010-03-15T13:55:00.000-07:00</published><updated>2010-03-15T13:55:09.362-07:00</updated><title type='text'>Get All the Checkedout documents sharepoint</title><content type='html'>&lt;style type="text/css"&gt;.comment { color: #999999; font-style: italic; }.pre { color: #000099; }.string { color: #009900; }.char { color: #009900; }.float { color: #996600; }.int { color: #999900; }.bool { color: #000000; font-weight: bold; }.type { color: #FF6633; }.flow { color: #FF0000; }.keyword { color: #990000; }.operator { color: #663300; font-weight: bold; }.operator { color: #663300; font-weight: bold; }&lt;/style&gt;&lt;br /&gt;&lt;/head&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; Microsoft&lt;span class="operator"&gt;.&lt;/span&gt;Office&lt;span class="operator"&gt;.&lt;/span&gt;Server&lt;span class="operator"&gt;.&lt;/span&gt;Search&lt;span class="operator"&gt;.&lt;/span&gt;Query&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ResultTableCollection rtc&lt;span class="operator"&gt; =&lt;/span&gt; null&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;DataTable retResults&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt; DataTable&lt;span class="operator"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;           &lt;br /&gt;&lt;br /&gt;string fullTextSql&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="string"&gt; "SELECT ModifiedBy,Title,owsCheckoutUser,FileExtension,owsFileLeafRef,Path FROM SCOPE() WHERE owsCheckoutUser IS NOT NULL"&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; using&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;SPSite site&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt; SPSite&lt;span class="operator"&gt;(&lt;/span&gt;http&lt;span class="operator"&gt;:&lt;/span&gt;&lt;span class="comment"&gt;//servername))&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="operator"&gt;                {&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;                    using&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;FullTextSqlQuery query&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt; FullTextSqlQuery&lt;span class="operator"&gt;(&lt;/span&gt;site&lt;span class="operator"&gt;))&lt;br /&gt;                    {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                       &lt;br /&gt;                        query&lt;span class="operator"&gt;.&lt;/span&gt;QueryText&lt;span class="operator"&gt; =&lt;/span&gt; fullTextSql&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;                        query&lt;span class="operator"&gt;.&lt;/span&gt;ResultTypes&lt;span class="operator"&gt; =&lt;/span&gt; ResultType&lt;span class="operator"&gt;.&lt;/span&gt;RelevantResults&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                        query&lt;span class="operator"&gt;.&lt;/span&gt;RowLimit&lt;span class="operator"&gt; =&lt;/span&gt; rowLimit&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;                       &lt;br /&gt;                        rtc&lt;span class="operator"&gt; =&lt;/span&gt; query&lt;span class="operator"&gt;.&lt;/span&gt;Execute&lt;span class="operator"&gt;();&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;                        if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;rtc&lt;span class="operator"&gt;.&lt;/span&gt;Count&lt;span class="operator"&gt; &amp;gt;&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;)&lt;br /&gt;                        {&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;                                             &lt;br /&gt;                            using&lt;/span&gt;&lt;span class="operator"&gt;(&lt;/span&gt;ResultTable relevantResults&lt;span class="operator"&gt; =&lt;/span&gt; rtc&lt;span class="operator"&gt;[&lt;/span&gt;ResultType&lt;span class="operator"&gt;.&lt;/span&gt;RelevantResults&lt;span class="operator"&gt;])&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                                retResults&lt;span class="operator"&gt;.&lt;/span&gt;Load&lt;span class="operator"&gt;(&lt;/span&gt;relevantResults&lt;span class="operator"&gt;,&lt;/span&gt; LoadOption&lt;span class="operator"&gt;.&lt;/span&gt;OverwriteChanges&lt;span class="operator"&gt;);&lt;br /&gt;          &lt;br /&gt;                        }&lt;br /&gt;&lt;br /&gt;           }&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-2586030339727337428?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/2586030339727337428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=2586030339727337428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2586030339727337428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2586030339727337428'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/get-all-checkedout-documents-sharepoint.html' title='Get All the Checkedout documents sharepoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-2403953046835443119</id><published>2010-03-12T13:25:00.000-08:00</published><updated>2010-03-12T13:25:23.322-08:00</updated><title type='text'>Mange WebPart Resources (Linked vs Embedded)</title><content type='html'>&lt;span style="font-family:verdana; font-size:x-small"&gt;&lt;p&gt;One of the most common questions I get in class and see in the forums is how best to deal with Web Part resources.  By resources, I mean those necessary files that your Web Part depends on.  These include JavaScript files, images, CSS, Flash, or even Silverlight apps.  With the packaging and deployment model of SharePoint, it may be challenging to figure out where to store and how to reference these files.  This article will overview your deployment options and give you enough information to make the best choice for your resource needs.&lt;/p&gt;&lt;h4&gt;Linked or Embedded&lt;/h4&gt;&lt;p&gt;With resource files, you have two basic options:  linked or embedded.  Linked means your Web Part will point to the file that lives somewhere in the file system.  This is the most common approach.  Embedded means you store the actual resource file inside your Web Part assembly.  While less common, this can be very useful in many cases.  We’ll look at each of these in more detail.&lt;/p&gt;&lt;h4&gt;Linked Resources&lt;/h4&gt;&lt;p&gt;Linked resources work best if you’ll need to modify the resource file separately from the Web Part.  For example, say your Web Part references a JavaScript file and you continually need to tweak it and don’t want to recompile and redeploy the Web Part.  If you link to it, it’s easy to change, and no changes to your Web Part are necessary.  When working with linked resources, SharePoint provides you two primary options.  &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Store the resource in a virtual directory such as _wpresources (this points to C:\Program Files\Common Files\microsoft shared\Web Server Extensions\wpresources) &lt;br /&gt;&lt;li&gt;Store the resource with the Web Application inside the inetpub\wwwroot\wss\VirtualDirectories\&amp;lt;80&amp;gt;\wpresources&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For option 1, you should make sure your Web Part assembly is deployed into the GAC.  This is necessary since the _wpresoures virtual directory is used across each SharePoint Web Application.  We call this Farm-level scope.&lt;/p&gt;&lt;p&gt;For option 2, you should make sure your Web Web Part assembly is deployed in to the bin folder for the Web Application.   We call this Web-Application scope.&lt;/p&gt;&lt;p&gt;That said, you choose which wpresources folder based on the scope of your Web Part.  For both options, you’ll be placing your files inside a sub folder to keep them separate from other files in other Web Parts.  The sub folder name needs to be the namespace of your project.  For example, with Web-Application scope, it might go here: inetpub\wwwroot\wss\VirtualDirectories\80\wpresources\namespace.&lt;/p&gt;&lt;p&gt;Ok, so you’ve chosen the appropriate folder based on the scope.  How would you then reference this file within your Web Part code?  It’s actually pretty easy and would look like this for a JavaScript file.  (Note: this code can be placed in the CreateChildControls method for the Web Part.)&lt;/p&gt;&lt;div&gt;&lt;pre class=csharpcode&gt;&lt;span class=rem&gt;//Path to resource.  This is used for a web part deployed into the GAC (Option 1)&lt;/span&gt;&lt;br /&gt;&lt;span class=kwrd&gt;string&lt;/span&gt; scriptUrl = &lt;span class=str&gt;&amp;quot;~/_wpresources/namespace/file.js&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class=rem&gt;//Path to resource.  This is used for a web part deployed into the bin folder (Option 2)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=kwrd&gt;string&lt;/span&gt; scriptUrl = &lt;span class=str&gt;&amp;quot;~/wpresources/namespace/file.js&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class=rem&gt;//Reference Script for web page&lt;/span&gt;&lt;br /&gt;Page.ClientScript.RegisterClientScriptInclude (&lt;span class=str&gt;&amp;quot;file.js&amp;quot;&lt;/span&gt;, scriptUrl);&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Be careful, as these are very similar.  You’ll notice for the first one, that you specify _wpresources (with an underscore).  Also, make sure you replace namespace with the actual namespace for your Web Part project.  For an image, it would work like this:&lt;/div&gt;&lt;div&gt;&lt;pre class=csharpcode style="width:99.58%;height:48px"&gt;Image myImage = &lt;span class=kwrd&gt;new&lt;/span&gt; Image();&lt;br /&gt;myImage.ImageUrl = &lt;span class=str&gt;&amp;quot;~/wpresources/namespace/image.jpg&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class=kwrd&gt;this&lt;/span&gt;.Controls.Add(myImage);&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br&gt;The last important detail when using linked resources is how should you deploy these files?  First off, you should be using SharePoint Solutions to deploy your code.  You are doing this, right?  Inside the Solution manifest.xml file, there are specific tags to deploy these kinds of resources.  The schema looks like this:&lt;/p&gt;&lt;div&gt;&lt;pre class=csharpcode&gt;&lt;span class=kwrd&gt;&amp;lt;&lt;/span&gt;&lt;span class=html&gt;Assembly&lt;/span&gt; &lt;span class=attr&gt;Location&lt;/span&gt;&lt;span class=kwrd&gt;=&amp;quot;Namespace.dll&amp;quot;&lt;/span&gt; &lt;span class=attr&gt;DeploymentTarget&lt;/span&gt;&lt;span class=kwrd&gt;=&amp;quot;WebApplication&amp;quot;&lt;/span&gt;&lt;span class=kwrd&gt;&amp;gt;&lt;/span&gt;   &lt;br /&gt;   ...&lt;br /&gt;   &lt;span class=kwrd&gt;&amp;lt;&lt;/span&gt;&lt;span class=html&gt;ClassResources&lt;/span&gt;&lt;span class=kwrd&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      &lt;span class=kwrd&gt;&amp;lt;&lt;/span&gt;&lt;span class=html&gt;ClassResource&lt;/span&gt; &lt;span class=attr&gt;Location&lt;/span&gt;&lt;span class=kwrd&gt;=&amp;quot;file.js&amp;quot;&lt;/span&gt;&lt;span class=kwrd&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=kwrd&gt;&amp;lt;&lt;/span&gt;&lt;span class=html&gt;ClassResource&lt;/span&gt; &lt;span class=attr&gt;Location&lt;/span&gt;&lt;span class=kwrd&gt;=&amp;quot;image.jpg&amp;quot;&lt;/span&gt;&lt;span class=kwrd&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class=kwrd&gt;&amp;lt;/&lt;/span&gt;&lt;span class=html&gt;ClassResources&lt;/span&gt;&lt;span class=kwrd&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=kwrd&gt;&amp;lt;/&lt;/span&gt;&lt;span class=html&gt;Assembly&lt;/span&gt;&lt;span class=kwrd&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Here is where you can see that the DeploymentTarget attribute matches the scoping option.  In this sample above, it is WebApplication scoped (option 2).  To deploy into the GAC, replace this with GlobalAssemblyCache.  To learn more about the schema inside this file, see this &lt;a href="http://msdn.microsoft.com/en-us/library/ms442108.aspx"&gt;link&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;Now that you have a good grasp on linked resources, let’s take a closer look at those that are embedded.&lt;/p&gt;&lt;h4&gt;Embedded Resources&lt;/h4&gt;&lt;style&gt;.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode-wrapper, .ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode-wrapper pre{background-color:#f4f4f4;border:solid 1px gray;cursor:text;font-family:consolas, 'Courier New', courier, monospace;font-size:9pt;line-height:12pt;margin:20px 0px 10px 0px;overflow:auto;padding:4px 4px 4px 4px;width:97.5%;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode-wrapper pre{border-style:none;margin:0px 0px 0px 0px;overflow:visible;padding:0px 0px 0px 0px;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode, .ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode pre, .ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .alt{background-color:#f4f4f4;border-style:none;color:black;font-family:consolas, 'Courier New', courier, monospace;font-size:9pt;line-height:12pt;overflow:visible;padding:0px 0px 0px 0px;width:100%;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode pre{margin:0em;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .alt{background-color:white;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .asp{background-color:#ffff00;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .attr{color:#a31515;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .cls{color:#cc6633;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .html{color:#800000;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .kwrd{color:#0000ff;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .lnum{color:#606060;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .op{color:#0000c0;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .preproc{color:#cc6633;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .rem{color:#008000;}.ExternalClassB260E65EFC10467C8EEE34C428CFEFE7 .externalclass4ee920530b724333ac87d9efb725dc4d .csharpcode .str{color:#a31515;}&lt;/style&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Embedded resources are physically stored within the Web Part .DLL file.  In one way, this is nice as you can always be assured that the resources and the Web Part stay together.  The drawback is that if you need to change a resource, you must recompile and deploy an updated version of your Web Part.  When the client needs the resource, it is dynamically extracted from the .DLL and provided.  You’ll see how.&lt;/p&gt;&lt;p&gt;To use an embedded resource, there are three things you need to do.  The first is that you need to add the resource file to the project and mark is as an Embedded Resource.  This is done via the Build Action setting inside Visual Studio as shown here.&lt;/p&gt;&lt;p&gt;&lt;img title=image style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=178 alt=image src="/blog/blog-moss/Lists/Posts/Attachments/42/image_3_6Aj9vQ.png" width=334 border=0&gt; &lt;/p&gt;&lt;p&gt;The second thing you need to do is declare this resource inside the AssemblyInfo.cs file for your Web Part project.  This is an easy one-liner as shown:&lt;/p&gt;&lt;div&gt;&lt;pre class=csharpcode style="width:99.99%;height:16px"&gt;[assembly: System.Web.UI.WebResource(&lt;span class=str&gt;&amp;quot;namespace.file.js&amp;quot;&lt;/span&gt;, &lt;span class=str&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The parameter string that is used consists of the Web Part namespace followed by the filename of the resource.  The next parameter is just the MIME type.  If this were an image, it could be image/jpg.&lt;/p&gt;&lt;p&gt;The third thing step is make sure you extract the Url to the resource.  This is also one line of code as shown:&lt;/p&gt;&lt;div&gt;&lt;pre class=csharpcode style="width:99.8%;height:16px"&gt;&lt;span class=kwrd&gt;string&lt;/span&gt; scriptUrl = Page.ClientScript.GetWebResourceUrl(&lt;span class=kwrd&gt;this&lt;/span&gt;.GetType(), &lt;span class=str&gt;&amp;quot;namespace.file.js&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As with linked resources, you’ll then deliver this script to the page with a call to RegisterClientScriptInclude within CreateChildControls.  As you would probably guess, the string here must match the name in the AssemblyInfo.cs file.  As written here, the resource files need to exist in the root folder of the Web Part project.  (Note: technically you don’t need to precede the file with the namespace as long as the string is unique within the project.  The common convention, however, is with the namespace).&lt;/p&gt;&lt;p&gt;You might be curious how this actually works from the browser’s perspective.  Well, what gets delivered to the browser is a link to a special, in-memory page called WebResource.axd along with a querystring to uniquely identify this specific resource.  In HTML, it looks something like this:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;pre class=csharpcode&gt;&lt;span class=kwrd&gt;&amp;lt;&lt;/span&gt;&lt;span class=html&gt;script&lt;/span&gt; &lt;span class=attr&gt;src&lt;/span&gt;&lt;span class=kwrd&gt;=&amp;quot;/WebResource.axd?d=ZPJuqJGGI6qgSKsEa2PfIw2&amp;amp;amp;t=633527425956801634&amp;quot;&lt;/span&gt; &lt;br /&gt;        &lt;span class=attr&gt;type&lt;/span&gt;&lt;span class=kwrd&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class=kwrd&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span class=kwrd&gt;&amp;lt;/&lt;/span&gt;&lt;span class=html&gt;script&lt;/span&gt;&lt;span class=kwrd&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;This is how it dynamically finds the resource file, extracts it from the Web Part DLL, sets the content type, and then delivers it to the browser.  Pretty cool.&lt;/p&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In this post, you have seen how to both link to and embed Web Part resources.  Each has its own advantages and disadvantages, mostly boiling down to whether you need to maintain the resource separately from the Web Part.  In both cases, the resource file can be cached, so there is little performance difference from each option.  Feel free to use one of these two approaches for your next web part.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-2403953046835443119?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/2403953046835443119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=2403953046835443119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2403953046835443119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2403953046835443119'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/mange-webpart-resources-linked-vs.html' title='Mange WebPart Resources (Linked vs Embedded)'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5597831366587796997</id><published>2010-03-12T06:41:00.000-08:00</published><updated>2010-03-12T06:41:48.410-08:00</updated><title type='text'>SharePoint Usage Report using Object Model</title><content type='html'>&lt;span style="font-family:verdana;font-size:x-small"&gt;&lt;SPAN CLASS="clsTitle"&gt;Introduction&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;It is a common requirement to gather information around the Windows SharePoint site usage. Organizations prefer to find out the popular sites in their organizations are or what external WSS sites attract the most number of visitors. This will provide information necessary for an organization to identify the important sites in their environment and properly manage them with extra resources if necessary. &lt;/p&gt;&lt;p&gt;One of the common complains around accessing theses data are the inflexibility of gathering information in a central location. The administrator will have to navigate to the selected SharePoint site administration pages to access the data. This will become a more time consuming exercise when the administrator need to collect usage data from larger number of SharePoint sites. &lt;/p&gt;&lt;p&gt;In this article, I am looking at creating an ASP.NET web application that will populate a collection of SharePoint sites in a drop down list for a given SharePoint site collection. The web application will display the usage details of the selected SharePoint site from the list. This will help the SharePoint administrator to gather all SharePoint usage data from a central location with out have to navigate many different SharePoint site locations. &lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;Usage Analysis Data Web Report&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;Figure 1 display a Usage Analysis data for a Windows SharePoint site. The users have the option of selecting a monthly or a daily report. &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_01.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 1:&lt;/strong&gt; Monthly Usage Analysis Report &lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;Usage Analysis Processing Reports&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;First of all let's have a look at what is Usage Analysis Reports in SharePoint. Theses reports will help the organizations to determine how the web sites are used in their environment. The data is taken from IIS Logs on the front end web servers and stored in to temporary files. The data is merged in to the content database on the back end SQL Servers when the daily log processing takes place. &lt;/p&gt;&lt;p&gt;The Usage Analysis is not enabled by default when the organization deploys the Windows SharePoint Services Sites. Organizations should enable the Usage Analysis logging process on the servers when they require gathering usage information. The logs files are created daily and a flag is attached to mark that it has been processed. &lt;/p&gt;&lt;p&gt;These logs files are not automatically deleted, they are preserved in &amp;quot;local_drive (C) :\Windows\system32\LogFiles\W3SVC*&amp;quot; where * indicates the Internet Information Server (IIS) instance number of the virtual server as displayed in Figure2. Organizations should consider the advantages against the disk space storage before enabling the Usage Analysis service in their environment. The organization can stop logging process' any time they require to do so. &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_02.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 2:&lt;/strong&gt; Preserved log files folder structure with W3SVC* format &lt;/p&gt;&lt;p&gt;By default the log files are located at &amp;quot;local_drive (C) :\Windows\system32\LogFiles\STS&amp;quot; directory. Separate folders are created under above directory for each virtual server and separate folders for each day as displayed in the Figure 3. &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_03.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 3:&lt;/strong&gt; Separate directories for each virtual server and for each day &lt;/p&gt;&lt;p&gt;Organizations can configure the above Log file store path for their own preferred path and create up to 30 log files.&lt;br /&gt;(Please look at Setting up Usage Analysis process for more details.) If an organization decides to store the log&lt;br /&gt;files in their preferred location, they should grant &lt;strong&gt;Read&lt;/strong&gt;, &lt;strong&gt;Write&lt;/strong&gt; and &lt;strong&gt;Update&lt;/strong&gt; rights permissions for STS_WPG user&lt;br /&gt;group for the specified folder. Without the permissions, the usage log files cannot be created or updated by IIS. &lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;Setting up Usage Analysis Processing&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;Administrators can control the setting of Usage Analysis process using the SharePoint Central Administration page. The user must be an administrator on the local server or a member of the SharePoint Administrators group to configure the analysis processing. If the organization adds a new virtual server after the analysis service been configured, they will need to reconfigure the analysis service to collect the data on the newly added virtual server. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Click &amp;quot;Start -&amp;gt; All Programs -&amp;gt; Administrative Tools -&amp;gt; SharePoint Central Administration&amp;quot;&lt;/li&gt;&lt;li&gt;This will open the &amp;quot;Windows SharePoint Services Central Administration&amp;quot; page&lt;/li&gt;&lt;li&gt;Select the &amp;quot;Configure usage analysis processing&amp;quot; from the &amp;quot;Component Configuration&amp;quot; section as displayed in figure 4&lt;br /&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_04.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 4:&lt;/strong&gt; Component Configuration section on the central administration page &lt;/li&gt;&lt;li&gt;The Configure Usage Analysis Processing page will open as displayed in Figure 5&lt;br /&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_05.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 5:&lt;/strong&gt; Configure Usage Analysis Processing page &lt;/li&gt;&lt;li&gt;Select &amp;quot;Enable logging&amp;quot; check box in &amp;quot;Logging Settings&amp;quot; section&lt;/li&gt;&lt;li&gt;The administrator can select a preferred file locations for the log files in &amp;quot;Log file location&amp;quot; box or use the default location &lt;code&gt;C:\WINDOWS\system32\logfiles\STS&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Enter the number of log files to create in the &amp;quot;Number of log files to create&amp;quot; box. This can be between 1 and 30.&lt;/li&gt;&lt;li&gt;Select &amp;quot;Enable usage analysis processing&amp;quot; check box in &amp;quot;Processing Settings&amp;quot; section.&lt;/li&gt;&lt;li&gt;Select the time range that analysis process should run from &amp;quot;Run processing between these times daily&amp;quot;. By default this is set to start at 1am daily. The administrator can allocate a time period that won't affect the demand on the site.&lt;/li&gt;&lt;li&gt;Click &amp;quot;OK&amp;quot; to finish the configuration.&lt;/li&gt;&lt;/ul&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;View Usage Analysis Reports&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;The user must be an administrator or have the View Usage Data right for a site to view the site usage reports. The reports are available through Site Administration page. &lt;/p&gt;&lt;p&gt;The usage data is collected and stored for the entire site collection on a server at a time. The users can see the total number of hits for a site collection on the Site Collection Usage Summary page and for more detailed information, Site Usage Report page for individual sites or sub sites usage information. &lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;View Site Usage Report&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;ul&gt;&lt;li&gt;Navigate to the site you prefer to view the report.&lt;/li&gt;&lt;li&gt;Click Site Settings on top tool bar.&lt;/li&gt;&lt;li&gt;Click Go to Site Administration link under Administration section as displayed in Figure 6&lt;br /&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_06.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 6:&lt;/strong&gt; Site Settings page &lt;/li&gt;&lt;li&gt;Click View site usage data link under Management and Statistic section in Top-Level Site Administration page as displayed in Figure 7&lt;br /&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_07.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 7:&lt;/strong&gt; Top-Level Site Administration page &lt;/li&gt;&lt;li&gt;The Site Usage Report page will open as displayed in Figure 8&lt;br /&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_08.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 8:&lt;/strong&gt; Site Usage Report page &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Site usage reports are useful for identifying which content on Windows SharePoint Services sites are being heavily used or used very little. This will help organizations to understand which sites are candidates for archiving and which sites should be kept online. In addition, this report contains information regarding how much storage space WSS sites are using. This page provides a report that contains following information: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Pages that have been accessed on that site, including document libraries&lt;/li&gt;&lt;li&gt;Users that have access the site&lt;/li&gt;&lt;li&gt;Operating system of the user accessing the site&lt;/li&gt;&lt;li&gt;Browser type&lt;/li&gt;&lt;li&gt;Referrer URL&lt;/li&gt;&lt;li&gt;Data can be displayed by monthly or daily summary format&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_09.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 9:&lt;/strong&gt; Different reports available &lt;/p&gt;&lt;p&gt;The users can select a report option and a daily or monthly option to generate a report.  Figure 9 displays a monthly report of all the pages accessed and different kind of reports options available. &lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;Code Example&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;The web page contains a text box to enter the SharePoint site collection URL. The appropriate sub site will be listed in a dropdown list when user clicks the Submit button. The user then have the option of viewing the daily or monthly usage report of a selected site. &lt;/p&gt;&lt;p&gt;First of all you will need to add the &lt;code&gt;Microsoft.SharePoint.dll&lt;/code&gt; to your web application reference list.&lt;br /&gt;This will give us the access to the SharePoint Object Model. &lt;/p&gt;&lt;p&gt;Then instantiate the &lt;strong&gt;SPSite&lt;/strong&gt; object as displayed below. The absolute URL is passed in through&lt;br /&gt;the &lt;code&gt;txtWSSSiteUrl&lt;/code&gt; text box. This will populate site collection for the given URL. &lt;/p&gt;&lt;p&gt;&lt;code&gt; //Get the site collection&lt;br /&gt; SPSite mySiteCollection = new SPSite(txtWSSSiteUrl.Text); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;Then to access an individual site, instantiate the SPWeb object as displayed below. I am passing in the site name as a parameter. &lt;/p&gt;&lt;p&gt;&lt;code&gt; //Get the details of the selected WSS site&lt;br /&gt; SPWeb site = mySiteCollection.AllWebs[siteName]; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;After constructing the site SPWeb object, developers can access the information of the site usage data using the public method &amp;quot;GetUsageData&amp;quot; of the SPWeb object as displayed in code example. &lt;/p&gt;&lt;p&gt;&lt;code&gt; GetUsageData(Microsoft.SharePoint.Administration.SPUsageReportType, Microsoft.SharePoint.Administration.SPUsagePeriodType) Method. &lt;/code&gt;&lt;/p&gt;&lt;p&gt;The GetUsageData method of the SPWeb class returns a data table that contains information about the usage of a Web site based on the specified type of report and time interval. &lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;SPUsageReportType Enumeration&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;The SPUsageReportType enumeration specifies the type of information returned in a usage report for a SharePoint site. &lt;/p&gt;&lt;p&gt;The following table shows the members of the SPUsageReportType enumeration and a brief description &lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="3"&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;browser&lt;/td&gt;&lt;td&gt;The type of Web browser used to visit the SharePoint site. All usage data refers specifically to visits from referring URLs external to the site.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;os&lt;/td&gt;&lt;td&gt;The operating system used on the client computer. All usage data refers specifically to visits from referring URLs external to the site.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;refUr&lt;/td&gt;&lt;td&gt;External URLs through which users navigated to the SharePoint site.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;url&lt;/td&gt;&lt;td&gt;URLs of pages that are visited or of pages for lists that are updated. Discussions about a page are counted as hits on that page.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;user&lt;/td&gt;&lt;td&gt;Users who visited the site.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;SPUsagePeriodType Enumeration&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;The SPUsagePeriodType enumeration specifies the time interval on which a usage report for a Web site is based. &lt;/p&gt;&lt;p&gt;The following table shows the members of the SPUsagePeriodType enumeration and a brief description &lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="3"&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;day&lt;/td&gt;&lt;td&gt;Returns usage information for each day during the past 31 days starting from the previous day&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;lastMonth&lt;/td&gt;&lt;td&gt;Summarizes usage information for the last 31 days relative to the previous day&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;I am binding the data table return from GetUsageData property to a DataGrid control to display the information. &lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing User daily report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //Users who visited the site&lt;br /&gt; DGUsers.DataSource = site.GetUsageData(SPUsageReportType.user, SPUsagePeriodType.day); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing User monthly report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //Users who visited the site&lt;br /&gt; DGUsers.DataSource = site.GetUsageData(SPUsageReportType.user, SPUsagePeriodType.lastMonth); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing Browser daily report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //The type of browsers used to visit the site&lt;br /&gt; DGBrowser.DataSource = site.GetUsageData(SPUsageReportType.browser, SPUsagePeriodType.day); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing Browser monthly report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //The type of browsers used to visit the site&lt;br /&gt; DGBrowser.DataSource = site.GetUsageData(SPUsageReportType.browser, SPUsagePeriodType.lastMonth); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing Operating System daily report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //The Operating System used in client computer&lt;br /&gt; DGOs.DataSource = site.GetUsageData(SPUsageReportType.os, SPUsagePeriodType.day); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing Operating System monthly report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //The Operating System used in client computer&lt;br /&gt; DGOs.DataSource = site.GetUsageData(SPUsageReportType.os, SPUsagePeriodType.lastMonth); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing refUrl daily report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //External URL client used to navigate to SharePoint site&lt;br /&gt; DGRefUrl.DataSource = site.GetUsageData(SPUsageReportType.refUrl, SPUsagePeriodType.day); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing refUrl monthly report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //External URL client used to navigate to SharePoint site&lt;br /&gt; DGRefUrl.DataSource = site.GetUsageData(SPUsageReportType.refUrl, SPUsagePeriodType.lastMonth); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing url daily report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //URL's of pages visited&lt;br /&gt; DGUrls.DataSource = site.GetUsageData(SPUsageReportType.url, SPUsagePeriodType.day); &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt; Accessing url monthly report &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; //URL's of pages visited&lt;br /&gt; DGUrls.DataSource = site.GetUsageData(SPUsageReportType.url, SPUsagePeriodType.lastMonth); &lt;/code&gt;&lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;Deploying the Web Application to the SharePoint Portal Server&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;ul&gt;&lt;li&gt;Create the &amp;quot;UsageAnalysisData&amp;quot; Virtual directory under the portal web site in IIS&lt;/li&gt;&lt;li&gt;Map the virtual directory to the physical file path (this should be done as apart of above step)&lt;/li&gt;&lt;li&gt;Open the SharePoint Central Administration pages by clicking &amp;quot;Start &amp;gt; Administration tools &amp;gt; SharePoint Central Administration&amp;quot;&lt;/li&gt;&lt;li&gt;Click &amp;quot;Windows SharePoint Services&amp;quot; link on the left hand side&lt;/li&gt;&lt;li&gt;Select &amp;quot;Configure Virtual server setting&amp;quot; link from &amp;quot;Virtual Server Configuration&amp;quot; group&lt;/li&gt;&lt;li&gt;Select your Portal server from the list&lt;/li&gt;&lt;li&gt;Click &amp;quot;Defined managed path&amp;quot; link under Virtual Server Management group in  Virtual Server setting page&lt;/li&gt;&lt;li&gt;Type name of the virtual directory you created in first step in the Path section of Add new Path section&lt;/li&gt;&lt;li&gt;Select &amp;quot;Exclude path&amp;quot; radio button under the type section&lt;/li&gt;&lt;li&gt;Click &amp;quot;Ok&amp;quot;&lt;/li&gt;&lt;li&gt;Then navigate to &lt;code&gt;http://&lt;em&gt;portal_site_name&lt;/em&gt;/UsageAnalysisData/MonitoringPage.aspx&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_10.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 10:&lt;/strong&gt; A list of sub sites of the site collection &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.15seconds.com/Graphics/issue/050623_11.gif"&gt;&lt;br /&gt;&lt;strong&gt;Figure 11:&lt;/strong&gt; Daily Usage Analysis Report of a Windows SharePoint Site &lt;/p&gt;&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsTitle"&gt;Conclusion&lt;/SPAN&gt;&lt;P&gt;&lt;SPAN CLASS="clsBlurb"&gt;&lt;p&gt;SharePoint Administrators should be able to use this article as a starting point and develop their SharePoint Usage Analysis data gatherer web application according to their requirements. &lt;/p&gt;&lt;/SPAN&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5597831366587796997?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5597831366587796997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5597831366587796997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5597831366587796997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5597831366587796997'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/sharepoint-usage-report-using-object.html' title='SharePoint Usage Report using Object Model'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3178792751650645059</id><published>2010-03-11T15:17:00.003-08:00</published><updated>2010-03-11T15:17:19.616-08:00</updated><title type='text'>Print ListData SharePoint</title><content type='html'>&lt;span style="font-family:verdana;font-size:x-small"&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;h2&gt;Solution Architecture&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The solution will be deployed as a wss feature, which allows us an easy way to add a menu item to the sharepoint menus. The feature will define that the item we want to add will be added to the &lt;strong&gt;actions menu&lt;/strong&gt; of &lt;strong&gt;all lists&lt;/strong&gt;, in a &lt;strong&gt;site collection&lt;/strong&gt;. You can ofcourse change it so that it behaves differently and connects only to lists of a certain type if you so wish, or maybe move the menu item to a different place. I recommend reviewing the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms460194.aspx" target="_blank"&gt;msdn article on the possible configurations&lt;/a&gt;.&lt;br /&gt;The solution is based on 3 files:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;feature.xml&lt;/b&gt;&lt;br /&gt;Defines the feature, its scope and its title that you will see in the "site features" (or site collection features or farm features - depending on the scope)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;b&gt;PrintList.xml&lt;/b&gt;&lt;br /&gt;Defines what action we want to add to what menu and what will happen when the user clicks the menu item. This is where you configure the text of the item, and the link to the page that will print the list. which just happens to be the last file:&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;b&gt;PrintList.aspx&lt;/b&gt;&lt;br /&gt;Contains the code that shows the list in a print-friendly view. This file should be deployed to the layouts folder and must be called with the site's context (more about that shortly).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;h2&gt;To the Code!&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;note - when I talk about the "12 hive" I am referring to the folder C:\Program Files\Common Files\Microsoft Shared\web server extensions\12&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create the page that prints a list:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Log on to the server, and open the template\layouts folder in the &lt;em&gt;12 hive&lt;/em&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create a new text file in the folder, and name it "PrintList.aspx"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open the empty file in your editor of choice (notepad is fine) and paste the following code into it:&lt;br /&gt;&lt;div style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; OVERFLOW: auto; BORDER-LEFT: silver 1px solid; BORDER-BOTTOM: silver 1px solid; HEIGHT: 400px"&gt;&lt;br /&gt;&lt;!-- {\rtf1\ansi\ansicpg\lang1024\noproof1255\uc1 \deff0{\fonttbl{\f0\fnil\fcharset177\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cb7\highlight7 &lt;%\cf2\cb0\highlight0 @\cf0  \cf13 Page\cf0  \cf6 Language\cf2 ="C#"\cf0  \cf6 Inherits\cf2 ="System.Web.UI.Page"\cf0  \cb7\highlight7 %&gt;\par ??\par ??&lt;%\cf2\cb0\highlight0 @\cf0  \cf13 Register\cf0  \cf6 TagPrefix\cf2 ="SharePoint"\cf0  \cf6 Namespace\cf2 ="Microsoft.SharePoint.WebControls"\par ??\cf0     \cf6 Assembly\cf2 ="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"\cf0  \cb7\highlight7 %&gt;\par ??&lt;%\cf2\cb0\highlight0 @\cf0  \cf13 Import\cf0  \cf6 Namespace\cf2 ="Microsoft.SharePoint"\cf0  \cb7\highlight7 %&gt;\par ??\cf2\cb0\highlight0 &lt;\cf13 html\cf2 &gt;\par ??&lt;\cf13 head\cf2 &gt;\par ??\cf0     \cf2 &lt;\cf13 title\cf2 &gt;\cf0 SharePoint List Print\cf2 &lt;/\cf13 title\cf2 &gt;\par ??\cf0     \cf2 &lt;\cf13 link\cf0  \cf6 rel\cf2 ="stylesheet"\cf0  \cf6 type\cf2 ="text/css"\cf0  \cf6 href\cf2 ="/_layouts/1033/styles/core.css"\cf0  \cf2 /&gt;\par ??\par ??\cf0     \cf2 &lt;\cf13 script\cf0  \cf6 type\cf2 ="text/javascript"\cf0  \cf6 language\cf2 ="javascript"\cf0  \cf6 src\cf2 ="/_layouts/1033/init.js"&gt;&lt;/\cf13 script\cf2 &gt;\par ??\par ??\cf0     \cf2 &lt;\cf13 script\cf0  \cf6 type\cf2 ="text/javascript"\cf0  \cf6 language\cf2 ="javascript"\cf0  \cf6 src\cf2 ="/_layouts/1033/core.js"\par ??\cf0         \cf6 defer\cf2 &gt;&lt;/\cf13 script\cf2 &gt;\par ??\par ??\cf0     \cf2 &lt;\cf13 script\cf0  \cf6 type\cf2 ="text/javascript"\cf0  \cf6 language\cf2 ="javascript"\cf0  \cf6 src\cf2 ="/_layouts/1033/ie55up.js"&gt;&lt;/\cf13 script\cf2 &gt;\par ??\par ??\cf0     \cf2 &lt;\cf13 script\cf0  \cf6 type\cf2 ="text/javascript"\cf0  \cf6 language\cf2 ="javascript"\cf0  \cf6 src\cf2 ="/_layouts/1033/search.js"\par ??\cf0         \cf6 defer\cf2 &gt;&lt;/\cf13 script\cf2 &gt;\par ??\par ??&lt;/\cf13 head\cf2 &gt;\par ??&lt;\cf13 body\cf2 &gt;\par ??\cf0     \cb7\highlight7 &lt;%\par ??\cb0\highlight0     \par ??    \par ??        string listId = "";\par ??        string referrer = "";\par ??        //get the list id (guid in a string format) from the query string\par ??        listId = Page.Request.QueryString["list"];\par ??        //get the http referrer (for the back button\\action)\par ??        referrer = Page.Request.ServerVariables["http_referer"];\par ??        //make sure the list parameter was passed\par ??        if (listId == null)\par ??        \{\par ??            //if a referrer url exists (since the page may have been opened from a direct link, this is not always the case) redirect the user back\par ??            if (referrer != null &amp;amp;&amp; referrer.Trim().Length != 0)\par ??            \{\par ??                Page.Response.Write("&lt;p&gt;The list ID parameter ('list') is missing from the address.&lt;br /&gt;Please go to the list you want to print and try again.&lt;/p&gt;");\par ??                Page.Response.Write("&lt;p&gt;&lt;a href="\\" title="\\"&gt;Click here to go back to the page you came from&lt;/p&gt;");\par ??            \}\par ??            else\par ??            \{\par ??                Page.Response.Write("&lt;p&gt;The list ID parameter ('list') is missing from the address.&lt;br /&gt;Please go to the list you want to print and try again.&lt;/p&gt;");\par ??\par ??            \}\par ??        \}\par ??        else\par ??        \{\par ??            try\par ??            \{\par ??                //load the web object for the site that the page is now in context of\par ??                using (SPWeb web = SPControl.GetContextWeb(Context))\par ??                \{\par ??                    //load the list that was passed in the 'list' querystring parameter to the page\par ??                    SPList list = web.Lists[new Guid(listId)];\par ??                    //load the query of the default view. note - need to modify code in the future to enable multiple view printing\par ??                    SPQuery query = new SPQuery(list.DefaultView);\par ??                    //write the list to the page\par ??                    Page.Response.Write(list.RenderAsHtml(query));\par ??                    //add the print script\par ??    \cb7\highlight7 %&gt;\par ??\par ??\cb0\highlight0     \cf2 &lt;\cf13 script\cf0  \cf6 type\cf2 ="text/javascript"\cf0  \cf6 language\cf2 ="javascript"&gt;\par ??\cf0                 window.print();\par ??    \cf2 &lt;/\cf13 script\cf2 &gt;\par ??\par ??\cf0     \cb7\highlight7 &lt;%\par ??\cb0\highlight0                     \par ??                    \par ??        \}\par ??\par ??    \}\par ??    catch (Exception ex)\par ??    \{\par ??        Page.Response.Write("&lt;p&gt;There was an error loading the list information:&lt;br /&gt;");\par ??\par ??        Page.Response.Write(ex.ToString());\par ??        Page.Response.Write("&lt;/p&gt;");\par ??    \}\par ??\}\par ??        \par ??   \par ??\par ??    \cb7\highlight7 %&gt;\par ??\cf2\cb0\highlight0 &lt;/\cf13 body\cf2 &gt;\par ??&lt;/\cf13 html\cf2 &gt;\par ??} --&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="BACKGROUND: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;@&lt;/span&gt; &lt;span style="color:maroon;"&gt;Page&lt;/span&gt; &lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;="C#"&lt;/span&gt; &lt;span style="color:red;"&gt;Inherits&lt;/span&gt;&lt;span style="color:blue;"&gt;="System.Web.UI.Page"&lt;/span&gt; &lt;span style="BACKGROUND: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="BACKGROUND: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;@&lt;/span&gt; &lt;span style="color:maroon;"&gt;Register&lt;/span&gt; &lt;span style="color:red;"&gt;TagPrefix&lt;/span&gt;&lt;span style="color:blue;"&gt;="SharePoint"&lt;/span&gt; &lt;span style="color:red;"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;="Microsoft.SharePoint.WebControls"&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"&lt;/span&gt; &lt;span style="BACKGROUND: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="BACKGROUND: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;@&lt;/span&gt; &lt;span style="color:maroon;"&gt;Import&lt;/span&gt; &lt;span style="color:red;"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;="Microsoft.SharePoint"&lt;/span&gt; &lt;span style="BACKGROUND: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;html&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;SharePoint List Print&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;link&lt;/span&gt; &lt;span style="color:red;"&gt;rel&lt;/span&gt;&lt;span style="color:blue;"&gt;="stylesheet"&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/css"&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;="/_layouts/1033/styles/core.css"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;="javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;="/_layouts/1033/init.js"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;="javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;="/_layouts/1033/core.js"&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:red;"&gt;defer&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;="javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;="/_layouts/1033/ie55up.js"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;="javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;="/_layouts/1033/search.js"&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:red;"&gt;defer&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="BACKGROUND: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;string listId = "";&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;string referrer = "";&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//get the list id (guid in a string format) from the query string&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;listId = Page.Request.QueryString["list"];&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//get the http referrer (for the back button\action)&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;referrer = Page.Request.ServerVariables["http_referer"];&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//make sure the list parameter was passed&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;if (listId == null)&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//if a referrer url exists (since the page may have been opened from a direct link, this is not always the case) redirect the user back&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;if (referrer != null &amp;amp;&amp; referrer.Trim().Length != 0)&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;Page.Response.Write("&amp;lt;p&amp;gt;The list ID parameter ('list') is missing from the address.&amp;lt;br&amp;gt;Please go to the list you want to print and try again.&amp;lt;/p&amp;gt;");&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;Page.Response.Write("&amp;lt;p&amp;gt;&amp;lt;a href=\"" + referrer + "\" title=\"Go Back\"&amp;gt;Click here to go back to the page you came from&amp;lt;/p&amp;gt;");&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;else&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;Page.Response.Write("&amp;lt;p&amp;gt;The list ID parameter ('list') is missing from the address.&amp;lt;br&amp;gt;Please go to the list you want to print and try again.&amp;lt;/p&amp;gt;");&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;else&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;try&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//load the web object for the site that the page is now in context of&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;using (SPWeb web = SPControl.GetContextWeb(Context))&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//load the list that was passed in the 'list' querystring parameter to the page&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;SPList list = web.Lists[new Guid(listId)];&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//load the query of the default view. note - need to modify code in the future to enable multiple view printing&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;SPQuery query = new SPQuery(list.DefaultView);&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//write the list to the page&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;Page.Response.Write(list.RenderAsHtml(query));&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;//add the print script&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="BACKGROUND: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color:red;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;="javascript"&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;window.print();&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="BACKGROUND: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;catch (Exception ex)&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;Page.Response.Write("&amp;lt;p&amp;gt;There was an error loading the list information:&amp;lt;br /&amp;gt;");&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;Page.Response.Write(ex.ToString());&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;Page.Response.Write("&amp;lt;/p&amp;gt;");&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="BACKGROUND: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;html&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Install the feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Open the \TEMPLATE\FEATURES folder under the &lt;em&gt;12 hive&lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create a folder called PrintListMenuAction&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In that folder, create 2 text files, one called feature.xml and the second printlist.xml&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ZLr3wvXiUTE/RaBsbnAgB-I/AAAAAAAAANM/g5OajZK60xI/s1600-h/featurefolder.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5017129206474082274" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_ZLr3wvXiUTE/RaBsbnAgB-I/AAAAAAAAANM/g5OajZK60xI/s400/featurefolder.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;In your editor of choice (notepad is fine) open the feature.xml file and paste into it the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; OVERFLOW: auto; BORDER-LEFT: silver 1px solid; BORDER-BOTTOM: silver 1px solid; HEIGHT: 250px"&gt;&lt;br /&gt;&lt;!-- {\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset177\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 &lt;?\cf13 xml\cf2  \cf6 version\cf2 =\cf0 "\cf2 1.0\cf0 "\cf2  \cf6 encoding\cf2 =\cf0 "\cf2 utf-8\cf0 "\cf2  ?&gt;\par ??&lt;\cf13 Feature\cf2  \cf6 Id\cf2 =\cf0 "\cf2 769826dd-9dd2-11db-96ca-005056c00008\cf0 "\cf2  \par ??    \cf6 Title\cf2 =\cf0 "\cf2 Print List\cf0 "\par ??\cf2     \cf6 Description\cf2 =\cf0 "\cf2 This feature adds a print command in the Actions menu for Windows SharePoint Services lists.\cf0 "\par ??\cf2     \cf6 Version\cf2 =\cf0 "\cf2 1.0.0.0\cf0 "\par ??\cf2     \cf6 Scope\cf2 =\cf0 "\cf2 Site\cf0 "\par ??\cf2     \cf6 xmlns\cf2 =\cf0 "\cf2 http://schemas.microsoft.com/sharepoint/\cf0 "\cf2 &gt;\par ??  &lt;\cf13 ElementManifests\cf2 &gt;\par ??    &lt;\cf13 ElementManifest\cf2  \cf6 Location\cf2 =\cf0 "\cf2 PrintList.xml\cf0 "\cf2  /&gt;\par ??  &lt;/\cf13 ElementManifests\cf2 &gt;\par ??&lt;/\cf13 Feature\cf2 &gt;} --&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:maroon;"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;"&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;Feature&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;769826dd-9dd2-11db-96ca-005056c00008&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&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;"&lt;span style="color:blue;"&gt;Print List&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;This feature adds a print command in the Actions menu for Windows SharePoint Services lists.&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;Version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0.0.0&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;Scope&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Site&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ElementManifests&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ElementManifest&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Location&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;PrintList.xml&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ElementManifests&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;Feature&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;In your editor of choice open the printlist.xml and paste the following:&lt;br /&gt;&lt;div style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; OVERFLOW: auto; BORDER-LEFT: silver 1px solid; BORDER-BOTTOM: silver 1px solid; HEIGHT: 250px"&gt;&lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset177\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 &amp;lt;?\cf13 xml\cf2  \cf6 version\cf2 =\cf0 "\cf2 1.0\cf0 "\cf2  \cf6 encoding\cf2 =\cf0 "\cf2 utf-8\cf0 "\cf2  ?&amp;gt;\par ??&amp;lt;\cf13 Elements\cf2  \cf6 xmlns\cf2 =\cf0 "\cf2 http://schemas.microsoft.com/sharepoint/\cf0 "\cf2 &amp;gt;\par ??\par ??  &amp;lt;!--\cf11  Add the action to the List Toolbar Actions Menu Dropdown \cf2 --&amp;gt;\par ??  &amp;lt;\cf13 CustomAction\cf2  \cf6 Id\cf2 =\cf0 "\cf2 SPSTIPS.PrintListActionsToolbar\cf0 "\par ??\cf2     \cf6 RegistrationType\cf2 =\cf0 "\cf2 List\cf0 "\cf2     \par ??    \cf6 GroupId\cf2 =\cf0 "\cf2 ActionsMenu\cf0 "\par ??\cf2     \cf6 Location\cf2 =\cf0 "\cf2 Microsoft.SharePoint.StandardMenu\cf0 "\par ??\cf2     \cf6 Sequence\cf2 =\cf0 "\cf2 1000\cf0 "\par ??\cf2     \cf6 Title\cf2 =\cf0 "\cf2 Print List\cf0 "\cf2 &amp;gt;\par ??    &amp;lt;\cf13 UrlAction\cf2  \cf6 Url\cf2 =\cf0 "\cf2 \{SiteUrl\}/_layouts/PrintList.aspx?list=\{ListId\}\cf0 "\cf2 /&amp;gt;\par ??  &amp;lt;/\cf13 CustomAction\cf2 &amp;gt;\par ?? \par ??&amp;lt;/\cf13 Elements\cf2 &amp;gt;}&lt;br /&gt;--&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon;"&gt;xml&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;utf-8&lt;/span&gt;"&lt;span style="color: blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Elements&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Add the action to the List Toolbar Actions Menu Dropdown &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomAction&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;SPSTIPS.PrintListActionsToolbar&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;RegistrationType&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;List&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;GroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;ActionsMenu&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Location&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Microsoft.SharePoint.StandardMenu&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1000&lt;/span&gt;"&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Print List&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;UrlAction&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Url&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;{SiteUrl}/_layouts/PrintList.aspx?list={ListId}&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomAction&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Elements&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;h2&gt;Almost done - install the feature and test it!&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To install the feature, open command line (start&gt;run&gt;cmd) and navigate to the bin folder in the 12 hive.&lt;br /&gt;&lt;br /&gt;Once there, run the following command to install the feature:&lt;br /&gt;&lt;br /&gt;&lt;div style="COLOR: white; BACKGROUND-COLOR: black"&gt;stsadm -o installfeature -name PrintListMenuAction -force&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;After you ran that command successfuly, you can activate the feature in the site collection either using the user interface (site actions&gt; site settings&gt; site collection features):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_ZLr3wvXiUTE/RaBvvHAgCAI/AAAAAAAAANc/8jn6lwjzX7E/s1600-h/activation_gui.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5017132840016414722" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_ZLr3wvXiUTE/RaBvvHAgCAI/AAAAAAAAANc/8jn6lwjzX7E/s400/activation_gui.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;or you can (more easily since you are already in the command line) just run the following command, entering the site path:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="COLOR: white; BACKGROUND-COLOR: black"&gt;&lt;br /&gt;stsadm -o activatefeature -name PrintListMenuAction -url [your site url here] -force&lt;/div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZLr3wvXiUTE/RaBuZXAgB_I/AAAAAAAAANU/aiYE2pYHZF8/s1600-h/installfeatureandactivate.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5017131366842632178" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_ZLr3wvXiUTE/RaBuZXAgB_I/AAAAAAAAANU/aiYE2pYHZF8/s400/installfeatureandactivate.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;That's it! if you now go to any list in that site, you should have the print menu action.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3178792751650645059?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3178792751650645059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3178792751650645059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3178792751650645059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3178792751650645059'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/print-listdata-sharepoint.html' title='Print ListData SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZLr3wvXiUTE/RaBsbnAgB-I/AAAAAAAAANM/g5OajZK60xI/s72-c/featurefolder.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-7078976736139458851</id><published>2010-03-11T14:59:00.000-08:00</published><updated>2010-03-11T14:59:03.025-08:00</updated><title type='text'>Convert Word to PDF</title><content type='html'>I would highly recoomend ASPOSE.WORDS product to convert word documents into PDF in SharePoint.It is not a free product but is good for the functionality.&lt;br /&gt;&lt;br /&gt;http://www.aspose.com/categories/product-family-packs/aspose.words-product-family/default.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-7078976736139458851?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/7078976736139458851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=7078976736139458851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7078976736139458851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7078976736139458851'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/convert-word-to-pdf.html' title='Convert Word to PDF'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-1920676568938821277</id><published>2010-03-11T14:39:00.001-08:00</published><updated>2010-03-11T14:39:42.842-08:00</updated><title type='text'>Branding Notes for SharePoint</title><content type='html'>&lt;div style="font-family:verdana;font-size:x-small"&gt;&lt;p&gt;I thought I would run through some of the tools that have helped me when branding a MOSS intranet. SharePoint Designer or perhaps better yet Studio can be the primary tool for creating master pages, themes, and page layouts, but your gonna need some help when trying to dig through all the CSS in the core.css file, and all it&amp;#8217;s crazy inheritance. Combing through the css is a big chunk of your effort when you are starting with the default master or the default or classic theme. Most corporate organizations that I have worked with take the approach of &amp;#8220;skinning&amp;#8221; the SharePoint default look to match there colors and branding as opposed to starting from the ground up. So odds are your starting with the default look : -(&lt;/p&gt;&lt;br /&gt;&lt;p&gt;A couple of prerequisite tips before I get to the tools&amp;#8230;..&lt;/p&gt;&lt;p&gt;When creating or modify styles - always, always, always put them in a new stylesheet. If you just update core.css, you will have a lot of pain in your life when your discover some goofy UI thing happening on a page, and you have to comb through the 4,000+ lines of styles in core.&lt;/p&gt;&lt;p&gt;Be cautious of overwriting or adding images directly in the _layouts/Images directory (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\IMAGES) . If the box has to have MOSS reinstalled or perhaps some obscure patch occurs - you can kiss those image updates goodbye. However, I know that sometimes this is unavoidable&amp;#8230;.or at least a huge time saver. If your implementing a larger project, then put the images you added or modified in source control, and have a build script that will push the images. This way all the customization can be automatically pushed. OR if is a small implementation, at least document the image changes :- )&lt;/p&gt;&lt;p&gt;So&amp;#8230;..oh yeah&amp;#8230;&amp;#8230;The Tools:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;amp;displaylang=en" target="_blank"&gt;IE Developer Toolbar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Certainly the biggest challenge in modifying the UI of MOSS is trying to figure out which style does what&amp;#8230;and where is does it. And a good way to discover what MOSS is doing with it&amp;#8217;s ginormous style sheet is to look at the rendered pages in the site. The IE Developer toolbar will provide 2 great features that will aid in this discovery process. 1. From the menu select &amp;#8216;Find&amp;#8217; and &amp;#8216;Select Element by Click&amp;#8217; which will allow you to click on any element in the page, and see the class used as well as all of the style attributes. So even if you see the class you modified, but say it is still show a incorrect style value (like color, padding, or whatever) then you know your style is being overwritten somewhere else. 2. As you select an element is also gives you a window with the html of the page that is much easier to comb though than viewing source in Notepad - That way you can crawl up and down the html tags to see what styles are being applied at the div, td, tr, table, etc. and&amp;#8230;&amp;#8230;OK #3 - you can also disable scripts with a click so you can see styles without the hover state kicking in (i.e. - Menus)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms438349.aspx" target="_blank"&gt;CSS Finder Code (courtesy of msdn)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Similar to the IE Developer toolbar, you can throw this snippet into a content editor web part, which will allow you to roll over elements on the page and have the css style show up in a div tag on the screen. It is handy and quick, but will not give you as much information as the IE Developer toolbar. I would click on the link above because this page has a css reference chart that is fairly useful - also see Heather Solomon&amp;#8217;s &lt;a href="http://www.heathersolomon.com/content/sp07cssreference.htm" target="_blank"&gt;CSS Reference&lt;/a&gt; to get and idea for some of the major styles.&lt;/p&gt;&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&amp;lt;script language=&lt;span class="str"&gt;"jscript"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; ClassInfo()&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (window.&lt;span class="kwrd"&gt;event&lt;/span&gt;.srcElement.className != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        stsclass.innerText = window.&lt;span class="kwrd"&gt;event&lt;/span&gt;.srcElement.className;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;        stsclass.innerText = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;window.document.body.onmouseover = ClassInfo;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div style=&lt;span class="str"&gt;"border-style:solid;border-width:1px; width: 281px; height: 34px;&lt;br /&gt;position: absolute; left: 286px; top: 41px; z-index:15; padding-left:4px;&lt;br /&gt;padding-right:4px; padding-top:2px; padding-bottom:2px; background-color:#EEEEF4"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;p id=&lt;span class="str"&gt;"stsclasstitle"&lt;/span&gt;&amp;gt;&amp;lt;font face=&lt;span class="str"&gt;"Tahoma"&lt;/span&gt; id=&lt;span class="str"&gt;"stsclasstitle"&lt;/span&gt;&amp;gt;Classname: &amp;lt;/font&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;font face=&lt;span class="str"&gt;"Tahoma"&lt;/span&gt;id=&lt;span class="str"&gt;"stsclass"&lt;/span&gt;&amp;gt;&amp;amp;#xa0;&amp;lt;/font&amp;gt;&lt;br /&gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;!--.csharpcode, .csharpcode pre {  font-size: small;  color: black;  font-family: consolas, "Courier New", courier, monospace;  background-color: #ffffff;  /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  {  background-color: #f4f4f4;  width: 100%;  margin: 0em; } .csharpcode .lnum { color: #606060; } --&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.download.com/Just-Color-Picker/3000-2189_4-10721157.html?tag=lst-3" target="_blank"&gt;Just Color Picker&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Again another tool for style discovery (are you getting that this is a pain) I will use this little piece of freeware to quickly identify the hex color of an element on a page. Sometimes when you swear up and down that you have changed a color but it just wont show, I will get the hex off the screen, and start start seeing where that color shows up in the various style sheets.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.elumenotion.com/Blog/Lists/Posts/Post.aspx?ID=4" target="_blank"&gt;SharePoint Skinner&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is a handy tool when you need to create a down and dirty theme - quickly. I&amp;#8217;ll admit I have not played with this too much, but it will allow you so change colors and images with a few clicks, and export out a theme. This may also help you get an understanding of what css classes effect what styles, but I find the developer toolbar more efficient for that task.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Features and Deployment&lt;/p&gt;&lt;p&gt;&lt;/strong&gt;The easiest way to deploy your look and feel to SharePoint is to utilize the Solution Framework MOSS provides. Especially in a farm environment where files need to be pushed to multiple servers. Features are also what I would recommend when including look and feel into site definitions. Many people have posted adding master pages to a Module Element in the ONET file of a site definition, but that will deploy a copy of the master page file to every site provisioned based on your definition. To me, this defeats the point of a template as it can not be globally changed now that you have copies stored in every web. You can create features that utilize receiver classes to programmatically apply a master page or theme when a feature is activated. You can also auto-activate these types of features in a custom site definition. Some good examples of how this is done are here:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://grahamsibley.typepad.com/thoughtfactory/sharepoint/index.html" target="_blank"&gt;Graham Sibley&lt;/a&gt; shows how to write a feature that deploys a theme to a site&lt;/p&gt;&lt;p&gt;&lt;a href="http://mindsharpblogs.com/PaulS/archive/2007/06/18/1903.aspx" target="_blank"&gt;Paul Papanek&lt;/a&gt; Stork shows how to write a feature that apply&amp;#8217;s a master page to a site. This feature will apply a mater page from the /_catalogs directory at the root of the site collection.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Now that you are writing all these crazy features you may want a way to take some of the legwork out of the process. My friend Rich Finn has created a &lt;a href="http://www.codeplex.com/wspprojecttemplate" target="_blank"&gt;WSP Project Template for Visual Studio&lt;/a&gt; that will create the wsp along with the manifest.xml, and .ddf files for you. It also has deployment and upgrade scripts built in to deploy your look and feel to the portal. There is another one on CodePlex called &lt;a href="http://www.codeplex.com/WSSFeaturePackager" target="_blank"&gt;SharePoint Feature Packager&lt;/a&gt; that will also do the trick, but Rich&amp;#8217;s template has less manual steps to get rolling.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;These tools definitely make life easier, but before implementing a portal look and feel, be sure to take all the proper planning steps to ensure that what you are implementing will best suit the long term needs of the business. SharePoint has made a lot of headway in how things can be packaged, deployed, and templated, but there are still a lot of gotchas - you don&amp;#8217;t want to deploy a look and feel to a ton of pages and later find out something drastic has to change. You may find yourself rebuilding pages manually or basically undergoing a site migration. Each organization needs to consider things like:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Site Definitions vs. Site Templates&lt;/p&gt;&lt;p&gt;Themes vs. Masterpages - one or the other or both&lt;/p&gt;&lt;p&gt;Features and scope of those features&lt;/p&gt;&lt;p&gt;What meta data will be applied in our templates&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Carefully document the pros and cons of each of these decisions so that the business can understand the potential impacts of the decisions being made during the design phase of a project.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-1920676568938821277?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/1920676568938821277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=1920676568938821277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/1920676568938821277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/1920676568938821277'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/branding-notes-for-sharepoint.html' title='Branding Notes for SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-1338926734017153208</id><published>2010-03-10T19:03:00.000-08:00</published><updated>2010-03-10T19:03:18.847-08:00</updated><title type='text'>WSS 3.0 vs MOSS Standard vs MOSS Enterprise</title><content type='html'>&lt;span style="font-size:x-small;font-family:Verdana;"&gt;&lt;br /&gt;&lt;p &gt;There&amp;#39;s still plenty of confusion out there about SharePoint, particularly around what is included in WSS versus MOSS. Part of the problem is that there is &lt;em&gt;soooo&lt;/em&gt; much information about SharePoint that the simple details get lost&amp;#8230;&lt;/p&gt;&lt;p&gt;So, let&amp;#39;s go through the various options, comparing &lt;strong&gt;WSS&lt;/strong&gt; with &lt;strong&gt;MOSS Standard&lt;/strong&gt; and &lt;strong&gt;MOSS Enterprise&lt;/strong&gt; as simply as possible. I&amp;#39;ll exclude technicalities (eg that you need R2 of W2K3 etc) and just focus on the main points.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows SharePoint Services (WSS)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Currently in version 3.0, WSS is a &lt;strong&gt;free&lt;/strong&gt; add-on to Windows 2003 Server. WSS is the foundation of SharePoint. It provides a stack of features (or services), including document management &amp;amp; collaboration, Wikis, Blogs, RSS feeds, strong Office integration (Word, Excel, Outlook, Access, PowerPoint) including alerts and synchronisation, basic workflow and some search capabilities. It has the foundational elements such as security and storage services.&lt;/p&gt;&lt;p&gt;Many intranet requirements are completely catered for with WSS. And WSS can be used quite effectively as a web site too.&lt;/p&gt;&lt;p&gt;[I&amp;#39;ve seen discussions about storage limits within WSS being set at 4GB*, but my current understanding is that this is not the case - ie there is no set limit.]&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Microsoft Office SharePoint Services (MOSS) Standard&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;MOSS** sits on top of WSS and comes in two main versions: Standard and Enterprise.&lt;/p&gt;&lt;p&gt;MOSS &lt;strong&gt;Standard&lt;/strong&gt; has stacks of features of course (including Enterprise Content Management, Portals and comprehensive Workflow), but the main ones to consider are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Enterprise Search (which allows you to crawl a number of data sources)&lt;/li&gt;&lt;li&gt;People management (which includes all the My Site stuff, Personalisation features, Single Sign On and more)&lt;/li&gt;&lt;li&gt;Analytics (which includes all the usage and auditing functions for example: you can audit who is searching for what)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Point to note: Enterprise Search IS included in the Standard version.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Microsoft Office SharePoint Services (MOSS) Enterprise&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Moving on to &lt;strong&gt;MOSS Enterprise&lt;/strong&gt;, we get everything in Standard, plus a few more features added, the most important of which are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Business Data Catalog or BDC (which is a means of linking SharePoint to basically anything including SQL Servers, Oracle Servers, Microsoft CRM, SAP and more, and providing the BI functions including dashboards and KPIs)&lt;/li&gt;&lt;li&gt;Excel 2007 Services (which allow Excel spreadsheets to be &amp;#39;hosted&amp;#39; and rendered, and even accessed as web services)&lt;/li&gt;&lt;li&gt;Forms server (see below)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Point to note: People sometimes confuse BDC with Enterprise Search. To clarify: BDC can be considered an extra source of data feeds into Enterprise Search.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Other versions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There also used to be various flavours of &lt;strong&gt;MOSS for Search&lt;/strong&gt;, and these can best be summed up as WSS plus Enterprise Search (ie they lack some of the other MOSS features such as ECM etc). They have recently been re-branded as &lt;ahref="http://office.microsoft.com/en-us/sharepointsearch/FX101729721033.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://office.microsoft.com/en-us/sharepointsearch/FX101729721033.aspx');" target="_blank"&gt;Microsoft Search Server 2008&lt;/a&gt; and come in a free &amp;#39;Express&amp;#39; version and the Standard version.&lt;/p&gt;&lt;p&gt;Aside: There is another SharePoint pseudo-version known as the &lt;strong&gt;Office Forms Server 2007&lt;/strong&gt; which basically allows InfoPath forms to be rendered in the browser. It can be added to just WSS if required, and is included by default in the MOSS Enterprise version.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Microsoft hasn&amp;#39;t gone out of its way to make all this clear I have to admit &amp;#8211; the hype around SharePoint is usually focused on the MOSS side of things &amp;#8211; and why not? After all that&amp;#39;s where the big dollars are. Speaking of big dollars, it may not be as big as &lt;em&gt;everyone&lt;/em&gt; keeps making out.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Licensing&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Sure enough the Internet facing licensing is off with the fairies (at around the USD 40K per server mark!), but inside the company it &lt;em&gt;can&lt;/em&gt; be significantly cheaper.&lt;/p&gt;&lt;p&gt;I don&amp;#39;t claim to understand the SharePoint licensing intimately, but &lt;ahref="http://office.microsoft.com/en-us/sharepointserver/FX102176831033.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://office.microsoft.com/en-us/sharepointserver/FX102176831033.aspx');" target="_blank"&gt;this link&lt;/a&gt; will give you an overview of licensing (eg a basic intranet MOSS license is under $5K, although moving to Enterprise will get you into $60K level &amp;#8211; Yikes!). However, the real kicker comes when you have to weigh up all the CALs you need (and for Enterprise you need to buy both the Standard CALs and the Enterprise CALS on top).&lt;/p&gt;&lt;p&gt;Getting confused yet? Yep, and to top it off you also need to factor in SQL Server licenses if you don&amp;#39;t already have those in place.&lt;/p&gt;&lt;p&gt;Summary: You need MOSS Server license + CALs + SQL Server licenses&lt;/p&gt;&lt;p&gt;Point to note: If you want to expose your intranet on the internet (eg via your web site) then you are in for a headache &lt;imgsrc='http://www.craigbailey.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt;&lt;/p&gt;&lt;p&gt;This &lt;ahref="http://office.microsoft.com/en-us/products/FX101865111033.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://office.microsoft.com/en-us/products/FX101865111033.aspx');" target="_blank"&gt;barely helpful link from Microsoft&lt;/a&gt; attempts to make it clearer, but requires about five readings before it starts to make sense.&lt;/p&gt;&lt;p&gt;This &lt;ahref="http://office.microsoft.com/en-us/sharepointserver/HA101978031033.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://office.microsoft.com/en-us/sharepointserver/HA101978031033.aspx');" target="_blank"&gt;Excel spreadsheet is a great SharePoint feature comparison&lt;/a&gt; for those wanting to get into the nitty-gritty (well worth the download).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Consider this&amp;#8230;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Here&amp;#39;s the main takeaway&amp;#8230; if you are considering SharePoint for your intranet but have been worried about licensing costs, then start with WSS. It has stacks of collaboration features and may be all you need. And it&amp;#39;s free. Plus you can always build on it, adding MOSS features later.&lt;/p&gt;&lt;p&gt;If you did move to MOSS, start with MOSS Standard and think carefully about whether you need the Enterprise features.&lt;/p&gt;&lt;p&gt;And think very, very carefully about making your web site MOSS based &lt;imgsrc='http://www.craigbailey.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;References: &lt;ahref="http://astore.amazon.com/craibailnet-20/detail/0735623686/103-7004902-1640614" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://astore.amazon.com/craibailnet-20/detail/0735623686/103-7004902-1640614');" target="_blank"&gt;Inside Microsoft Office SharePoint Server 2007&lt;/a&gt; by Patrick Tisseghem&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;* 4GB limitation &amp;#8211; MOSS running on SQL Express will be limited to 4GB (due to the SQL Express limitations), but WSS seems to run on a special version of SQL that is not limited. MOSS is never recommended to be run on SQL Express. Disclaimer: I am not sure of these details.&lt;/p&gt;&lt;p&gt;** MOSS is technically MOSS 2007, as there has not been any previous MOSS versions. The previous version of SharePoint was SharePoint Portal Server 2003, usually referred to as SPS or SPS 2003.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-1338926734017153208?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/1338926734017153208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=1338926734017153208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/1338926734017153208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/1338926734017153208'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/wss-30-vs-moss-standard-vs-moss.html' title='WSS 3.0 vs MOSS Standard vs MOSS Enterprise'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3503709456812465793</id><published>2010-03-10T18:48:00.001-08:00</published><updated>2010-03-10T18:48:59.644-08:00</updated><title type='text'>WSS 3.0 Search vs MOSS Search</title><content type='html'>&lt;div class="BlogPostContent"&gt;&lt;span style="font-size:x-small;font-family:Verdana;"&gt;&lt;br /&gt;&lt;p&gt;We have spent some time comparing MOSS search and WSS search in our lab.&amp;nbsp; For those who are interested in the differences between MOSS search and WSS search, this blog post might clear things up. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;WSS 3.0 Search&lt;br /&gt;&lt;/strong&gt;&amp;nbsp; &lt;br /&gt;Single Site collection, automatically scoped to current site (and subsites):&lt;/p&gt;&lt;p&gt;Only SharePoint content in the site collection can be crawled. You cannot configure Search to crawl databases, mail servers, application servers, or Web sites and file shares outside of the site collection. In a deployment with more than one site collection, each site collection provides Search only for content on that site collection, and there is no aggregation of search results across site collections.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;MOSS Search&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;MOSS uses an enhanced relevance algorithm for its search engine, and is able to crawl content from multiple sites within an enterprise, as well as non-sharepoint web sites. In short, the MOSS search engine is a powerful enterprise search engine with a relevance algorithm, while the WSS site-local search engine is actually pretty useless beyond simple &amp;quot;dumb keyword&amp;quot; search.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Site Directory&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Site Directory MOSS provides a new site template called &amp;quot;Site Directory&amp;quot;. When you create your first portal via MOSS, it comes with a Site Directory. This site template is designed specifically for tracking links to sites, displaying site maps and site navigation lists, as well as searching through the site directory. With a Site Directory in your portal, you will be asked if you want to publish a link to your new site every time you create a new site within the portal, regardless of its depth within the hierarchy. This single feature is, in my opinion, absolutely required for any kind of Intranet deployment of SharePoint. And yes, that means I think MOSS is a requirement for any real Intranet deployment of SharePoint on any kind of meaningful scale.&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3503709456812465793?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3503709456812465793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3503709456812465793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3503709456812465793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3503709456812465793'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/wss-30-search-vs-moss-search.html' title='WSS 3.0 Search vs MOSS Search'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-608257451187229330</id><published>2010-03-10T10:10:00.000-08:00</published><updated>2010-03-10T10:10:54.622-08:00</updated><title type='text'>Customizing BestBets SharePoint</title><content type='html'>&lt;p&gt;One of the things that people are not aware of is that you can customize the search results coming from the SharePoint search engine. The results, which is XML, given by the engine are styled using XSLT. If you create your own XSLT you can customize/restyle your results page. &lt;/p&gt;&lt;p&gt;There is a '&lt;a href="http://msdn2.microsoft.com/en-us/library/bb428855.aspx"&gt;Visual How To&lt;/a&gt;' by &lt;a href="/blogs/patrick"&gt;Patrick Tisseghem&lt;/a&gt; explaining the steps you need to do to customize the search page. &lt;/p&gt;&lt;p&gt;You can do the same trick with the Best Bets meaning, you can customize them by applying your own XSLT. Before we are going to customize the Best Bets, let me explain what they do an how you can use them. &lt;/p&gt;&lt;p&gt;Best Bets are used to promote some results depending on your search keywords. If you look at the screenshot below you see that when I type SharePoint in the search box, U2U and Microsoft are pushed forward as results where you definitely can find something about SharePoint. So if you think about it, Best Bets is a way for an administrator to earn some extra money, the one who pays the most gets on top of the list &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.infohttp://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing1.jpg"&gt; &lt;/p&gt;&lt;p&gt;To create these Best Bets, you need to go to the settings page of your top level site and you need to click on the 'Search keywords' linkbutton where you can create the Best Bets by clicking on the create button. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.infohttp://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing2.jpg"&gt; &lt;/p&gt;&lt;p&gt;After filling in a keyword you can add Best Bets by clicking on the Add Best Bet button, type in a url, title and description for your best bet. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing3.jpg"&gt; &lt;/p&gt;&lt;p&gt;Now that the Best Bets are created we can test them by typing SharePoint in the search textbox. You will see the results at the right side of the page. &lt;/p&gt;&lt;p&gt;Because they are displayed in a webpart you can drag the webpart into another webpartzone to ,for example, have your best bets before the search results. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing4.jpg"&gt; &lt;/p&gt;&lt;p&gt;Okay, now let's customize our Best Bets. These are basically the same steps as in the '&lt;a href="http://msdn2.microsoft.com/en-us/library/bb428855.aspx"&gt;Visual How To&lt;/a&gt;', so you can follow the steps there as well, the only difference is that in the video they customize the search results. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Because the Best Bets webpart is using XSLT to show the results getting from the search engine (which is XML ) we can apply our own XSLT. So if you go to the properties of the webpart you can click on the XSL Editor to replace the existing XSLT with your personal XSLT. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing5.jpg"&gt; &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing6.jpg"&gt; &lt;/p&gt;&lt;p&gt;As said, the best bests is nothing more than XML which is styled using XSLT. Because it is not easy to create XSLT, We are going to let SharePoint Designer create the XSLT for us. The only thing that we need to do is saving the XML returned from the search engine so we can use it in the Designer. &lt;/p&gt;&lt;p&gt;To see the XML returned from the engine we need to use following XSLT. Copy it in the XSLT dialog box. &lt;/p&gt;&lt;p style="background:#dddddd"&gt;&lt;span style="font-size:10pt;font-family:Lucida Console"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon"&gt;xsl:stylesheet&lt;/span&gt; version=&amp;quot;1.0&amp;quot; &lt;br&gt;   xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; &lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt; &lt;br&gt;   &lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon"&gt;xsl:output&lt;/span&gt; method=&amp;quot;xml&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; indent=&amp;quot;yes&amp;quot; &lt;span style="color:blue"&gt;/&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;br&gt;    &lt;span style="font-size:10pt;font-family:Lucida Console"&gt;&lt;span style="color:blue"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon"&gt;xsl:template&lt;/span&gt; match=&amp;quot;/&amp;quot;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;br&gt;    &lt;span style="font-size:10pt;font-family:Lucida Console"&gt;&lt;span style="color:blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:maroon"&gt;xmp&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Lucida Console"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon"&gt;xsl:copy-of&lt;/span&gt; select=&amp;quot;*&amp;quot;&lt;span style="color:blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Lucida Console"&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon"&gt;xmp&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Lucida Console"&gt;&lt;span style="color:blue"&gt;&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:Lucida Console"&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;After saving your new XSLT you can copy the XML and paste it temporarily in an XML file, so we can import this file and use it as a Data Source in SharePoint Designer. &lt;/p&gt;&lt;p&gt;Speaking about the devil, lets open up SharePoint designer to do some customization magic. The first thing that we need to do is using our XML as a Data Source. You can manage your data sources by choosing &lt;strong&gt;Manage Data Sources &lt;/strong&gt;which you can find in the Data View on the menu bar. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing7.jpg"&gt; &lt;/p&gt;&lt;p&gt;Once you've done this, you get an overview of all the available data sources in the toolbox. One of the data source categories is 'XML Files'. In that category you can click on &lt;strong&gt;Add an Xml File&lt;/strong&gt; to add your XML file as a data source. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing8.jpg"&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;You can browse to your file and add it to your Data Sources . Once the file is added,you can see the available data by right-clicking on it and pick &lt;strong&gt;Show Data&lt;/strong&gt; from the dropdownlist. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing9.jpg"&gt; &lt;/p&gt;&lt;p&gt;Once the data is shown you can specify what data you want to show for your best bets. Select title, url, description and drag this to your design surface. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing10.jpg"&gt; &lt;/p&gt;&lt;p&gt;Once you've dragged your data on the design surface, you see a menu where you can do some additional settings like adding more columns, allow paging and sorting …. In our case it is more useful to apply another layout so click on &lt;strong&gt;change layout&lt;/strong&gt; and pick one that fit your needs. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing11.jpg"&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing12.jpg"&gt; &lt;/p&gt;&lt;p&gt;Next thing that we need to do is make sure that we can click on the url. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing13.jpg"&gt; &lt;/p&gt;&lt;p&gt;Okay, that's it for now (you can off course customize as much or as advanced if you want), let's go to code view and copy the generated XSLT. Make sure that you copy everything between and including the &lt;span style="color:#8db3e2"&gt;&amp;lt;xsl:stylesheet&amp;gt; &lt;/span&gt;tags. &lt;/p&gt;&lt;p&gt;Copy the XSLT in the XSL Editor in the properties of the Best Bets webpart and save it. &lt;/p&gt;&lt;p&gt;Publish your page and try it out. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://www.u2u.info/Blogs/Kevin/My%20Pictures/061907_1857_Customizing14.jpg"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-608257451187229330?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/608257451187229330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=608257451187229330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/608257451187229330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/608257451187229330'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/customizing-bestbets-sharepoint.html' title='Customizing BestBets SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-7634115763232431838</id><published>2010-03-10T09:35:00.000-08:00</published><updated>2010-03-10T09:35:19.232-08:00</updated><title type='text'>SharePoint  Keyword and Property Search in SharePoint Server</title><content type='html'>&lt;div class="postsub"&gt;  &lt;h2&gt;Powerful Keyword and Property Search in SharePoint Server&lt;/h2&gt;  &lt;P&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms563261.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms563261.aspx"&gt;&lt;FONT color=#000000&gt;MSDN&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;has the best resources for understanding the keyword sytax and property searches.&amp;nbsp; You'll notice a lot of these are common across search platforms making it easy to adopt by end users.&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;Property search&lt;/STRONG&gt; is extremly powerful for&amp;nbsp;filtering down your results and worth your time to learn.&amp;nbsp; &lt;/P&gt;&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;MSDN - &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms563261.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms563261.aspx"&gt;Enterprise Search Keywords&lt;/A&gt;&amp;nbsp;and &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms582293.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms582293.aspx"&gt;Inclusion and Exlusion Rules&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;MSDN - &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms582745.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms582745.aspx "&gt;Enterprise Search Property Filters&amp;nbsp;&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;Robert Bogue MVP does a great job of describing properties from end to end in his "&lt;A class="" href="http://www.intranetjournal.com/articles/200508/ij_08_29_05a.html" mce_href="http://www.intranetjournal.com/articles/200508/ij_08_29_05a.html"&gt;Harnesing&amp;nbsp;Properties in SharePoint Search&lt;/A&gt;" article.&amp;nbsp; The&amp;nbsp;applies to SPS 2003, but offers a lot of insight into how you'd do it in 2007.&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;P&gt;If I'm searching for more data about content types using a &lt;STRONG&gt;keyword simple term&lt;/STRONG&gt;, a great way to associate a template, workflow and meta data capture, I might search for content types.&amp;nbsp; Words following the "&amp;gt;" are example searches.&lt;/P&gt;&lt;P&gt;&amp;gt;content types&lt;/P&gt;&lt;P&gt;If that doesn't return the result I'm looking for I could&amp;nbsp;add an keyword &lt;STRONG&gt;included&lt;/STRONG&gt; term with a plus such as +sharepoint.&amp;nbsp;Maybe I want to exclude exchange terms, so I can use an &lt;STRONG&gt;excluded&lt;/STRONG&gt; term.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&amp;gt;+sharepoint content types -exchange&lt;/P&gt;&lt;P&gt;To narrow down my search I could add a property such as title:"content types."&amp;nbsp; &lt;STRONG&gt;Property searches&lt;/STRONG&gt; support quote &lt;STRONG&gt;phrases&lt;/STRONG&gt;: &lt;/P&gt;&lt;P&gt;&amp;gt;+sharepoint title:"content types"&lt;/P&gt;&lt;P&gt;If I know that&amp;nbsp;William Devo&amp;nbsp;authored the document I could do a &lt;STRONG&gt;property&lt;/STRONG&gt; search based on author for example:&amp;nbsp;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&amp;gt;+sharepoint +title:"content types" author:"william devo"&lt;/P&gt;&lt;P&gt;If I know that the document should be on the office portal, I could search &lt;/P&gt;&lt;P&gt;&amp;gt;+sharepoint title:"content types" author:"william devo"&amp;nbsp;site:&lt;A href="http://office/"&gt;http://office&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Note: (no trailing slash on URLs.) The &lt;STRONG&gt;prefix&lt;/STRONG&gt; &lt;STRONG&gt;property&amp;nbsp;&lt;/STRONG&gt;similar to a wild card search&amp;nbsp;search described below applies to property searches where I can search for properties where I want to include multiple spellings. Maybe I don't know if he was Will or William.&lt;/P&gt;&lt;P&gt;&amp;gt;+sharepoint title:"content types" author:will&amp;nbsp;site:&lt;A href="http://office/"&gt;http://office&lt;/A&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;I may want to do another &lt;STRONG&gt;property search&lt;/STRONG&gt; to restrict it even more since I know I only want word docs.&lt;/P&gt;&lt;P&gt;&amp;gt;+sharepoint title:content types" author:will&amp;nbsp;site:&lt;A href="http://office/"&gt;http://office&lt;/A&gt;&amp;nbsp;filetype:doc&lt;/P&gt;&lt;P&gt;How do you do an OR? Simply include &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms490964.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms490964.aspx"&gt;multiple property&amp;nbsp;filters&lt;/A&gt; maybe it's bill or will/william.&lt;/P&gt;&lt;P&gt;&amp;gt;+sharepoint title:content types" author:will&amp;nbsp;author:bill site:&lt;A href="http://office/"&gt;http://office&lt;/A&gt;&amp;nbsp;filetype:doc&lt;/P&gt;&lt;br /&gt;&lt;P&gt;If all this seems like a lot to do on the simple search query box, you can use &lt;STRONG&gt;advanced search&lt;/STRONG&gt;.&amp;nbsp; Using this same&amp;nbsp;last example I could use the following:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Find Documents with:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;TABLE class="" id=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_OT border=0&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;&lt;LABEL id=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_AndQ_lb for=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_AndQ_tb&gt;All of these words:&lt;/LABEL&gt;&lt;/TD&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;sharepoint&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;&lt;LABEL id=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_PhraseQ_lb for=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_PhraseQ_tb&gt;The exact phrase:&lt;/LABEL&gt;&lt;/TD&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;content types&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;&lt;LABEL id=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_OrQ_lb for=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_OrQ_tb&gt;Any of these words:&lt;/LABEL&gt;&lt;/TD&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;&lt;LABEL id=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_NotQ_lb for=ctl00_ctl14_g_89e26253_a6b5_42ee_be57_ca038ef3ae55_ASB_TQS_NotQ_tb&gt;None of these words:&lt;/LABEL&gt;&lt;/TD&gt;&lt;TD class=ms-advsrchText class="ms-advsrchText"&gt;exchange&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Narrow:&lt;/STRONG&gt;&lt;/P&gt;&lt;P mce_keep="true"&gt;Result type: Word documents&lt;/P&gt;&lt;br /&gt;&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Property Restrictions&lt;/STRONG&gt;&lt;/P&gt;&lt;P mce_keep="true"&gt;Where the property... Author Contains Will &lt;STRONG&gt;or&lt;/STRONG&gt;&lt;/P&gt;&lt;P mce_keep="true"&gt;Author Contains Bill &lt;STRONG&gt;and&lt;/STRONG&gt;&lt;/P&gt;&lt;P mce_keep="true"&gt;URL Contains &lt;A href="http://office/"&gt;http://office&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-7634115763232431838?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/7634115763232431838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=7634115763232431838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7634115763232431838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7634115763232431838'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/sharepoint-keyword-and-property-search.html' title='SharePoint  Keyword and Property Search in SharePoint Server'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3833981390253923110</id><published>2010-03-09T18:58:00.000-08:00</published><updated>2010-03-09T19:00:49.474-08:00</updated><title type='text'>Find out storage space allocation for site through code</title><content type='html'>&lt;style type="text/css"&gt;.comment { color: #999999; font-style: italic; }.pre { color: #000099; }.string { color: #009900; }.char { color: #009900; }.float { color: #996600; }.int { color: #999900; }.bool { color: #000000; font-weight: bold; }.type { color: #FF6633; }.flow { color: #FF0000; }.keyword { color: #990000; }.operator { color: #663300; font-weight: bold; }&lt;/style&gt;&lt;br /&gt;&lt;pre&gt;SPSite oSite&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt; SPSite&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"http://mpacificomoss/"&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                        Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"SITE URL:"&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt;oSite&lt;span class="operator"&gt;.&lt;/span&gt;Url&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;                        DataTable oDtRawData&lt;span class="operator"&gt; =&lt;/span&gt; null&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;                        // this line of code will return the stroage information of all the document lirbaries in this site&lt;br /&gt;&lt;/span&gt;                        oDtRawData&lt;span class="operator"&gt; =&lt;/span&gt; oSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementInformation&lt;span class="operator"&gt;(&lt;/span&gt;SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementInformationType&lt;span class="operator"&gt;.&lt;/span&gt;DocumentLibrary&lt;span class="operator"&gt;&lt;br&gt;,&lt;/span&gt; SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementSortOrder&lt;span class="operator"&gt;.&lt;/span&gt;Increasing&lt;span class="operator"&gt;,&lt;/span&gt; SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementSortedOn&lt;span class="operator"&gt;.&lt;/span&gt;Size&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="int"&gt; 100&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;                        // this line of code will return the stroage information of all the lists in this site&lt;br /&gt;&lt;/span&gt;                        oDtRawData&lt;span class="operator"&gt; =&lt;/span&gt; oSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementInformation&lt;span class="operator"&gt;(&lt;/span&gt;SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementInformationType&lt;span class="operator"&gt;.&lt;/span&gt;List&lt;span class="operator"&gt;&lt;br&gt;,&lt;/span&gt; SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementSortOrder&lt;span class="operator"&gt;.&lt;/span&gt;Increasing&lt;span class="operator"&gt;,&lt;/span&gt; SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementSortedOn&lt;span class="operator"&gt;.&lt;/span&gt;Size&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="int"&gt; 100&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;                        // this line of code will return the stroage information of all the Documents in this site&lt;br /&gt;&lt;/span&gt;                        oDtRawData&lt;span class="operator"&gt; =&lt;/span&gt; oSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementInformation&lt;span class="operator"&gt;(&lt;/span&gt;SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementInformationType&lt;span class="operator"&gt;.&lt;/span&gt;Document&lt;span class="operator"&gt;&lt;br&gt;,&lt;/span&gt; SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementSortOrder&lt;span class="operator"&gt;.&lt;/span&gt;Increasing&lt;span class="operator"&gt;,&lt;/span&gt; SPSite&lt;span class="operator"&gt;.&lt;/span&gt;StorageManagementSortedOn&lt;span class="operator"&gt;.&lt;/span&gt;Size&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="int"&gt; 10000&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;                        // if you wan to see column names, loop through all the columns and find out the names and grab the needed one. &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;                        foreach&lt;span class="operator"&gt; (&lt;/span&gt;DataColumn oColumn in oDtRawData&lt;span class="operator"&gt;.&lt;/span&gt;Columns&lt;span class="operator"&gt;)&lt;br /&gt;                        {&lt;/span&gt;&lt;br /&gt;                            Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;oColumn&lt;span class="operator"&gt;.&lt;/span&gt;ColumnName&lt;span class="operator"&gt;);&lt;br /&gt;&lt;br /&gt;                        }&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;br /&gt;&lt;br /&gt;                        // loop through all the rows and find out the values. Here the size will be return in bytes (size/1024 = size in KBs)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;                        foreach&lt;span class="operator"&gt; (&lt;/span&gt;DataRow oRow in oDtRawData&lt;span class="operator"&gt;.&lt;/span&gt;Rows&lt;span class="operator"&gt;)&lt;br /&gt;                        {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                            Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;oRow&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="string"&gt;"TotalSize"&lt;/span&gt;&lt;span class="operator"&gt;].&lt;/span&gt;ToString&lt;span class="operator"&gt;() +&lt;/span&gt;&lt;span class="string"&gt; " : "&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt; oRow&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="string"&gt;"Size"&lt;/span&gt;&lt;span class="operator"&gt;].&lt;/span&gt;ToString&lt;span class="operator"&gt;() +&lt;/span&gt;&lt;br /&gt;&lt;span class="string"&gt; " : "&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt; oRow&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="string"&gt;"SizeOfVersions"&lt;/span&gt;&lt;span class="operator"&gt;].&lt;/span&gt;ToString&lt;span class="operator"&gt;() +&lt;/span&gt;&lt;span class="string"&gt; " : "&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt; oRow&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="string"&gt;"LeafName"&lt;/span&gt;&lt;span class="operator"&gt;].&lt;/span&gt;ToString&lt;span class="operator"&gt;());&lt;br /&gt;&lt;br /&gt;                        }&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3833981390253923110?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3833981390253923110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3833981390253923110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3833981390253923110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3833981390253923110'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/find-out-storage-space-allocation-for.html' title='Find out storage space allocation for site through code'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3666781061891011972</id><published>2010-03-09T17:59:00.000-08:00</published><updated>2010-03-09T17:59:53.278-08:00</updated><title type='text'>Find out Farm wide  Broken permission inheritance</title><content type='html'>&lt;body&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.comment { color: #999999; font-style: italic; }.pre { color: #000099; }.string { color: #009900; }.char { color: #009900; }.float { color: #996600; }.int { color: #999900; }.bool { color: #000000; font-weight: bold; }.type { color: #FF6633; }.flow { color: #FF0000; }.keyword { color: #990000; }.operator { color: #663300; font-weight: bold; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;SPWebService webAppServices&lt;span class="operator"&gt; = (&lt;/span&gt;from webService in SPFarm&lt;span class="operator"&gt;.&lt;/span&gt;Local&lt;span class="operator"&gt;.&lt;/span&gt;Services&lt;span class="operator"&gt;.&lt;/span&gt;OfType&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;SPWebService&lt;span class="operator"&gt;&amp;gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                                               where&lt;span class="operator"&gt; !&lt;/span&gt;webService&lt;span class="operator"&gt;.&lt;/span&gt;TypeName&lt;span class="operator"&gt;.&lt;/span&gt;Contains&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"Central"&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;&lt;br /&gt;                                               select webService&lt;span class="operator"&gt;).&lt;/span&gt;SingleOrDefault&lt;span class="operator"&gt;();&lt;/span&gt;    &lt;br /&gt;                    &lt;br /&gt;                &lt;br /&gt;                                                    &lt;br /&gt;                foreach&lt;span class="operator"&gt; (&lt;/span&gt;SPWebApplication webApp in webAppServices&lt;span class="operator"&gt;.&lt;/span&gt;WebApplications&lt;span class="operator"&gt;)&lt;br /&gt;                {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                    Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;webApp&lt;span class="operator"&gt;.&lt;/span&gt;Name&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;                    foreach&lt;span class="operator"&gt; (&lt;/span&gt;SPSite site in webApp&lt;span class="operator"&gt;.&lt;/span&gt;Sites&lt;span class="operator"&gt;)&lt;br /&gt;                    {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                        Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"SITE URL:"&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt;site&lt;span class="operator"&gt;.&lt;/span&gt;Url&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;                        foreach&lt;span class="operator"&gt; (&lt;/span&gt;SPWeb web in site&lt;span class="operator"&gt;.&lt;/span&gt;AllWebs&lt;span class="operator"&gt;)&lt;br /&gt;                        {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                            Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"Web URL"&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt; web&lt;span class="operator"&gt;.&lt;/span&gt;Url&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;                            //Use HasUniqueRoleAssignments property to check if the RoleInheritance is broken or not&lt;br /&gt;&lt;/span&gt;                            Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"Role inheritance "&lt;/span&gt;&lt;span class="operator"&gt; + (&lt;/span&gt;web&lt;span class="operator"&gt;.&lt;/span&gt;HasUniqueRoleAssignments&lt;span class="operator"&gt; ==&lt;/span&gt;&lt;span class="bool"&gt;true&lt;/span&gt;&lt;span class="operator"&gt; ?&lt;/span&gt;&lt;span class="string"&gt; "Broken"&lt;/span&gt;&lt;span class="operator"&gt; :&lt;/span&gt;&lt;span class="string"&gt; "Not Broken"&lt;/span&gt;&lt;span class="operator"&gt;)); &lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;/span&gt;&lt;/pre&gt;&lt;/body&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3666781061891011972?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3666781061891011972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3666781061891011972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3666781061891011972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3666781061891011972'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/find-out-farm-wide-broken-permission.html' title='Find out Farm wide  Broken permission inheritance'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-2430488305443182843</id><published>2010-03-05T10:25:00.001-08:00</published><updated>2010-03-05T10:25:08.895-08:00</updated><title type='text'>Display List Data From one site to another site</title><content type='html'>&lt;p&gt;A pretty common request is the ability to display content from one site on another site.&amp;nbsp; For example, you might have a blog sub site, and want to show those posts on the home page of the parent site.&lt;/p&gt;&lt;p&gt;In WSS V3, this is easy to do with SharePoint Designer.&lt;/p&gt;&lt;p&gt;First, we'll open the site and page&amp;nbsp;we where we want to display the list in SharePoint Designer.&amp;nbsp; One way to do this is to open SharePoint Designer and choose "Open Site..." from the File menu.&amp;nbsp; Another way is to browse to the page and then click the "Edit with Microsoft Office SharePoint Designer" option in Internet Explorer:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B1%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="371" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B1%5D.png" width="400" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Inside SharePoint Designer, in the design view of the page, click where you want the list to go, and then select "Insert Data View" from the Data View menu:&lt;/p&gt;&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="366" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B17%5D.png" width="305" border="0"&gt;&lt;/p&gt;&lt;p&gt;In the&amp;nbsp;Data Source Library Task Pane, select "Connect to another library...", since we want to display a list that is&amp;nbsp;not in this site:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="467" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B16%5D.png" width="323" border="0"&gt; &lt;/p&gt;&lt;p&gt;Click Add, then choose a display name, and type in the URL to the site where the list is:&lt;/p&gt;&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="344" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B15%5D.png" width="431" border="0"&gt; &lt;/p&gt;&lt;p&gt;Click OK in both dialogs, and then expand the new Library until you find the list you want:&lt;/p&gt;&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="469" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B14%5D.png" width="347" border="0"&gt; &lt;/p&gt;&lt;p&gt;Next, click on the list and select "Show Data":&lt;/p&gt;&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="252" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B20%5D.png" width="243" border="0"&gt; &lt;/p&gt;&lt;p&gt;Now the task pane shows the columns from the list:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B22%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="441" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B17%5D.png" width="223" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;You can now insert the items by selecting "Multiple Item View" from the insert menu:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B24%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B19%5D.png" width="209" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Let's start by changing the layout:&lt;/p&gt;&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="280" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B29%5D.png" width="354" border="0"&gt; &lt;/p&gt;&lt;p&gt;The Repeating Form layout is close to the blog layout:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B31%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="496" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B25%5D.png" width="426" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Text fields are HTML encoded by default.&amp;nbsp; To fix this, click on the arrow near the body field, and change the Format as: to Rich Text:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B26%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="197" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B21%5D.png" width="530" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;You can now remove column headers and edit any styles that you like:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B33%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="424" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B27%5D.png" width="465" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;To make a field into a link, set the format to be Hyperlink.&amp;nbsp; In the popup box, you can set the URL, and you can include values from the item by clicking the "fx" button:&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B39%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="270" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B33%5D.png" width="530" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;When you're done, save the page, and view it&amp;nbsp;in the browser:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image%5B42%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="310" src="http://blogs.msdn.com/blogfiles/jackiebo/WindowsLiveWriter/Displayingalistonanothersiteinthesamesit_7FE0/image_thumb%5B36%5D.png" width="530" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-2430488305443182843?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/2430488305443182843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=2430488305443182843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2430488305443182843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2430488305443182843'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/display-list-data-from-one-site-to.html' title='Display List Data From one site to another site'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3672455159477729198</id><published>2010-03-04T10:53:00.000-08:00</published><updated>2010-03-04T11:51:20.046-08:00</updated><title type='text'>Site Quotas in SharePoint</title><content type='html'>&lt;div class="ExternalClass59F63EB746E240C5BE686B1DD9E7C41A"&gt;&lt;span id="goog_1267728882740"&gt;&lt;/span&gt;&lt;span id="goog_1267728882741"&gt;&lt;/span&gt;Repeatedly I have come across a SharePoint implementation that was not well planned out in regards to data storage.  When you are planning the taxonomy and information architecture of your sites, a good amount of effort and thought should be put into Site Quotas.  Site Quotas are a key component for SharePoint Administrators to be able to properly manage and administer data restrictions on your site collections.&lt;br /&gt;To better understand site collections, I highly recommend reading the white papers made available on the Microsoft SharePoint Team’s blog.&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;White Paper: Windows SharePoint Services Manageability Controls &lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;Set quotas at a level that balances the need to manage storage with increasing numbers of support calls from site owners who are being told their site is out of space. Do the math in your organization by understanding the current and anticipated storage needs for sites and determining how many calls you want to get. Don’t set your quota at the expected average site collection size, or you will get support calls for quota increases for half of your sites. Instead, set quota size toward the top end of the acceptable level of storage and consider how much the storage costs versus the support call or the cost of time involved in increasing the quota. Although storage has become very cheap, quotas will encourage users to be responsible with their data.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;If, for example, you anticipate having 1,000 site collections supporting team collaboration, and you anticipate that site collections will require between 100 MB and 600 MB of storage, evenly distributed across that 500 MB range, then by setting a quota of 550 MB, you can anticipate that 10 percent of the site collections will end up over quota. That means you can expect, over time, approximately 100 support calls requesting “exception” from the policy.&lt;/i&gt; &lt;br /&gt;[&lt;a href="http://blogs.msdn.com/sharepoint/archive/2007/06/28/windows-sharepoint-services-manageability-controls-part-1-of-3.aspx" target="_blank"&gt;view more of the white paper&lt;/a&gt;]&lt;/blockquote&gt;Here are some key things you should know when it comes to administering site collection quotas and quota templates.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Quotas are only applied to Site Collections  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;They are not applied to one team site, or an entire web application (which hosts multiple site collections)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;You can create a default quota template at the web application level, which will be used by new site collections created moving forward.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Everything in a site encompasses the Quota space: files in document libraries, items in your lists, all web parts, all images, form templates, etc…  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The content/data in the Recycle Bin is also included in the Quota space (it’s part of the site) &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Site Collection Quotas and Quota templates are managed in Central Administration  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Central Administration &amp;gt; Application Management &amp;gt; Site Collection Quotas and Locks&lt;/i&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;New Site Collection:&lt;/b&gt; &lt;b&gt;&lt;span style="color: grey;"&gt;Assign a Quota during Site Collection creation&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;During the process of creating a site collection, you’ll select a Quota template, or not limit the collection at all:&lt;br /&gt;&lt;img alt="clip_image002" border="0" height="156" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/clip_image002_82964d3315cb47e99558d55cc2498a7a_433ADDFE.jpg" style="border: 0px none;" width="522" /&gt; &lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Existing Site Collection: &lt;span style="color: grey;"&gt;Determine if a Site Collection has a Quota&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;While browsing the site collection’s site settings, you may see Storage space allocation – this lets you know the site has a quota limitation set on it.To see this menu you have to enable Quotas for the Site Collection.  Select this link to see how the quota is currently being utilized.&lt;br /&gt;&lt;b&gt;&lt;img alt="clip_image010" border="0" height="226" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/clip_image010_075de8e6bb324af99511bb03eddea1ca_433ADDFE.jpg" style="border: 0px none;" width="241" /&gt;&lt;/b&gt;When you click this link you would see the Quota usage page like below.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mBxfQQ-GqTg/S5ANzn0n9CI/AAAAAAAACLg/a0MIs3e7CGI/s1600-h/storage_space_allocation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_mBxfQQ-GqTg/S5ANzn0n9CI/AAAAAAAACLg/a0MIs3e7CGI/s320/storage_space_allocation.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Existing Site Collection: &lt;span style="color: grey;"&gt;Determining current Quota&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;To view what current quota template a site is using, navigate to the Site Collection Quotas and Locks in Central Administration.  Select the site site collection that you are viewing the Quota for. &lt;br /&gt;&lt;i&gt;Central Administration &amp;gt; Application Management &amp;gt; Site Collection Quotas and Locks&lt;/i&gt;&lt;br /&gt;&lt;img alt="image" border="0" height="88" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/image_abb53cf974984a6b91ab9e2616daa3f5_433ADDFE.png" style="border: 0px none; display: inline;" title="image" width="538" /&gt; &lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Side Note&lt;/i&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;img align="right" alt="clip_image013" border="0" height="40" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/clip_image013_f3ef35b9ca9e4caa9f5044e08ae8ad1e_433ADDFE.jpg" style="border: 0px none; display: inline; margin-left: 0px; margin-right: 0px;" width="105" /&gt;When viewing your site collection list, it will not show all collections on one page if you have a large amount (more than 10).  To see the other collections, use the pagination in the header.&lt;/blockquote&gt;With the proper site collection selected, you will site the current quota template and the corresponding settings for that quota. In this case, &lt;b&gt;Large&lt;/b&gt; &lt;b&gt;Team Site&lt;/b&gt; is the quota template with 500mb of storage.  &lt;img alt="image" border="0" height="133" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/image_aab15238a8714596bf72d37e7e6c2071_39D2FD5F.png" style="border: 0px none; display: inline;" title="image" width="444" /&gt;   &lt;br /&gt;If a site was created without a Quota Template applied, you will see the following information (which is currently not limited at all):&lt;br /&gt;&lt;img alt="image" border="0" height="133" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/image_cbad9b81cdcf4156ab2c6638ac5e11dd_67C05017.png" style="border: 0px none; display: inline;" title="image" width="446" /&gt; &lt;br /&gt;&lt;b&gt;Existing Site Collection: &lt;span style="color: grey;"&gt;Change Current Quota&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;To change the Quota Template of the site collection:&lt;br /&gt;&lt;i&gt;Central Administration &amp;gt; Application Management &amp;gt; Site Collection Quotas and Locks&lt;/i&gt;&lt;br /&gt;Select which site collection that you are editing  the Quota for.&lt;img alt="image" border="0" height="88" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/image_abb53cf974984a6b91ab9e2616daa3f5_433ADDFE.png" style="border: 0px none; display: inline;" title="image" width="538" /&gt;&lt;br /&gt;Select a Quota Template, and click OK.&lt;br /&gt;&lt;img alt="image" border="0" height="176" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/image_84d74aa6464e4d86b6d28d3ed624ebcc_67C05017.png" style="border: 0px none; display: inline;" title="image" width="440" /&gt; &lt;br /&gt;To set a quota that is not template based, select individual quota and enter your values.&lt;br /&gt;&lt;img alt="clip_image012" border="0" height="172" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/clip_image012_843e47ab9dbc4e31b82f928d90e5841f_0304C484.jpg" style="border: 0px none;" width="522" /&gt;&lt;br /&gt;When setting a quota template on an existing site collection, your quota needs to &lt;b&gt;exceed&lt;/b&gt; the current storage used, or else the site will immediately be exceeding it’s storage and be locked.&lt;br /&gt;&lt;img alt="image" border="0" height="143" src="http://www.sharepointcomic.com/Lists/Posts/Attachments/94/image_a9d1a24da6c745059c1cd284345dbec5_67C05017.png" style="border: 0px none; display: inline;" title="image" width="321" /&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3672455159477729198?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3672455159477729198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3672455159477729198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3672455159477729198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3672455159477729198'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/site-quotas-in-sharepoint.html' title='Site Quotas in SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mBxfQQ-GqTg/S5ANzn0n9CI/AAAAAAAACLg/a0MIs3e7CGI/s72-c/storage_space_allocation.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-2603352670826429628</id><published>2010-03-03T10:53:00.001-08:00</published><updated>2010-03-03T10:53:56.491-08:00</updated><title type='text'>Hide SearchDropdown using DelegateControl</title><content type='html'>		&lt;div class="post-5 post hentry" id="post-5"&gt;			&lt;h2&gt;Super Simple Feature for Hiding the Search Scope DropDown&lt;/h2&gt;&lt;br /&gt;			&lt;div class="entry"&gt;				&lt;/p&gt;&lt;p&gt;So I need to hide the scope drop down that shows up next to the search box in my SharePoint MasterPage.&amp;#160; &lt;/p&gt;&lt;p&gt;&lt;em&gt;Me&lt;/em&gt;:&amp;#160; &amp;quot;That&amp;#39;s gotta be simple&amp;#8230;&amp;#160; Just open up SharePoint designer and set some property on the search control.&amp;quot;&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;SharePoint&lt;/em&gt;: &amp;quot;Silly little boy!&amp;#160; Say hello to my little friend&amp;#8230;err&amp;#8230; DelegateControl!&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;Enter Jesse into world of SharePoint delegate controls&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Foolishness aside, the concept behind the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms463169.aspx"&gt;DelegateControl&lt;/a&gt; is actually pretty useful, and because of it I was able to roll a very straightforward feature permitting me to hide the scope drop down in my MasterPage.&amp;#160; And I didn&amp;#39;t even have to write one line of code&amp;#8230; a true ode to developer sloth.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The feature&amp;#8230;.&lt;/p&gt;&lt;div style="border-right:gray 1px solid;padding-right:4px;width:500px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#800000;"&gt;xml&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;encoding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#008000;"&gt;&amp;lt;!-- Copyright (c) Microsoft Corporation. All rights reserved. --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Feature&lt;/span&gt;  &lt;span style="color:#ff0000;"&gt;Id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;085B7E09-1D3E-41a7-9FEE-0C88F4394920&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;Title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Custom Basic Search Control Feature&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;Description&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A feature for a search control that hides the Scope drop-down.&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;DefaultResourceFile&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;spscore&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;Version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1.0.0.0&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;Scope&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;WebApplication&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ElementManifests&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ElementManifest&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Location&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;searcharea.xml&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ElementManifests&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Feature&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;SearchArea.xml&amp;#8230;&lt;/p&gt;&lt;div style="border-right:gray 1px solid;width:500px;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#800000;"&gt;xml&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;encoding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Elements&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Control&lt;/span&gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         &lt;span style="color:#ff0000;"&gt;Id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CustomSmallSearchInputBox&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#ff0000;"&gt;Sequence&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color:#ff0000;"&gt;ControlClass&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Microsoft.SharePoint.Portal.WebControls.SearchBoxEx&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ControlAssembly&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;GoImageUrl&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;/_layouts/images/gosearch.gif&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;GoImageUrlRTL&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;/_layouts/images/goRTL.gif&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;GoImageActiveUrl&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;/_layouts/images/gosearch.gif&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;GoImageActiveUrlRTL&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;/_layouts/images/goRTL.gif&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;DropDownMode&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;HideScopeDD&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;SearchResultPageURL&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;/_layouts/osssearchresults.aspx&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ScopeDisplayGroupName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FrameType&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;None&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Control&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Elements&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Two important things to note here&amp;#8230; the Id of the control (CustomSmallSearchInputBox) and the DropDownMode (there are actually &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.dropdownmodes.aspx"&gt;a bunch of different values&lt;/a&gt; you can set here).&amp;#160; So, install your feature, reference the CustomSmallSearchInputBox in your MasterPage and you&amp;#39;re ret&amp;#39; to go:&lt;/p&gt;&lt;br /&gt;&lt;div style="border-right:gray 1px solid;padding-right:4px;width:500px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ContentPlaceHolder&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;PlaceHolderSearchArea&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SharePoint:DelegateControl&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ControlId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CustomSmallSearchInputBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ContentPlaceHolder&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Theoretically speaking, you could roll your feature with the same ID as the SharePoint feature (SmallSearchInputBox), set the Sequence attribute to something super low, install your feature, and have your customized version start showing up throughout the site.&amp;#160; I myself prefer to keep my changes more modular.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-2603352670826429628?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/2603352670826429628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=2603352670826429628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2603352670826429628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2603352670826429628'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/hide-searchdropdown-using.html' title='Hide SearchDropdown using DelegateControl'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3442195183068303317</id><published>2010-03-02T14:10:00.000-08:00</published><updated>2010-03-02T14:10:24.053-08:00</updated><title type='text'>Custom WebPart Page Template with Navigation</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;&lt;FONT color=#000080&gt;Steps to add Custom Web Part Page Templates&lt;/FONT&gt;&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Download custom creation page (&lt;EM&gt;custspcf.aspx&lt;/EM&gt;)&amp;nbsp;from &lt;A href="http://www.dontpapanic.com/download/custspcf.aspx.txt"&gt;here&lt;/A&gt; and copy it 12 hive on your Web front end servers.&amp;nbsp; The file should be copied to the following directory &lt;STRONG&gt;&lt;EM&gt;Local_drive&lt;/EM&gt;:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\TEMPLATE\LAYOUTS\1033&lt;/STRONG&gt;.&amp;nbsp;&amp;nbsp; (Note: If you are running on a server installed in a language other than English replace 1033 with the Language Code Identifier for your language.) &lt;br /&gt;&lt;br /&gt;&lt;LI&gt;Open the new &lt;EM&gt;custspcf.aspx&lt;/EM&gt; file in Visual Studio or another suitable text/html editor. &lt;br /&gt;&lt;LI&gt;Search for &lt;EM&gt;onetidWebPartPageTemplate &lt;/EM&gt;in the custspcf.aspx file.&amp;nbsp; This is the ID of the selection list for the Web Part Page templates.&amp;nbsp; There are two selections already included for the file, one for Custom1.aspx&amp;nbsp;(set to be the default selection) and the other for Custom2.aspx.&amp;nbsp; If you only want two custom templates skip step 4. &lt;br /&gt;&lt;LI&gt;To add additional templates increment the &lt;EM&gt;size&lt;/EM&gt; attribute of the &lt;EM&gt;Select&lt;/EM&gt; element to the number of choices in the list and duplicate the second &lt;EM&gt;Option&lt;/EM&gt; element in the list.&amp;nbsp; Change the &lt;EM&gt;name&lt;/EM&gt; value of the &lt;EM&gt;Option&lt;/EM&gt; element using a pattern of &lt;STRONG&gt;Custom#&lt;/STRONG&gt;, where # is the next index in the list of selections. &lt;br /&gt;&lt;LI&gt;Search for &lt;EM&gt;onetidPreviewImage&lt;/EM&gt; in the custspcf.aspx file.Specify the image in the src attribute for the template which will be selected by default.Name each image file the same as webpart template name. For example if the webpart template name is custom1.aspx then image name should be custom1.gif&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;Add the new custom Web Part Page template, named Custom# to match the entry in step 4,&amp;nbsp;to the &lt;STRONG&gt;&lt;EM&gt;Local_drive&lt;/EM&gt;:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\TEMPLATE\1033\STS\DOCTEMP\SMARTPGS &lt;/STRONG&gt;directory.&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;LI&gt;Copy an&amp;nbsp;image file named Custom&lt;EM&gt;#&lt;/EM&gt;.gif for each of the Web Part Page templates you wish to add where &lt;EM&gt;#&lt;/EM&gt; is the number of the template in the list to &lt;STRONG&gt;&lt;EM&gt;Local_drive&lt;/EM&gt;:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\TEMPLATE\LAYOUTS\1033\IMAGES&lt;/STRONG&gt; &lt;br /&gt;&lt;LI&gt;Add a Link to custspcf.aspx to the Create.aspx page stored in the &lt;STRONG&gt;&lt;EM&gt;Local_drive&lt;/EM&gt;:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\TEMPLATE\LAYOUTS&lt;/STRONG&gt; directory.&amp;nbsp;The custspcf.aspx needs to be deployed to layouts page and the image files needs to be deployed to template\&lt;LCID&gt;\layouts\images folder. You can use wsp to deploy these files to these folders. &lt;/LI&gt;&lt;br /&gt;&lt;/OL&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3442195183068303317?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3442195183068303317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3442195183068303317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3442195183068303317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3442195183068303317'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/custom-webpart-page-template-with.html' title='Custom WebPart Page Template with Navigation'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-8664581394870183165</id><published>2010-03-02T10:26:00.001-08:00</published><updated>2010-03-02T10:26:53.472-08:00</updated><title type='text'>Disable MySites and MyLinks in SharePoint</title><content type='html'>&lt;P&gt;In order to turn off or disable the MySite or MyLinks functionality you need to be an Sharepoint administrator.&lt;/P&gt;&lt;P&gt;Go to the Central Administration Web Page&lt;BR&gt;Click on the link&amp;nbsp;for&amp;nbsp;Shared Services Administration&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --If you have more than one SSP, select the one that is running the MySites functionality&lt;BR&gt;Under "User Profiles and My Sites" click Personalization Services Permissions&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Select the group you want to limit the functionality for.&amp;nbsp; More than likely you will just have NTAuthority\Authenticated Users.&lt;/P&gt;&lt;P&gt;In the next screen you will see a list of checkboxes,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --To disable MySites uncheck "Create Personal Site"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --To disable MyLinks uncheck "Use Personal Features"&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-8664581394870183165?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/8664581394870183165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=8664581394870183165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8664581394870183165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8664581394870183165'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/disable-mysites-and-mylinks-in.html' title='Disable MySites and MyLinks in SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3588136059746898775</id><published>2010-03-02T10:22:00.001-08:00</published><updated>2010-03-02T10:22:52.282-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2007'/><title type='text'>Content Deployment explained</title><content type='html'>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;In this post, I’ll cover how a particular WCM feature called Content Deployment supports multi-farm topologies and can be used to enable authoring -&amp;gt; staging -&amp;gt; production scenarios. I’ll talk a little about previous solutions to the problem, give you an overview of the Content Deployment feature, and discuss the architecture of the feature in-depth.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;I would like to point out before we get started that even though I will be discussing the Content Deployment feature’s application in &lt;B style="mso-bidi-font-weight: normal"&gt;Internet-facing scenarios&lt;/B&gt;, the feature is most definitely useable for &lt;B style="mso-bidi-font-weight: normal"&gt;intranet&lt;/B&gt; sites as well. Because content is deployed from site collection to site collection, it can even be used to deploy content to another location on the same machine. Bottom line: the Content Deployment feature is very flexible and has uses beyond the scenarios that I’ll be discussing in this post.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;First, let’s make sure we’re all on the same page by presenting a typical IT scenario. If you’re running an Internet-facing site that contains content authored by people on your internal network, chances are that you have a network separation (i.e. firewall(s)) between the intranet and the Internet-facing network. You want your internal authors to have access to the site so they can author, edit, and approve content, but you want that network (the intranet) shielded from &lt;I style="mso-bidi-font-style: normal"&gt;incoming&lt;/I&gt; Internet traffic for security purposes. After all, the Internet is a big scary place no doubt populated with people who’d like nothing better than to get onto your internal network and wreak havoc. However, if Internet users can’t access your site, then what good is it?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;The most common solution to this problem is to have two server farms: one internal farm (in the intranet) dedicated to your authors/editors/designers and a second farm (in the Internet-facing network) that hosts your production site. Your internal farm is read/write, while your production farm is most likely read-only. If you have this sort of topology though, you need a way to get the authored content from your authoring farm to your production farm. This is where Content Deployment comes in. In a nutshell, deployment allows you to push out your content from one server farm to another. For the purposes of this post, I’m going to focus on a two-tier topology (authoring -&amp;gt; production), but you can also have a three-tier topology (authoring -&amp;gt; staging -&amp;gt; production) or even an &lt;I style="mso-bidi-font-style: normal"&gt;n&lt;/I&gt;-tier topology if you need it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;If you have used Content Management Server (CMS) 2002, then you’re somewhat familiar with Content Deployment already. In CMS, you would &lt;B style="mso-bidi-font-weight: normal"&gt;export&lt;/B&gt; your content from the authoring farm to an .sdo file, &lt;B style="mso-bidi-font-weight: normal"&gt;transport&lt;/B&gt; it via your own method to the production farm, then initiate an &lt;B style="mso-bidi-font-weight: normal"&gt;import&lt;/B&gt; of the .sdo file on the production farm. There were three basic steps: export, transport, and import, but there wasn’t any UI to help you configure this process – it was all manual.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;In MOSS, things work in much the same way. The three basic phases of the process remain the same; however, Content Deployment takes care of transporting the content across the wire for you and instantiates the remote import as well. We even provide a UI in the SharePoint Central Administration site that allows you to configure, run, and monitor the deployment of your content.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;So how exactly does this all work? So glad you asked! :-)&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;&amp;nbsp;There are two core conceptual objects to understand: &lt;B style="mso-bidi-font-weight: normal"&gt;paths&lt;/B&gt; and &lt;B style="mso-bidi-font-weight: normal"&gt;jobs&lt;/B&gt;. A path is basically a connection between a source farm and a destination farm. The path contains information about which source web application and site collection you are deploying, authentication information for the destination farm, and the web application and site collection on the destination farm. In short, a &lt;B style="mso-bidi-font-weight: normal"&gt;path&lt;/B&gt; represents the mapping between your authoring and production site collections.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;However, a path by itself doesn’t actually deploy any content. In order to do that, you create a &lt;B style="mso-bidi-font-weight: normal"&gt;job&lt;/B&gt;. A &lt;B style="mso-bidi-font-weight: normal"&gt;job&lt;/B&gt; is associated with a path, and it determines exactly which sites in the source site collection will be deployed and on what schedule. You can have many different jobs for a given path, each running on different schedules and deploying specific sections of your site. That’s right – a job has a schedule and can deploy content updates regularly without the need to manually kick it off every time. For example, let’s say you have a Press Releases site that needs to be updated every hour, and an Employee Bios site that only needs to be updated every month. You would create two different jobs, one that runs every hour and deploys the Press Releases site, and another that runs monthly and deploys the Employee Bios site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;Let’s say you also need to push out your data to a third farm, perhaps a read-only &lt;B style="mso-bidi-font-weight: normal"&gt;extranet&lt;/B&gt;. No problem! You simply create another path that maps your authoring site to the extranet site, and create jobs that deploy the appropriate content on the appropriate schedule. One important thing to note is that deployment is always one way: source -&amp;gt; destination. It’s a “single-master” system.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;Deployment is also pretty smart. By default, it only deploys the changes since the last successful deployment, which saves bandwidth and time. And if there aren’t any changes, the deployment will complete without redoing any unnecessary work. Of course, full deployments every time can be configured if that’s what you really want.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;What about dependencies? What if a page is dependent on a page layout or image that has been updated? No cause for concern; deployment &lt;I style="mso-bidi-font-style: normal"&gt;automatically&lt;/I&gt; picks up the dependent page layout and packages it up along with the page itself – &lt;I style="mso-bidi-font-style: normal"&gt;even if the dependent resources aren’t in the same site&lt;/I&gt;. Let me clarify what that means. In the above scenario with the Press Releases and Employee Bios sites, let’s say you configured the two jobs I talked about on two different schedules. Whenever the Press Releases job runs, it will check to see if any of the content it’s deploying is dependent on other resources, and will pick those resources regardless of where they live in your site collection. This ultimately means that you don’t have to worry about content not rendering on your production environment because your jobs run on different schedules and have interdependent content – Content Deployment takes care of it all for you!&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;As I alluded to earlier, Content Deployment is configured and managed in the SharePoint Central Administration site, so the person configuring it is a Central Administrator. Usually this is OK, but there might be instances where a page needs to be deployed from authoring to production as quickly as possible. The site owner, who probably isn’t a Central Administrator, needs to get that content out ASAP, and doesn’t have time to wait for the next scheduled deployment. What does the site owner do?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;For scenarios like this, Content Deployment has a special job called “Quick Deploy” that is &lt;I style="mso-bidi-font-style: normal"&gt;automatically&lt;/I&gt; created for every path in any site collection with the Publishing Resources feature enabled. This job, once enabled in a path, wakes up every few minutes (15 minutes, by default) and checks a special list for content that should be deployed. If the site owner has rights, he or she can deploy pages quickly to production by using the “Quick Deploy” link on the Page Editing toolbar. This adds that page to the special list, which the Quick Deploy job will check the next time it wakes up. Pretty nifty, eh? By default, only the site owner has the Quick Deploy right. In order to give other users the same privileges, you simply add them to the Quick Deploy Users group.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Trebuchet MS'"&gt;And that, ladies and gents, is Content Deployment in a nutshell – albeit a fairly&amp;nbsp;large nutshell. :-)&amp;nbsp;I should also mention that if the Content Deployment feature doesn’t meet your needs for some reason (perhaps you have physically separated networks and require an alternative transport method such as “sneaker-net”), you can always use our APIs, which are well documented in the MOSS SDK, to craft a custom solution that meets your exact needs. I think that you’ll find this feature compelling and exciting, especially if your IT infrastructure leverages a multi-farm topology. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3588136059746898775?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3588136059746898775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3588136059746898775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3588136059746898775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3588136059746898775'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/content-deployment-explained.html' title='Content Deployment explained'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-4420127286637070791</id><published>2010-03-02T10:09:00.000-08:00</published><updated>2010-03-02T10:14:38.380-08:00</updated><title type='text'>Content Deployment Step by Step</title><content type='html'>&lt;div class=ExternalClassA06F912D666D4CCC95AFAA7BBB9D1F2D&gt;&lt;p&gt;I was looking around and realized that I couldn't find an easy set of instructions to set up Content Deployment in Microsoft Office SharePoint Server. &lt;/P&gt;&lt;p&gt;In this post, I'll show you how to set up content deployment from a staging site collection to a production site collection. For simplicity, I will host both site collections on the same server. &lt;/P&gt;&lt;p&gt;For a background on content deployment, see: &lt;a href="http://blogs.msdn.com/sharepoint/archive/2006/05/02/588140.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2006/05/02/588140.aspx"&gt;http://blogs.msdn.com/sharepoint/archive/2006/05/02/588140.aspx&lt;/A&gt; &lt;/P&gt;&lt;h1&gt;Create Production Site Collection &lt;/h1&gt;&lt;p&gt;When setting up a content deployment path, the site collections must be in separate content databases so that the unique identifiers (GUIDs) do not conflict. The easiest way to ensure that the production site collection is in a different content database is to create it in a new web application. &lt;/P&gt;&lt;p&gt;Open Central Administration: &lt;/P&gt;&lt;p&gt;Under Application Management: &lt;/P&gt;&lt;p&gt;Select Create or extend Web application: &lt;/P&gt;&lt;p&gt;Choose an easy to remember port number, such as 12345: &lt;/P&gt;&lt;p&gt;Type in a user name and credentials to create a new app pool: &lt;/P&gt;&lt;p&gt;Type in a descriptive database name such as MOSS_PRODUCTION: &lt;/P&gt;&lt;p&gt;Leave all other settings at the default and click OK, then wait for the Web application to be created: &lt;/P&gt;&lt;p&gt;Click Create Site Collection: &lt;/P&gt;&lt;p&gt;Ensure that your new Web Application is selected: &lt;/P&gt;&lt;p&gt;Type in any name for the Title (it will be overwritten later): &lt;/P&gt;&lt;p&gt;Select "Blank Site" as the template. This step is IMPORTANT, because Blank Site is the only template that you can import any other template into: &lt;/P&gt;&lt;p&gt;Type in the names for the site collection owners: &lt;/P&gt;&lt;p&gt;Click OK. &lt;/P&gt;&lt;h1&gt;Allow Incoming Content Deployment Jobs on the Production Site &lt;/h1&gt;&lt;p&gt;Select Operation: &lt;/P&gt;&lt;p&gt;Select Content deployment settings: &lt;/P&gt;&lt;p&gt;Select Accept incoming content deployment jobs: &lt;/P&gt;&lt;p&gt;Select Do not require encryption and click OK: &lt;/P&gt;&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;h1&gt;Create Content Deployment Path from Staging to Production &lt;/h1&gt;&lt;p&gt;Select Content deployment paths and jobs: &lt;/P&gt;&lt;p&gt;Click New Path: &lt;/P&gt;&lt;p&gt;Type a descriptive name for the path. Select the web application and site collection for the staging site. Then type in the URL of the Central Administration web site of the production site. Since we are putting both of our sites on the same server farm, the URL is the farm that we are on now. &lt;/P&gt;&lt;p&gt;Click Connect: &lt;/P&gt;&lt;p&gt;Once you see "Connection succeeded", select the web application and site collection that you created for production. You can also choose to deploy user names and security if you want the new site to have the same users and permissions. &lt;/P&gt;&lt;p&gt;Click OK. &lt;/P&gt;&lt;h1&gt;Create Content Deployment Job &lt;/h1&gt;&lt;p&gt;Click New Job: &lt;/P&gt;&lt;p&gt;Type a name, and then select the path you created: &lt;/P&gt;&lt;p&gt;Keep all other default values, and click OK. &lt;/P&gt;&lt;h1&gt;Run Content Deployment Job &lt;/h1&gt;&lt;p&gt;From the context menu on the job, select Run Now: &lt;/P&gt;&lt;p&gt;Refresh the page, and then click on the text Running: &lt;/P&gt;&lt;p&gt;Watch the status of the job: &lt;/P&gt;&lt;p&gt;When the status changes to Succeeded, you can click on the URL to the production site to verify that the content was deployed. &lt;/P&gt;&lt;h1&gt;Run Quick Deploy Job. &lt;/h1&gt;&lt;p&gt;Note:Quick Deploy Job gets created only when source and destination both sitecollection has Publishing features enabled.&lt;/P&gt;&lt;p&gt;In "Manage Content Deployment Paths and Jobs" Select Quick Deploy Settings from the Quick Deploy Job context menu: &lt;/P&gt;&lt;p&gt;Select Allow Quick Deploy jobs along this path, and set the schedule to check every 10 minutes, then click OK: &lt;/P&gt;&lt;p&gt;Visit the staging site and edit a page: &lt;/P&gt;&lt;p&gt;Make some changes: &lt;/P&gt;&lt;p&gt;Publish the page: &lt;/P&gt;&lt;p&gt;Show the page editing toolbar: &lt;/P&gt;&lt;p&gt;From the Tools menu, select Quick Deploy: &lt;/P&gt;&lt;p&gt;The changes will be picked up and deployed to production within 10 minute: &lt;/P&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-4420127286637070791?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/4420127286637070791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=4420127286637070791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/4420127286637070791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/4420127286637070791'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/content-deployment-step-by-step.html' title='Content Deployment Step by Step'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-9138153660585244740</id><published>2010-03-01T07:18:00.001-08:00</published><updated>2010-03-01T07:34:06.063-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>Farm wide: Hiding Site Templates</title><content type='html'>&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You need to customize what site creators see when they choose site templates.  &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img height=245  src="http://sharepoint.microsoft.com/blogs/fromthefield/Lists/Posts/Attachments/34/TemplateSelection_2.jpg" width=401 border=0 style='border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;width:401px !important;height:245px !important;padding:0;background:transparent no-repeat -1px 0;'&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Answer&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There are XML manifest files found on the file system of the web front end.  &lt;/p&gt;&lt;p&gt;The file you can change is found here:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\XML\&lt;/strong&gt;&lt;strong&gt;WEBTEMP.XML&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;p&gt;In it, you'll find reference to the site templates.  &lt;p&gt;You'll see a &lt;strong&gt;TEMPLATE NAME&lt;/strong&gt; tag which will identify the site template.  &lt;p&gt;Then look for the &lt;strong&gt;HIDDEN&lt;/strong&gt; attribute.  &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img height=94 alt=webtempxml src="http://sharepoint.microsoft.com/blogs/fromthefield/Lists/Posts/Attachments/34/webtempxml_2.jpg" width=432 border=0 style='border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;width:432px !important;height:94px !important;padding:0;background:transparent no-repeat -404px 0;'&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;If you can see it in the template list then &lt;strong&gt;HIDDEN&lt;/strong&gt; is set &lt;strong&gt;FALSE.&lt;/strong&gt;  If you want to hide it, change &lt;strong&gt;HIDDEN&lt;/strong&gt; to &lt;strong&gt;TRUE.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You want to hide the Wiki template from the&lt;strong&gt; Select a Template &lt;/strong&gt;list:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open&lt;strong&gt; WEBTEMP.XML&lt;/strong&gt; in notepad&lt;br /&gt;&lt;li&gt;Find the tag&lt;strong&gt; TEMPLATE NAME=&amp;quot;Wiki&amp;quot;&lt;/strong&gt;&lt;br /&gt;&lt;li&gt;Find the nested &lt;strong&gt;HIDDEN&lt;/strong&gt; tag.  Change the value to &lt;strong&gt;TRUE.&lt;br /&gt;&lt;br /&gt;&lt;img height=72 alt=wikixml src="http://sharepoint.microsoft.com/blogs/fromthefield/Lists/Posts/Attachments/34/wikixml_2.jpg" width=593 border=0 style='border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;width:593px !important;height:72px !important;padding:0;background:transparent  no-repeat -838px 0;'&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;li&gt;Save the file.&lt;br /&gt;&lt;li&gt;Recycle the relevant application pool or do an &lt;strong&gt;IISRESET.&lt;/strong&gt;&lt;br /&gt;&lt;li&gt;Repeat 1 to 5 on each web front end .&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;This is a farm wide hide so it will make the change everywhere.  It will also hide the template from the Site Collection creation page as well.&lt;br /&gt;&lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-9138153660585244740?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/9138153660585244740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=9138153660585244740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/9138153660585244740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/9138153660585244740'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/03/farm-wide-hiding-site-templates.html' title='Farm wide: Hiding Site Templates'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-8341024890266427298</id><published>2010-02-26T15:33:00.000-08:00</published><updated>2010-02-26T15:33:28.639-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><title type='text'>SharePoint: How to prevent your content from being crawled</title><content type='html'>&lt;div class='snap_preview'&gt;&lt;p&gt;A client of mine did not want parts of their Intranet based on MOSS 2007 to be searched; now that&amp;#8217;s quite easy to do with Crawl rules. As they wanted strict control over the content that can be crawled I trained them on how to control &amp;#8216;the crawl&amp;#8217; behaviour for content within SharePoint.&lt;/p&gt;&lt;p&gt;There are three places within SharePoint where end users can change search visibility setting or exclude content for search.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Change Visibility for a Web site&lt;/strong&gt;: In the Site Settings page, site owners can click the Search Visibility link to go to the Search Visibility page SharePoint. In the Indexing Site Content group, selecting the No option to will exclude all content within the site. The crawler will in turn simply skip the site and not include any of its content in the index.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Exclude Site Columns&lt;/strong&gt;: In the Site Settings page, site owners can click the Searchable Columns link to go to the Search Settings for Fields page in SharePoint. This page will enumerate all the site columns defined at the current site level. Selecting the NoCrawl check box for the site columns will exclude them from future crawls.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Exclude Lists&lt;/strong&gt;: The last option for excluding content exists at the level of the SharePoint list settings. It enables list owners to exclude the list and all the content within it from crawls. In the settings page of the list, click the Advanced Settings link. Selecting the No option under Search Available for crawl tells the crawler to exclude the specific list from a crawl.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Also if there are certain pages or entire site content that site designers don&amp;#8217;t want to be crawled, simply putting the no index directive in the head section of the master page or layout page&amp;#8217;s mark-up will stop the SharePoint crawler from crawling the pages:&lt;/p&gt;&lt;p&gt;&lt;strong&gt; &amp;lt;META NAME=&amp;#8221; ROBOTS&amp;#8221; CONTENT=&amp;#8221; NOHTMLINDEX&amp;#8221;/&lt;/strong&gt;&amp;gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-8341024890266427298?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/8341024890266427298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=8341024890266427298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8341024890266427298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8341024890266427298'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/sharepoint-how-to-prevent-your-content.html' title='SharePoint: How to prevent your content from being crawled'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3895538177290640487</id><published>2010-02-25T11:40:00.000-08:00</published><updated>2010-02-25T11:48:36.633-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UserProfiles'/><title type='text'>Why do my changes not show in other sites?</title><content type='html'>&lt;div class="bodycontent"&gt;&lt;h3&gt;A detailed look at how the Sync works&lt;/h3&gt;&lt;img style="width:900px;height:600px" src="http://img389.imageshack.us/img389/8264/mossuserprofilestx1.jpg"/&gt;&lt;br /&gt;&lt;p&gt;I was asked recently to advise on how to configure a MOSS 2007 installation to allow end users to update their display name as they had previously been able to do in 2003.  My initial thoughts on this were that its a simple update of the profile properties to allow them to edit the Name field,  however the results achieved in testing appeared inconsistent.&lt;/p&gt;&lt;p&gt;In this article I will show&lt;/p&gt;&lt;ul&gt;&lt;li&gt;How to setup the profile properties&lt;/li&gt;&lt;li&gt;What the user sees and can edit&lt;/li&gt;&lt;li&gt;What services/timer jobs are involved in the Sync and how to speed this up for testing&lt;/li&gt;&lt;li&gt;The conditions that need to be met to trigger the profile information to be replicated.&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Setting Up Profile Properties&lt;/h4&gt;&lt;p&gt;The first step is to setup the profile properties.   In this example I will be looking at enabling users to edit the display name (&amp;#8221;PreferredName&amp;#8221;) field.  This example assumes that you have MOSS 2007 and a Shared Service Provider has been setup and configured.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;From Central Admin choose the Shared Service Provider from the left hand menu.  This should display a screen similar to the one below.&lt;/p&gt;&lt;p&gt;&lt;a title="SSP Admin" href="http://www.flickr.com/photos/10785452@N00/2261486208/"&gt;&lt;img src="http://static.flickr.com/2181/2261486208_c417f2f902.jpg" border="0" alt="SSP Admin" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Select the User profiles and properties option as highlighted.   This will allow you to add new properties or as in this example edit an existing property.&lt;/p&gt;&lt;p&gt;&lt;a title="View properties" href="http://www.flickr.com/photos/10785452@N00/2260692331/"&gt;&lt;img src="http://static.flickr.com/2058/2260692331_e24310208a.jpg" border="0" alt="View properties" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Scroll to the bottom of the page and click View profile properties.  On the list of properties select the &lt;strong&gt;Name&lt;/strong&gt; field and choose Edit.&lt;/p&gt;&lt;p&gt;&lt;a title="Edit Name" href="http://www.flickr.com/photos/10785452@N00/2261486298/"&gt;&lt;img src="http://static.flickr.com/2310/2261486298_03a2e05e4b.jpg" border="0" alt="Edit Name" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The profile properties page allows you to configure the profile property.  Ensure that the field selected is the PreferredName field, this has default Display Name of Name.&lt;/p&gt;&lt;p&gt;&lt;a title="PreferredName" href="http://www.flickr.com/photos/10785452@N00/2260692417/"&gt;&lt;img src="http://static.flickr.com/2105/2260692417_4774282692.jpg" border="0" alt="PreferredName" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Check that the field is checked for replication.   You will note that the text suggests that properties that can be replicated cannot be edited by the user, however this does not appear to be the case.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Policy Setting Message Error" href="http://www.flickr.com/photos/10785452@N00/2261486392/"&gt;&lt;img src="http://static.flickr.com/2329/2261486392_be46b10b79.jpg" border="0" alt="Policy Setting Message Error" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Choose Allow users to edit values for this property,  this will allow the user to change the value via MySite.&lt;/p&gt;&lt;p&gt;&lt;a title="Allow Edit" href="http://www.flickr.com/photos/10785452@N00/2260692493/"&gt;&lt;img src="http://static.flickr.com/2389/2260692493_a1cb2eae32.jpg" border="0" alt="Allow Edit" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Change the mapping to &amp;#8216;not mapped&amp;#8217;.  If you do not change this any modification the user makes will be overwritten at the next profile import.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note: When a user firsts accesses a site the User Info is extracted directly from AD (or your provider, not tested) and it still pulls the AD based display name into this field as it is not related to the profile mapping.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a title="Mapping" href="http://www.flickr.com/photos/10785452@N00/2260692569/"&gt;&lt;img src="http://static.flickr.com/2388/2260692569_ce6c40b300.jpg" border="0" alt="Mapping" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;We will look at the different states for the User Info and profile imports below.&lt;/p&gt;&lt;p&gt;The properties page should show the PreferredName field is no longer mapped.&lt;/p&gt;&lt;p&gt;&lt;a title="Profile Import Blank" href="http://www.flickr.com/photos/10785452@N00/2261486576/"&gt;&lt;img src="http://static.flickr.com/2351/2261486576_bf3ab185a3.jpg" border="0" alt="Profile Import Blank" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;That is all of the changes required to make the display name editable by the user.&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;What The User Sees and Can Edit&lt;/h4&gt;&lt;p&gt;When the user navigates to a SharePoint site the initial view will show the information contained in AD (I assume this is the same for other providers but you will need to test) including the display name.&lt;/p&gt;&lt;p&gt;&lt;a title="AD User Info" href="http://www.flickr.com/photos/10785452@N00/2262771106/"&gt;&lt;img src="http://static.flickr.com/2221/2262771106_020ff55c7c.jpg" border="0" alt="AD User Info" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;AD user with defined Display Name, this will be used initially when the user accesses a SharePoint site as shown below.&lt;/p&gt;&lt;p&gt;&lt;a title="Not Active on Team Site" href="http://www.flickr.com/photos/10785452@N00/2261907951/"&gt;&lt;img src="http://static.flickr.com/2180/2261907951_a847fbc242.jpg" border="0" alt="Not Active on Team Site" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To edit the display name navigate to your My Site, this will initially look like the image below,  notice that the Welcome message is not based on the display name from AD but the users account name. &lt;em&gt;In this example I have blurred the domain&lt;/em&gt; &lt;em&gt;name&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;&lt;a title="Default My Site" href="http://www.flickr.com/photos/10785452@N00/2262698326/"&gt;&lt;img src="http://static.flickr.com/2174/2262698326_c2da85ce43.jpg" border="0" alt="Default My Site" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Click on the Details option under the My Profile Quick Launch and edit the Name field.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="New name" href="http://www.flickr.com/photos/10785452@N00/2261908033/"&gt;&lt;img src="http://static.flickr.com/2146/2261908033_e161228711.jpg" border="0" alt="New name" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In order to test this I have used a time stamp so I could repeat the tests and identify what had changed.&lt;/p&gt;&lt;p&gt;Clicking on Save will take you back to the My Site home page and will show some of the fields have updated but others have not.  The fields that have not updated are based on the User Info table and is updated by the Quick Profile Synchronization timer job (see below).&lt;/p&gt;&lt;p&gt;&lt;a title="Initial changes in My Site" href="http://www.flickr.com/photos/10785452@N00/2261908073/"&gt;&lt;img src="http://static.flickr.com/2151/2261908073_3b28c2257d.jpg" border="0" alt="Initial changes in My Site" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The Quick Profile Synchronization timer job is scheduled too run regularly (minutes) but I have found in testing, and this will increase as your number of users and sites increase, it can take a while for the changes to take place.   You can force this timer job by running the STSADM operation SYNC.&lt;/p&gt;&lt;p&gt;stsadm -o sync&lt;/p&gt;&lt;p&gt;&lt;a title="stsadm -o sync" href="http://www.flickr.com/photos/10785452@N00/2262698432/"&gt;&lt;img src="http://static.flickr.com/2120/2262698432_a00467c2e8.jpg" border="0" alt="stsadm -o sync" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Note: this starts the job, the changes will not appear instantly.&lt;/p&gt;&lt;p&gt;After the sync has been performed the User Info table will be updated with the values from the My Profile details.&lt;/p&gt;&lt;p&gt;&lt;a title="New name takes effect" href="http://www.flickr.com/photos/10785452@N00/2262698468/"&gt;&lt;img src="http://static.flickr.com/2075/2262698468_b4303c2b60.jpg" border="0" alt="New name takes effect" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;Why do some Team Sites not update with my details&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;The main reason for confusion around the updating (sync&amp;#8217;ing) of My Profile details into team sites is that it is now based on if the user is Active.   As part of the upgrade to V3 Microsoft introduced the idea of users being active in a site rather than just having access.&lt;/p&gt;&lt;p&gt;When you first visit a site a record is recorded in the UserInfo table of the sites Content Database.   The field tp_IsActive is defaulted to false, which means you have visited but have not interacted with the site.&lt;/p&gt;&lt;p&gt;The Sync process uses this value to determine if the user info should be replicated from the My Profile details as edited above.&lt;/p&gt;&lt;p&gt;Following on from the example above you should be able to refresh your team site that you had only visited and see the user name is still the same, it was not updated when the My Site was updated.&lt;/p&gt;&lt;p&gt;&lt;a title="Not Active on Team Site" href="http://www.flickr.com/photos/10785452@N00/2261907951/"&gt;&lt;img src="http://static.flickr.com/2180/2261907951_a847fbc242.jpg" border="0" alt="Not Active on Team Site" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;If you now interact with the site, either add a document or edit a link,  in effect become an active user of the site, and then run the stsadm -o sync command as above the My Profile changes to the user name will be replicated to the site.&lt;/p&gt;&lt;p&gt;&lt;a title="Test Site Updated" href="http://www.flickr.com/photos/10785452@N00/2261908171/"&gt;&lt;img src="http://static.flickr.com/2039/2261908171_791c6dfa68.jpg" border="0" alt="Test Site Updated" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;Sync Timer Jobs and STSADM&lt;/h4&gt;&lt;p&gt;The synchronisation of the profile properties and information are based on two timer jobs,  and one stsadm command (as used above).  These jobs are per web application so you may see multiple of these configured in your environment.   Access to these is via Centra Admin -&amp;gt; Operations.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Profile Timer Jobs" href="http://www.flickr.com/photos/10785452@N00/2261941809/"&gt;&lt;img src="http://static.flickr.com/2365/2261941809_8a41cddbf3.jpg" border="0" alt="Profile Timer Jobs" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;These timer jobs are part of the &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.office.server.userprofiles.aspx" target="_blank"&gt;Microsoft.Office.Server.UserProfiles&lt;/a&gt; namespace and specifically&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms574025.aspx"&gt;WSSProfileSynch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Handles the synchronization of user profile data in the Windows SharePoint Services user information list on each site, and the synchronization of Windows SharePoint Services members group membership in the user profile memberships. This class is not intended to be used directly from your code; use stsadm.exe instead.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms573592.aspx"&gt;WSSSweepSynch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Handles the incremental synchronization of user profile data in the Windows SharePoint Services user information list on each site. This class is not intended to be used directly from your code; use stsadm.exe instead.&lt;/p&gt;&lt;p&gt;I have yet to determine exactly which of these processes are triggered using the stsadm -o sync command.&lt;/p&gt;&lt;h3&gt;Additional Information&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms563846.aspx" target="_blank"&gt;Profile Synchronisation on MSDN&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Sahil Malik has a good post on the high level information flow within MOSS &lt;a href="http://blah.winsmarts.com/2007-7-MOSS_User_Profile_Info_-_How_the_information_flows.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I have also included below some sample code that I used to try and speed up the timer jobs.   You may want to use these to help understand what each timer job does.   Note, changing the Profile Synchronization schedule will not remain,  another time job appears to reset this to the installed defaults.&lt;/p&gt;&lt;div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] args){ List&amp;lt;System.Uri&amp;gt; urls = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;System.Uri&amp;gt;(); urls.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Uri(&lt;span style="color: #006080;"&gt;&amp;#8220;http://mysite_webapplication&amp;#8221;&lt;/span&gt;)); urls.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Uri(&lt;span style="color: #006080;"&gt;&amp;#8220;http://portal_webapplication&amp;#8221;&lt;/span&gt;)); &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; urls.Count; i++) { SPWebApplication webApp = SPWebApplication.Lookup(urls[i]); &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (SPJobDefinition job &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; webApp.JobDefinitions) { &lt;span style="color: #008000;"&gt;// &amp;#8220;profsynch&amp;#8221; = Profile Syncronisation&lt;/span&gt; &lt;span style="color: #008000;"&gt;// &amp;#8220;sweepsync&amp;#8221; = Quick Profile Syncronisation&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (job.Name == &lt;span style="color: #006080;"&gt;&amp;#8220;profsynch&amp;#8221;&lt;/span&gt;) { SPMinuteSchedule schedule = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SPMinuteSchedule(); schedule.BeginSecond = 0; schedule.EndSecond = 59; schedule.Interval = 1; job.Schedule = schedule; job.Update(); Console.WriteLine(&lt;span style="color: #006080;"&gt;&amp;#8220;Temporarily Updated Profile Sync for Web Application {0}&amp;#8221;&lt;/span&gt;, webApp.Name); } } } Console.ReadLine();}&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Error and Omissions&lt;/h3&gt;&lt;p&gt;Warning: Access to the database directly is not supported, I performed this in my test environment to understand why things worked the way they did.&lt;/p&gt;&lt;p&gt;Using a famous Todd Bleeker line from TechEd Orlando &amp;#8211; I reserve the right to be wrong! This is what I have found so far, but my knowledge and understanding of this may change over time.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3895538177290640487?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3895538177290640487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3895538177290640487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3895538177290640487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3895538177290640487'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/why-do-my-changes-not-show-in-other.html' title='Why do my changes not show in other sites?'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-837406277968011663</id><published>2010-02-25T10:54:00.000-08:00</published><updated>2010-02-25T11:01:39.749-08:00</updated><title type='text'>Everything about SharePoint UserProfiles</title><content type='html'>&lt;p&gt;There are two kinds of User Profile information stored within SharePoint. One is &lt;strong&gt;WSS Profile&lt;/strong&gt; which gets stored in UserInfo table in the content database for each site collection.The other is &lt;strong&gt;MOSS Profile&lt;/strong&gt; which gets stored in SSP database and that gets sync with AD at regular intervals by Profile Synchronisation job. There are two profile sync jobs &lt;br /&gt;&lt;ol&gt;&lt;li&gt;The &lt;span class="codeInline"&gt;profsynch&lt;/span&gt; (Profile Synchronization) timer job which runs every hour&lt;/li&gt;&lt;li&gt;The &lt;span class="codeInline"&gt;sweepsync&lt;/span&gt; (Quick Profile Synchronization) timer job which runs each minute&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;To run the Profile sync jobs yourself you can execute below command.&lt;br /&gt;&lt;strong&gt;stsadm -o sync&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;   -excludewebapps &amp;lt;Web applications&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;   -synctiming &amp;lt;schedule&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;   -sweeptiming &amp;lt;schedule&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;   -listolddatabases &amp;lt;days&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;   -deleteolddatabases &amp;lt;days&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;   -IgnoreIsActive &amp;lt;0/1&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3 class="subHeading"&gt;Parameters&lt;/h3&gt;&lt;div class="subSection"&gt;&lt;div class="labelheading"&gt;&lt;strong&gt;&lt;!----&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="tableSection"&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;Parameter&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;Value&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;Required?&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;Description&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="parameter"&gt;excludewebapps&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;A valid URL, such as "http://&lt;em&gt;server_name&lt;/em&gt;"&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Comma-delimited list of Web application URLs to exclude from consideration in the synchronization process. The values specified delete any existing values set.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="parameter"&gt;synctiming&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Sets the schedule for the main synchronization job. "M" denotes every &lt;em&gt;n&lt;/em&gt; minutes (for example, “m:5” means every 5 minutes). "H" denotes every &lt;em&gt;n&lt;/em&gt; hours (for example, “h:1” means every 1 hour). "D" denotes the number of times per day (for example, “D:3” means three times per day).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The default is once per hour.&lt;/p&gt;&lt;br /&gt;&lt;div class="alert"&gt;&lt;div class="mtps-table"&gt;&lt;div class="mtps-row"&gt;&lt;span class="mtps-th"&gt;&lt;!--src=[../local/note.gif]--&gt;&lt;img alt="Note" src="http://i.technet.microsoft.com/Cc263196.note(en-us,office.12).gif" /&gt;&lt;strong&gt;Note: &lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="mtps-row"&gt;&lt;span class="mtps-cell"&gt;&lt;br /&gt;&lt;span&gt;You can use the SPSchedule.FromString() string method to pass in the strings, “every 5 minutes” or “weekly xxxxxxx”. For additional information about the SPSchedule.FromString method, see &lt;a id="ctl00_MTCS_main_ctl03" href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.spschedule.fromstring.aspx" onclick="javascript:Track('ctl00_MTCS_main_ctl01|ctl00_MTCS_main_ctl03',this);"&gt;SPSchedule.FromString method&lt;/a&gt; (http://go.microsoft.com/fwlink/?LinkId=85966&amp;amp;clcid=0x409).&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="parameter"&gt;sweeptiming&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;A valid time value in the form of minutes, such as "1"&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Performs the same tasks as the &lt;strong&gt;synctiming&lt;/strong&gt; parameter. However, the &lt;strong&gt;sweeptiming&lt;/strong&gt; parameter sets the schedule for the “sweep” job. The sweep job is driven by the Windows SharePoint Services 3.0 change log and is used as a lightweight way to capture new users added. For example, you might have a fully synchronized site, but then a user is added to the site. The sweep job ensures that the incremental newly added user gets the user profile properties replicated quickly.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The default value is every 1 minute.&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="parameter"&gt;listolddatabases&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;A valid number of days, such as "2"&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Lists content databases that have not been synchronized since &lt;em&gt;n&lt;/em&gt; days. The presumption is that they have been deleted or moved.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="parameter"&gt;deleteolddatabases&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;A valid number of days&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Performs the same operation as the &lt;strong&gt;listolddatabases&lt;/strong&gt; parameter, except it deletes old records corresponding to these databases. It does not delete the databases themselves.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="parameter"&gt;IgnoreIsActive&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;Boolean 0 or 1(Default 0)&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;p&gt;The IgnoreIsActive flag allows you to choose which profiles to sync. By default, only the active profiles in a content database get sync'ed. An active profile is one of a user who has contributed something to the site. If you want to sync all users in the site, you can choose to trigger the execution of the sync job via STSADM with the IgnoreIsActive flag set to 1, and it will sync every profile.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;This is something that a few people know about but a lot of people don&amp;#8217;t so I thought I would take a few minutes to explain it. As most of you will know, WSS and MOSS are two seperate products, with MOSS extending WSS. User profile management is a MOSS feature that you get in your Shared Service Provider, which means that WSS won&amp;#8217;t have it. To keep track of users in WSS each user will have a user profile that exists in each site collection (this is called the WSS profile). So what this means for a MOSS implementation is that your users will have at least two user profiles, a WSS user profile for each site collection they are a member of, as well as the main user profile that is stored in the SSP (the MOSS user profile).&lt;/p&gt;&lt;p&gt;The thing that sorta confused me with this though is that the two don&amp;#8217;t instantly sync up. If you make a change in Active Directory and let the SSP import the new data, you will immediately see the change in the MOSS profile (so in the SSP and the user My Site) but you will not see it in the WSS profiles for the user (which you can see by browsing to a site and choose &amp;#8220;My Settings&amp;#8221; in the user menu). MOSS does have a timer job that will run to do this synchronisation but I&amp;#8217;m not too sure how often it is meant to run.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;However I did find a &lt;a href="http://sharepointnotes.wordpress.com/2008/05/05/syncing-wss-and-moss-user-profile-properties-with-active-directory/"&gt;great post&lt;/a&gt; that talked about the issues with having the multiple profile sources, as well as how to fix it. Basically you can use the &amp;#8220;stsadm -o sync&amp;#8221; command to increase the schedule of a timer job that does the synchronisation of the details between the SSP and the site collections. I did that and got it updating great. So perhaps what would be a good idea would be to set this to run as often as your user profile imports are running from the AD, to ensure that when new information is sucked in from the AD it gets updated in your site collections. But definitely read that blog post, its got a lot of good information.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-837406277968011663?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/837406277968011663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=837406277968011663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/837406277968011663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/837406277968011663'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/everything-about-sharepoint.html' title='Everything about SharePoint UserProfiles'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-1190028990094597538</id><published>2010-02-25T09:10:00.001-08:00</published><updated>2010-02-25T09:10:47.125-08:00</updated><title type='text'>Quick Launch Bar Navigation Missing From Web Part Pages in SharePoint</title><content type='html'>&lt;p&gt;It&amp;#39;s rather disturbing that the Left Side Navigation (Quick Launch) by default, does not display on new web part pages created in SharePoint. There are a number of workarounds on the web which include &lt;a class="" href="http://jetlounge.net/blogs/teched/archive/2008/03/14/missing-side-navigation-on-new-pages-in-moss.aspx"&gt;hacking each newly created page&lt;/a&gt;, or hacking an existing document template.&lt;/p&gt;&lt;p&gt;I like to use this approach, which modifies only the master page (inherited by each web part page). I only need to touch one file and be&amp;nbsp;done with it.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;In SharePoint Designer, find your master page.&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;Find the line :&lt;br /&gt;&lt;strong&gt;&amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderLeftNavBar&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt; &lt;/strong&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;Directly beneath it add:&lt;br /&gt;&amp;nbsp; &lt;strong&gt;&amp;lt;/asp:ContentPlaceHolder&amp;gt;&lt;/strong&gt; &lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;Find the real closing &amp;nbsp; &amp;lt;/asp:ContentPlaceHolder&amp;gt;&amp;nbsp; element and remark it out like&lt;br /&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;lt;!-- &amp;nbsp; &amp;lt;/asp:ContentPlaceHolder&amp;gt;&amp;nbsp; --&amp;gt;&lt;/strong&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;Find the line:&lt;br /&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderNavSpacer&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/strong&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;Directly after it add:&lt;br /&gt;&amp;nbsp;&lt;strong&gt; &amp;lt;/asp:ContentPlaceHolder&amp;gt; &lt;/strong&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;Find the real closing tag and remark it out&lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;!-- &amp;nbsp; &amp;lt;/asp:ContentPlaceHolder&amp;gt;&amp;nbsp; --&amp;gt;&lt;/strong&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div&gt;Save the file&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Essentially, we&amp;#39;re letting HTML render the Quick Launch control on each page rather than let ASP manage it for us from the server. It&amp;#39;s no longer conditional.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-1190028990094597538?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/1190028990094597538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=1190028990094597538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/1190028990094597538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/1190028990094597538'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/quick-launch-bar-navigation-missing.html' title='Quick Launch Bar Navigation Missing From Web Part Pages in SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-6026380326772410466</id><published>2010-02-24T12:05:00.000-08:00</published><updated>2010-02-24T12:05:09.399-08:00</updated><title type='text'>stsadm export/import vs Backup/Restore vs ExportWeb</title><content type='html'>There are 4 ways to Backup/Restore different sharepoint entities.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;stsadm export/import:&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;You can import single web(including all subwebs) using export method.&amp;nbsp;&lt;/li&gt;&lt;li&gt;It can also export sitecollection and webapplication as well.&lt;/li&gt;&lt;li&gt;It exports data using Object Model and generated new GUID for every object.&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;It does not copy any information related to workflows. If import creates new lists and a workflow was associated to them, you must recreate it manually. Additionally, it does not copy workflow history and tasks lists.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;You can run import operation on the same content database from which the export of the web was done as all the GUIDs are generated again, which you can't do in backup/restore.&lt;/li&gt;&lt;li&gt;It also activates all the features.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;ExportWeb method(sites.asmx web service Object Model):&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;You should use this method if you would want to backup only single subweb without any child subwebs.&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span id="ctl00_MTCS_main_ctl15_ctl00_ctl02"&gt;&lt;pre class="libCScode" id="ctl00_MTCS_main_ctl15_ctl00_ctl02_code" space="preserve"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ExportWeb (&lt;span style="color: blue;"&gt;string&lt;/span&gt; jobName,&lt;br /&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; webUrl,&lt;br /&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; dataPath,&lt;br /&gt;    &lt;span style="color: blue;"&gt;bool&lt;/span&gt; includeSubwebs,&lt;br /&gt;    &lt;span style="color: blue;"&gt;bool&lt;/span&gt; includeUserSecurity,&lt;br /&gt;    &lt;span style="color: blue;"&gt;bool&lt;/span&gt; overWrite,&lt;br /&gt;    &lt;span style="color: blue;"&gt;int&lt;/span&gt; cabSize)&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span id="ctl00_MTCS_main_ctl15_ctl00_ctl02"&gt;&lt;pre class="libCScode" id="ctl00_MTCS_main_ctl15_ctl00_ctl02_code" space="preserve"&gt;&lt;span&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;u&gt;&lt;span class="parameter"&gt;Parameters:&lt;/span&gt;&lt;/u&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dt&gt;&lt;span class="parameter"&gt;jobName&lt;/span&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;The file name to use for content migration packages. &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;webUrl&lt;/span&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;The URL of the site to export.&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;dataPath&lt;/span&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;The directory location where content migration packages are placed.&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;includeSubwebs&lt;/span&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;strong&gt;true&lt;/strong&gt; to include subwebs; otherwise, &lt;strong&gt;false&lt;/strong&gt;.&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;includeUserSecurity&lt;/span&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;strong&gt;true&lt;/strong&gt; to include site security groups and group membership information; otherwise, &lt;strong&gt;false&lt;/strong&gt;. &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;overWrite&lt;/span&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;strong&gt;true&lt;/strong&gt; to overwrite the content migration package if it exists; otherwise, false. &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;cabSize&lt;/span&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Indicates the maximum size for the CMP (content migration package) file. &lt;/dd&gt;&lt;/dl&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="libCScode" id="ctl00_MTCS_main_ctl15_ctl00_ctl02_code" space="preserve"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="libCScode" id="ctl00_MTCS_main_ctl15_ctl00_ctl02_code" space="preserve"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;Content Deployment&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Content deployment&lt;/em&gt; copies content from a source Microsoft Office SharePoint Server 2007 site collection to a destination site collection. The entire source site collection can be copied (full), or a subset of sites can be copied (incremental). In either case, content deployment is incremental by default, deploying only changed pages and related assets (such as images). You can also do a full deployment of all content; however, you should only run a full deployment job on an empty site collection. Also, a Quick Deploy feature supports deployment of a single page by authors.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;Central Admin Backup/Restore(stsadm -backup/-restore):&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;You can backup sitecollection,webapplication,farm using this.&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;It keeps every GUIDs except one (and the most important): when you restore the file, it generates a new GUID for the site collections.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This was done on purpose because Sites table of configuration database uses SiteID as primary key. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This is very important because it allows you to restore the backup in the same farm in which you did the backup. You can even restore the same backup several times in the same farm, but you must always restore in a different content database, because all others GUIDs remain unchanged.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This operation is probably more designed for SharePoint administrators that want to backup data. Because it does not do anything else than dumping the SQL content database, dministrators can be sure no data will be changed, transformed or lost.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;span style="color: black; font-family: 'Arial','sans-serif'; font-size: 10pt;"&gt;Any Custom solutions deployed (be sure to keep the solutions so they can be easily re-deployed)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;. &lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Alternate access mappings&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span&gt;&lt;span style="font-family: 'Times New Roman'; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Arial','sans-serif'; font-size: 10pt;"&gt;The Central Administrator Web Application&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span&gt;&lt;span style="font-family: 'Times New Roman'; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Arial','sans-serif'; font-size: 10pt;"&gt;The Central Administrator content database&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span&gt;&lt;span style="font-family: 'Times New Roman'; font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Arial','sans-serif'; font-size: 10pt;"&gt;The Internet Information Services metabase&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-6026380326772410466?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/6026380326772410466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=6026380326772410466' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/6026380326772410466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/6026380326772410466'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/stsadm-exportimport-vs-backuprestore-vs.html' title='stsadm export/import vs Backup/Restore vs ExportWeb'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3192209340313354441</id><published>2010-02-19T12:40:00.000-08:00</published><updated>2010-02-19T12:40:11.158-08:00</updated><title type='text'>Code Access Security and SharePoint</title><content type='html'>Hi,&lt;br /&gt;Don't change the trust level to Full in web.config and deploy your web parts to GAC as it is not recommended practise in most of the cases. Instead you should create CAS policy.&lt;br /&gt;&lt;br /&gt;Example to add a CAS Policy for a sample WebPart.&lt;br /&gt;&lt;br /&gt;Strong name the webpart and find out it's public key blob using sn -Tp assembly name.&lt;br /&gt;&lt;br /&gt;Then in manifest.xml file for the Solution(WSP) put following entry.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:blue;font-size:75%;margin-left:25px;padding:10px;border:2px solid navy;background-color:#eee;font-family:'Courier New'"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;Solution&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff0000"&gt;SolutionId&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;b172f003-d6c7-3e13-f737-a5d84a02e3e5&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/sharepoint/"&gt;http://schemas.microsoft.com/sharepoint/&lt;/a&gt;&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;div style="margin-left:12px"&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;!--&lt;font color="#008000"&gt;Solution &lt;br /&gt;created by InstallAssemblies.exe on 8/15/2006 7:03:53 PM&lt;/font&gt;--&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;Assemblies&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;Assembly&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;MyCustomWebParts.dll&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;DeploymentTarget&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;WebApplication&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;ClassResources&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;ClassResource&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;MyCustomWebParts.pdb&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;br /&gt;/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;ClassResource&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;en\two\generic.txt&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;ClassResource&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;de\two\specific.txt&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;ClassResource&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;header.html&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;ClassResources&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;SafeControls&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;SafeControl&lt;/font&gt; &lt;font color="#ff0000"&gt;Assembly&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;MyCustomWebParts, &lt;br /&gt;	&lt;font style="color:#ff0000"&gt;version&lt;/font&gt;=1.0.0.0, Culture=neutral, PublicKeyToken=636addc00401d15b&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Namespace&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;Example.CodeAccessSecurity&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;TypeName&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;*&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;SafeControls&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;Assembly&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;Assemblies&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;DwpFiles&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;DwpFile&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;StandardAspNetWebPart.webpart&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;DwpFile&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;HybridWSSWebPart.webpart&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;DwpFile&lt;/font&gt; &lt;font color="#ff0000"&gt;Location&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;StandardWSSWebPart.dwp&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;DwpFiles&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="background-color:#FFFFCC;font-size:110%;border:thin red dotted;padding:10px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;CodeAccessSecurity&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;PolicyItem&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;PermissionSet&lt;/font&gt; &lt;font style="color:#ff0000"&gt;class&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;NamedPermissionSet&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	version&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;1&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font style="color:#ff0000"&gt;Description&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;Permission &lt;br /&gt;set for custom test WebParts&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;IPermission&lt;/font&gt; &lt;font style="color:#ff0000"&gt;class&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;AspNetHostingPermission&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	version&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;1&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Level&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;Minimal&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;IPermission&lt;/font&gt; &lt;font style="color:#ff0000"&gt;class&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;SecurityPermission&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	version&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;1&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Flags&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;Execution&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;IPermission&lt;/font&gt; &lt;font style="color:#ff0000"&gt;class&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;Microsoft.SharePoint.Security.SharePointPermission, &lt;br /&gt;Microsoft.SharePoint.Security, &lt;font style="color:#ff0000"&gt;version&lt;/font&gt;=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	version&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;1&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;ObjectModel&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;True&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;IPermission&lt;/font&gt; &lt;font style="color:#ff0000"&gt;class&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;System.Net.WebPermission, &lt;br /&gt;System, version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	version&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;1&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;ConnectAccess&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;URI&lt;/font&gt; &lt;font color="#ff0000"&gt;uri&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;https?://.*&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;ConnectAccess&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;IPermission&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;IPermission&lt;/font&gt; &lt;font style="color:#ff0000"&gt;class&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;System.Security.Permissions.SecurityPermission, &lt;br /&gt;mscorlib, version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	version&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;1&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Flags&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;ControlThread, &lt;br /&gt;UnmanagedCode&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;IPermission&lt;/font&gt; &lt;font style="color:#ff0000"&gt;class&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;System.Security.Permissions.EnvironmentPermission, &lt;br /&gt;mscorlib, version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	version&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;1&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Read&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;UserName&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;br /&gt;/&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;PermissionSet&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;Assemblies&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left:12px"&gt;&lt;div&gt;&amp;lt;&lt;font color="#800000"&gt;Assembly&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;br /&gt;	PublicKeyBlob&lt;/font&gt;=&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt;hexadecimalValueTruncatedForClarity&lt;font style="color:black"&gt;&amp;quot;&lt;/font&gt; &lt;br /&gt;/&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;Assemblies&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;PolicyItem&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;CodeAccessSecurity&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/&lt;font color="#800000"&gt;Solution&lt;/font&gt;&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="color:#000080"&gt;&lt;strong&gt;&lt;a name=SchemaRules&gt;Schema rules:&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;	&lt;li&gt;There can only be 1 CodeAccessSecurity node per Solution manifest.&lt;/li&gt;	&lt;li&gt;There can be any number of PolicyItem nodes.&lt;/li&gt;	&lt;li&gt;Each PolicyItem node can contain only 1 PermissionSer and Assemblies &lt;br /&gt;	node.&lt;/li&gt;	&lt;li&gt;Each PermissionSet node can contain any number of IPermission nodes &lt;/li&gt;	&lt;li&gt;Schema of IPermission nodes are defined by the .NET framework&lt;/li&gt;	&lt;li&gt;Each Assemblies node can contain any number of Assembly nodes.&amp;nbsp;&lt;br /&gt;	&lt;/li&gt;	&lt;li&gt;The CodeAccessSecurity/PolicyItem/Assemblies/Assembly node is different &lt;br /&gt;	than the Solution/Assemblies/Assembly node.&lt;/li&gt;	&lt;li&gt;The Assembly node can contain any of the following attributes:&lt;ul&gt;		&lt;li&gt;Name&lt;/li&gt;		&lt;li&gt;Version &lt;/li&gt;		&lt;li&gt;PublicKeyBlob&lt;/li&gt;	&lt;/ul&gt;	&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3192209340313354441?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3192209340313354441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3192209340313354441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3192209340313354441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3192209340313354441'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/code-access-security-and-sharepoint.html' title='Code Access Security and SharePoint'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-9149501353467751247</id><published>2010-02-19T07:43:00.001-08:00</published><updated>2010-02-19T07:43:57.655-08:00</updated><title type='text'>SharePoint - Register an assembly as a safe control in the Web.config file</title><content type='html'>&lt;div class="BlogPostContent"&gt;      &lt;p&gt;In order for you to use your own custom assembly with your web parts and other little bits, you will need to add your safe control to the web.config file.&amp;#160; However, you need to think &amp;quot;WEB FARM&amp;quot; with many servers hosting the web application so I will show you a couple ways to do this.&lt;/p&gt;&lt;h2&gt;The entry in the web.config&lt;/h2&gt;&lt;p&gt;You need to place a SaveControl element entry into the web.config file of the web application.&amp;#160; The entry looks like the following:&lt;/p&gt;&lt;div&gt;&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SharePoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeControls&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeControl&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Assembly&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;[Assembly Name]&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Namespace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;[Namespace]&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;TypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Safe&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeControls&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;SharePoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;/div&gt;&lt;/div&gt;&lt;strong&gt;Assembly &lt;/strong&gt;The name of your assembly needs to added to this section. Although you can simply type the name of the DLL hosting the control into the Assembly element, it is important to not that this is not the recommended practice.&amp;#160; Rather, use a full four part name; i.e. [assembly], version=[version], culture=[culture], publickeytoken=[publickeytoken]&lt;strong&gt;Namespace &lt;/strong&gt;The namespace that your web controls are in.&amp;#160; If you have your controls in multiple namespaces, you will need to add one &amp;lt;SafeContol ...&amp;gt; element for each control.&lt;strong&gt;TypeName &lt;/strong&gt;The name of the web control which is allowed to be executed with the SharePoint web application.&amp;#160; Should your namespace have multiple web controls, you do not need to register each control.&amp;#160; You can simply use * (asterisk) to indicate the dll.&lt;strong&gt;Safe &lt;/strong&gt;A boolean flag, indicating whether the control is treated as safe (true) or unsafe (false). AllowRemoteDesignerA boolean flag, indicating whether the control can be loaded by a remote designer, such as SharePoint Designer. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Sample&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeControl&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Assembly&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Brett.DemoParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f03e5f7a44d50a3a&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;Namespace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Brett.SharePoint.WebParts&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;TypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;Safe&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;AllowRemoteDesigner&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Methods of updating the web.config file&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;There are three ways you can update the web.config file,&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;  &lt;li&gt;Manually adding the SafeControl to the web.config &lt;/li&gt;  &lt;li&gt;Adding the SafeControl to the web.config with code &lt;/li&gt;  &lt;li&gt;Deploy the assembly using a solution package &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Manually editing the web.config &lt;font color="#ff8040"&gt;(bad)&lt;/font&gt;&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;This approach may sound the easiest and quickest way as you simply open up your favourite xml editor, find the &amp;lt;SafeControls&amp;gt; element and add your own control into it.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff8000"&gt;WARNING! &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;If you do it this way, you are looking for trouble in a farm as you will need to remember to change the web.config modification for all your servers in the farm as well as all the web applications on the farm that use the custom control.&amp;#160; So should you have a really awsome web part that is used within 5 web applications hosted on your farm of 3 servers, you will need to make the modification to 15 web.config&amp;#39;s .. have fun.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Also should you add a new server to your farm, please remember to add the entry the web.config.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Bottom line, this is the worst possible way you can do it&amp;#160; and stay away from doing it this way &lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Adding the SafeControl to the web.config with code &lt;font color="#0080ff"&gt;(good)&lt;/font&gt;&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;SharePoint provides a class called SPWebConfigModification which has a set of modification commands in a collection.&amp;#160; These modification commands are applied to the default web.config of the Web Application.&amp;#160; These configuration modification commands will also be added and applied to all servers in a farm.&amp;#160;&amp;#160; Finally, should a new server be added to the farm, these modifications will also be applied.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The following code could be added to the FeatureActivated override method in your feature that deploys the web part.&lt;/p&gt;&lt;br /&gt;&lt;div&gt;  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; FeatureActivated(SPFeatureReceiverProperties properties) &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// A reference to the features Site Collection&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     SPSite site = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// Get a reference to the Site Collection of the feature&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (properties.Feature &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; SPWeb)&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     { site = ((SPWeb)properties.Feature.Parent).Site; }&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (properties.Feature.Parent &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; SPSite)&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     { site = properties.Feature.Parent &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; SPSite; }&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (site != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         SPWebApplication webApp = site.WebApplication;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Create a modification&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;         SPWebConfigModification mod = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SPWebConfigModification(&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;             &lt;span style="color:#006080;"&gt;&amp;quot;SafeControl[@Assembly=\&amp;quot;MyAssembly\&amp;quot;][@Namespace=\&amp;quot;My.Namespace\&amp;quot;]&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;                 + &lt;span style="color:#006080;"&gt;&amp;quot;[@TypeName=\&amp;quot;*\&amp;quot;][@Safe=\&amp;quot;True\&amp;quot;][@AllowRemoteDesigner=\&amp;quot;True\&amp;quot;]&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;             , &lt;span style="color:#006080;"&gt;&amp;quot;/configuration/SharePoint/SafeControls&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;             );&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Add the modification to the collection of modifications&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;         webApp.WebConfigModifications.Add(mod);&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Apply the modification&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;         webApp.Farm.Services.GetValue&amp;lt;SPWebService&amp;gt;().ApplyWebConfigModifications();&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt; }&lt;/pre&gt;  &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Deploy the assembly using a solution package &lt;font color="#008000"&gt;(best)&lt;/font&gt;&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;The preferred way to provision your features, web parts and assemblies is by creating a Solution Package (.wsp file).&amp;#160; You will add add your assembly, the manifest.xml file and all your other components and resources into the cabinet. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;You will need to add the following entry into the manifest.xml&lt;/p&gt;&lt;br /&gt;&lt;div&gt;  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Solution&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;SolutionId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{1E0FDA58-6611-423a-92EC-8E7355810CEE}&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;FeatureManifests&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ApplicationResourceFiles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;CodeAccessSecurity&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DwpFiles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Resources&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;RootFiles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SiteDefinitionManifests&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TemplateFiles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;   &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Assemblies&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Assembly&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DeploymentTarget&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;WebApplication&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Location&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Brett.DemoParts.dll&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;          &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeControls&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeControl&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Assembly&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Brett.DemoParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f03e5f7a44d50a3a&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;                          &lt;span style="color:#ff0000;"&gt;Namespace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LitwareWebParts&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;                          &lt;span style="color:#ff0000;"&gt;TypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;                          &lt;span style="color:#ff0000;"&gt;Safe&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;                         &lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;                          &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;          &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeControls&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Assembly&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Assemblies&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Solution&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;&amp;#160; &lt;/pre&gt;  &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Key highlights&lt;/p&gt;&lt;strong&gt;DeploymentTarget &lt;/strong&gt;The depoloyment target is location where the assembly will be copied to and can ether be the bin folder of the WebApplication or it could be the GlobalAssemblyCache (GAC)&lt;strong&gt;Location &lt;/strong&gt; The location of the assembly within the cabinet file. &lt;strong&gt;SafeControl &lt;/strong&gt; A SafeControl element entry as described at the beginning of the post.&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Using this method, your assembly will be correctly deployed the servers in the farm as well as added to the safe controls of the web application.&amp;#160; Again any new server added to the farm will automatically get all the solution packages deployed.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-9149501353467751247?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/9149501353467751247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=9149501353467751247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/9149501353467751247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/9149501353467751247'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/sharepoint-register-assembly-as-safe.html' title='SharePoint - Register an assembly as a safe control in the Web.config file'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5218186021728717767</id><published>2010-02-18T13:48:00.000-08:00</published><updated>2010-02-18T13:48:47.813-08:00</updated><title type='text'>Site Pages &amp; PageParserPath</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;You can have two kind of Site Pages.&lt;br /&gt;1. Uncustomized(Ghosted) which resides in the file system.&lt;br /&gt;2. Customized which are stored in the Content Database.&lt;br /&gt;&lt;br /&gt;UnCustomized Pages can be created using visual studio and can be deployed using features.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Sample ASPX Page&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ Page Language="C#" MasterPageFile="~masterurl/default.master" meta:progid="SharePoint.WebPartPage.Document" Inherits="CustomizedPageLibrary.PageTemplate,CustomizedPageLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa90fd1d7c28abf3" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:Content ID="Content2" runat="server" ContentPlaceHolderID="PlaceHolderMain"&amp;gt;&lt;br /&gt;&amp;lt;asp:Label ID="lblHello" runat="server" BackColor=Red&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;&amp;lt;asp:Button ID="btnHello" runat="server" OnClick="btnHello_Click"/&amp;gt;&lt;br /&gt;&amp;lt;/asp:Content&amp;gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;&amp;nbsp;Code Behind&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Create a class library project and add System.Web and Microsoft.SharePoint.Publishing dll references.&lt;br /&gt;Then add following class and strong name the dll.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using Microsoft.SharePoint.Publishing;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;&lt;br /&gt;namespace CustomizedPageLibrary&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class PageTemplate : PublishingLayoutPage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected System.Web.UI.WebControls.Label lblHello;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected Button btnHello;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void Page_Load(object sender, EventArgs e)&lt;br /&gt;&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; lblHello.Text = "Hello1";&lt;br /&gt;&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; protected void btnHello_Click(object sender, EventArgs e)&lt;br /&gt;&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; lblHello.Text = "Hello" + DateTime.Now.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Install the assembly in the GAC&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;To deploy the site page into &lt;/b&gt;&lt;b&gt;the site's Shared Documents library&lt;/b&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;feature.xml&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Feature xmlns="http://schemas.microsoft.com/sharepoint/"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id="597D8309-C964-48ef-8D24-D5C60C94A832"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title="MSDN Uncustomized Page Feature"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scope="Web"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;ElementManifests&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ElementManifest Location="elements.xml"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ElementFile Location="PageTemplate.aspx" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/ElementManifests&amp;gt;&lt;br /&gt;&amp;lt;/Feature&amp;gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;elements.xml&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Module Url="Shared Documents"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;File Url="PageTemplate.aspx" Name="SamplePage.aspx" Type="GhostableInLibrary" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Module&amp;gt;&lt;br /&gt;&amp;lt;/Elements&amp;gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Note: If you don't want to deploy it to Some doclib then you can use Type="Ghostable" as well.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Customized Pages&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;The aspx file above can be uploaded into some document library and the page is ready to be used if you don't have any inline code or any server side code to execute. If you want to execute some serverside code then you need to add following entry in the web.config in &amp;lt;PageParserPaths&amp;gt; element. Any page in the content database that needs to execute server side code needs to have the PareParserPath entry in web.config file.&lt;br /&gt;&lt;br /&gt;&amp;lt;PageParserPaths&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PageParserPath VirtualPath="/Shared Documents/*" CompilationMode="Always"&lt;br /&gt;AllowServerSideScript="true" IncludeSubFolders="true"/&amp;gt;&lt;br /&gt;&amp;lt;/PageParserPaths&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5218186021728717767?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5218186021728717767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5218186021728717767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5218186021728717767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5218186021728717767'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/02/site-pages-pageparserpath.html' title='Site Pages &amp; PageParserPath'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-2793266449999891490</id><published>2010-01-26T08:05:00.001-08:00</published><updated>2010-01-26T08:05:17.421-08:00</updated><title type='text'>Move SiteCollections between WebApplications</title><content type='html'>&lt;div class="ms-PostBody"&gt;&lt;div dir=""&gt;&lt;div class=ExternalClassDC887BCE44BF43FC91274F0611C22A1F&gt;&lt;p&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;edit: Please read &lt;/font&gt;&lt;/em&gt;&lt;a href="/blog/Lists/Posts/Post.aspx?ID=116"&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;this blog post&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font color="#ff0000"&gt; before using 'mergecontentdb' data corruption may occur&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;On multiple occasions as a SharePoint administrator I have needed to move a Site Collection from one Content Database to another one. In the past this process was very painful and very manual. In this blog post I will show you how to move Site Collections between Content Databases with a single STSADM command using the &amp;quot;mergedbs&amp;quot; operation that was introduced in &lt;a href="http://support.microsoft.com/kb/934525"&gt;KB934525&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Why would I need to move a Site Collection to a different Content DB? This comes up for a variety of reasons. For instance, because of restore times, I like to keep my databases under a certain size. While I try to work with my Site Collections owners to plan accordingly sometimes they grow larger than we had imagined. When this happens I need to shuffle Site Collections around to keep my databases in harmony. There are other times when I would do it if it were more convenient. If Site Collections are not growing as expected, I may want to consolidate several into a smaller Content DB. I may also want to move less active Site Collections to Content DBs on slower discs, or move Site Collections to Content DBs that reflect geographic regions. Whatever the reason, in the past to move a Site Collection you had to go through the following steps manually; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Lock the Site Collection &lt;/li&gt;&lt;li&gt;Back the Site Collection up &lt;/li&gt;&lt;li&gt;Delete the Site Collection &lt;/li&gt;&lt;li&gt;Set all your Content Databases' maximum allowed sites to the number of current sites. &lt;/li&gt;&lt;li&gt;Set the Content Database you want the Site Collection to go into to allow one more Site Collection. &lt;/li&gt;&lt;li&gt;Restore the Site Collection &lt;/li&gt;&lt;li&gt;Unlock the Site Collection &lt;/li&gt;&lt;li&gt;Adjust your Content Database maximums to allow new sites to be created. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;All of these steps could be done with STSADM so you could build scripts and move through the process quickly. In one of the recent security patches (&lt;a href="http://support.microsoft.com/kb/934525"&gt;KB934525&lt;/a&gt;) for WSS and MOSS Microsoft slipped in a new STSADM operation, mergecontentdbs. I assume this operation was added with the intention of merging Content DBs, but it can also be used to split them. This blog post will walk you through both uses. Let's start with the configuration below: &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="/blog/Blog%20pictures/112007_0451_MoveSiteCol1.png"&gt; &lt;/p&gt;&lt;p&gt;You can see in this screenshot that I have three Site Collections in two Content DBs; WSSContent and WSSContent2. Let's move http://barcelona/sites/stsadm from WSS_Content to WSS_Content2. If you get the help for the mergecontentdbs operation it looks like this: &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="/blog/Blog%20pictures/112007_0451_MoveSiteCol2.png"&gt; &lt;/p&gt;&lt;p&gt;We want to use operation 3, Read from file. STSADM has given us a clue about the file needed, it is generated from stsadm –o enumsites. I'll go ahead and run that and pipe it to a file like this: &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="/blog/Blog%20pictures/112007_0451_MoveSiteCol3.png"&gt; &lt;/p&gt;&lt;p&gt;This will produce a file, mysites.xml, that contains my site collections. To move http://barcelona/sites/stsadm we'll remove all of the other Site Collections except for that one from mysites.xml and save it. You don't need to worry about changing the Site Count at the top, or any of the other Site Collection information in the file, STSADM only grabs the URLs out. I only have two Content Databases so the decision of which database to move the Site Collection to is easy. What if I had many Content Databases? You can use the first operation, Analyze, to get an idea of how your Content Databases are laid out. Let's see how that looks: &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="/blog/Blog%20pictures/112007_0451_MoveSiteCol4.png"&gt; &lt;/p&gt;&lt;p&gt;You can see here where I got the idea to use the filename mysites.xml. The thing I love best about this screen is that you can just cut and paste the final command into your Command Prompt if you'd like. I think Microsoft did a great job with the usage on this command. One thing to note is that the –url parameter is NOT the URL of the Site Collection you want to move, it's the URL of the Web Application that the Site Collection is in. Since we've already created our file and edited it, let's go ahead and run the command. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="/blog/Blog%20pictures/112007_0451_MoveSiteCol5.png"&gt; &lt;/p&gt;&lt;p&gt;That's all there is to it. After an iisreset we see that the Site Collection http://barcelona/sites/stsadm is now in WSS_Content2. You can confirm it by looking in Central Administration &amp;gt; Applications &amp;gt; Content Databases before and after you run the command. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="/blog/Blog%20pictures/112007_0451_MoveSiteCol6.png"&gt;I have one final thing to show you, what I imagine is the intended usage of mergecontentdbs, merging two Content Databases. If we use the second operation STSADM will simply move all the Site Collections from the Source database to the Destination database. Let's move all of the sites in WSS_Content2 back into WSS_Content. &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="/blog/Blog%20pictures/112007_0451_MoveSiteCol7.png"&gt; &lt;/p&gt;&lt;p&gt;I think that picture pretty well sums it all up. Now all the Site Collections in the &lt;a href="http://barcelona/"&gt;http://barcelona&lt;/a&gt; Web Application are in WSS_Content, right where we want them. I think Microsoft did a pretty good job with this addition to STSADM. Enjoy it. &lt;/p&gt;&lt;p&gt;I'd like to give a special shout out to &lt;a href="http://blogs.msdn.com/joelo/"&gt;Joel Oleson&lt;/a&gt; for telling me to look for this little gem. &lt;/p&gt;&lt;p&gt;tk&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-2793266449999891490?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/2793266449999891490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=2793266449999891490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2793266449999891490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2793266449999891490'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/01/move-sitecollections-between.html' title='Move SiteCollections between WebApplications'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-4213969959948025805</id><published>2010-01-26T07:57:00.000-08:00</published><updated>2010-01-26T07:57:42.586-08:00</updated><title type='text'>Move Site between site collections</title><content type='html'>&lt;div class="post"&gt;        &lt;div class="postsub"&gt;            &lt;h2&gt;How To: Move a single Site between Site Collections&lt;/h2&gt;            &lt;P&gt;Hey,&lt;/P&gt;&lt;P&gt;I'm hearing&amp;nbsp;a lot of this question in many variations and I figured it's time to solve it once and for all.&amp;nbsp;The problem is well known: trying to move&amp;nbsp;a WSS Site between&amp;nbsp;2 different places (such as&amp;nbsp;Site Collections) is still not something we're doing with a click of a button. There is no real and easy of doing so and&amp;nbsp;I've heard&amp;nbsp;about many "nasty" solutions (such as Backup/Restore for entire Site Collection, Copy-Pasting everything with the Explorer View and many other messy evils).&lt;/P&gt;&lt;P&gt;It looks like multiple teams in Microsoft have been tasked with this issue since we actually got&amp;nbsp;3 different ways to solve it:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;SharePoint Designer Backup/Restore - &lt;/STRONG&gt;Definitely&amp;nbsp;the easiest way to&amp;nbsp;move&amp;nbsp;sites around&amp;nbsp;but only&amp;nbsp;WHEN IT WORKS (since that's not&amp;nbsp;a very consistent feature in SPD).&amp;nbsp;To&amp;nbsp;use this method, simply go to Menu --&amp;gt;&amp;nbsp;Site --&amp;gt; Administration --&amp;gt; Backup Web Site and enter the URL of the WSS site you want to move. You can also include/exclude other subsites in the archive you're creating. Restoring it to the new Site Collection is done with the Restore Web Site feature in SPD. Again, remember this is not too consistent so always try to restore before&amp;nbsp;deleting&amp;nbsp;an&amp;nbsp;original site&amp;nbsp;(Even when you get the "Backup Operation was completed successfully" message!).&amp;nbsp;&lt;br /&gt;&lt;LI&gt;&lt;STRONG&gt;Stsadm.exe export/import -&amp;nbsp;&lt;/STRONG&gt;The stsadm.exe admin utility&amp;nbsp;is not a new tool&amp;nbsp;but in the 2007 it&amp;nbsp;has many improvements.&amp;nbsp;Now, we can use stsadm&amp;nbsp;as&amp;nbsp;a way to import and export single sites. By the way, this is actually how Share Point Designer creates the archive in the mentioned SPD method.&amp;nbsp;Don't get confused with the&amp;nbsp;&lt;STRONG&gt;backup/restore&lt;/STRONG&gt;&amp;nbsp;operations in stsadm.exe&amp;nbsp;- those&amp;nbsp;operations&amp;nbsp;were already available in 2003&amp;nbsp;but they are&amp;nbsp;used for&amp;nbsp;entire Site Collections&amp;nbsp;rather than a&amp;nbsp;single site (and in our case it's a major overkill). Sounds great huh? Well, just like&amp;nbsp;the SharePoint Designer way,&amp;nbsp;it could easily become a MAJOR NIGHTMARE when it's not working so&amp;nbsp;let me give you some tips. I hope this will reduce the amount of time spent&amp;nbsp;CURSING THE HELL&amp;nbsp;of our beloved stsadm's command line window and the its&amp;nbsp;log file.&lt;/LI&gt;&lt;/UL&gt;&lt;BLOCKQUOTE&gt;&lt;OL&gt;&lt;LI&gt;The default &lt;STRONG&gt;cabsize&lt;/STRONG&gt; value is &lt;STRONG&gt;25 Mb &lt;/STRONG&gt;which is VERY lame for big sites! Always define ur own cabsize (up to 1 GB...) &lt;br /&gt;&lt;LI&gt;It is highly recommended to add the &lt;STRONG&gt;“-haltonwarning” &lt;/STRONG&gt;or&lt;STRONG&gt; “-haltonfatalerror”&lt;/STRONG&gt; parameters. You'll&amp;nbsp;be able to see a list of possible problems before proceeding with the creating on the archive. &lt;br /&gt;&lt;LI&gt;If still encounter failures and you don't understand WTF that could be, You might want to try the &lt;STRONG&gt;–nofilecompression&lt;/STRONG&gt; switch. Somehow, exports tend to fail in much&amp;nbsp;bigger numbers when&amp;nbsp;you try to&amp;nbsp;compress them.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;And to sum it all up,&amp;nbsp;here's the complete&amp;nbsp;command with all of&amp;nbsp;the available switches for exporting/importing with stsadm.exe:&lt;/P&gt;&lt;P&gt;stsadm -o &lt;STRONG&gt;export&lt;/STRONG&gt; -url &amp;lt;URL to be exported&amp;gt; -filename &amp;lt;export file name&amp;gt; [-overwrite] [-includeusersecurity] [-haltonwarning] [-haltonfatalerror] [-nologfile] [-versions &amp;lt;1-4&amp;gt; 1= Last major version for files and list items (default), 2= The current version, either the last major or the last minor, 3= Last major and last minor version for files and list items, 4= All versions for files and list items] [-cabsize &amp;lt;integer from 1-1024 megabytes&amp;gt; (default: 25)] [-nofilecompression] [-quiet]&lt;/P&gt;&lt;P&gt;stsadm -o &lt;STRONG&gt;import&lt;/STRONG&gt; -url &amp;lt;URL to import to&amp;gt; -filename &amp;lt;import file name&amp;gt; [-includeusersecurity] [-haltonwarning] [-haltonfatalerror] [-nologfile] [-updateversions &amp;lt;1-3&amp;gt; 1= Add new versions to the current file (default), 2= Overwrite the file and all its versions (delete then insert),3= Ignore the file if it exists on the destination] [-nofilecompression] [-quiet]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Content Deplyoment - &lt;/STRONG&gt;Ok, now we're really talking! Let&amp;nbsp;the real fun begin! This is probably the coolest and by far the&amp;nbsp;most elegant way for synchronizing content&amp;nbsp;between Site Collections.&amp;nbsp;Although this is for a&amp;nbsp;Site Collection level&amp;nbsp;- it's&amp;nbsp;a great way to make a lasting connection&amp;nbsp;and keep&amp;nbsp;moving new content&amp;nbsp;between environments.&amp;nbsp;Before using this method, you need to be familiar&amp;nbsp;with two core conceptual objects: &lt;B&gt;Paths&lt;/B&gt; and &lt;STRONG&gt;Jobs&lt;/STRONG&gt;. A Path is&amp;nbsp;set of definitions&amp;nbsp;that&amp;nbsp;represents a connection between&amp;nbsp;the source environment&amp;nbsp;and&amp;nbsp;the destination environment. The path contains information about which source web application and site collection you are deploying, authentication information for the destination environment, and the web application and site collection on the destination MOSS. However, a path by itself doesn’t actually deploy any content - it's only a set of definitions. In order to sync the environment, you must&amp;nbsp;create a &lt;STRONG&gt;Job&lt;/STRONG&gt;.&amp;nbsp;Each &lt;B&gt;job&lt;/B&gt; is associated with a path, and determines exactly which sites in the source site collection will be deployed and on what schedule. &lt;/LI&gt;&lt;/UL&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;Now the really cool thing about this method: It uses the same logic and internal audit/log files as the Index jobs. That means that you can define a job that only deploys the changes since the last successful deployment and this could&amp;nbsp;for&lt;STRONG&gt;&amp;nbsp;a single item/document level.&lt;/STRONG&gt;&amp;nbsp;Great for saving bandwidth and time. Furthermore, if there are no changes since the previous job, the deployment will complete without redoing any unnecessary work. Of course, full deployments every time can be configured if that’s what you really want but this is not necessary in most cases.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;UL&gt;&lt;H5&gt;&lt;A&gt;&lt;/A&gt;&lt;/H5&gt;&lt;P&gt;Awesome hug? Although this is for Site Collection level, I think it addresses the main&amp;nbsp;scenario&amp;nbsp;that&amp;nbsp;is main reason&amp;nbsp;for wanting to move a list or&amp;nbsp;a whole site&amp;nbsp;between places: Replication&amp;nbsp;between&amp;nbsp;the&amp;nbsp;Testing environment to the real&amp;nbsp;Production environment. Using this method, you can define it once and deploy&amp;nbsp;testing versions whenever you think you're&amp;nbsp;done playing&amp;nbsp;and it's time to publish your changes.&amp;nbsp;You can find the Content Deployment&amp;nbsp;management interface under the&amp;nbsp;&lt;STRONG&gt;SharePoint Central Administration&lt;/STRONG&gt; site. One aspect of content deployment that you should be aware of is that it will only deploy content, not any dependent assemblies/controls/webparts, etc.&amp;nbsp; Administrator is responsible for moving the assemblies for controls and webparts to the destination farm.&lt;/P&gt;&lt;/UL&gt;&lt;P&gt;In conclusion - We're dealing here with 2 types of scenarios: If we're talking about moving an entire site ONCE between Site Collections - the SPD and stsadm.exe ways are preferred and you should just use them. If you're talking about synchronization&amp;nbsp;between two environments and it's something that should happen every once in a while&amp;nbsp;-&amp;nbsp;we'll need that lasting connection that is provided through Content Deplyoment.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-4213969959948025805?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/4213969959948025805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=4213969959948025805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/4213969959948025805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/4213969959948025805'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2010/01/move-site-between-site-collections.html' title='Move Site between site collections'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-6272954271715789080</id><published>2009-12-04T17:03:00.000-08:00</published><updated>2009-12-04T17:03:25.906-08:00</updated><title type='text'>Impersonate another user c#</title><content type='html'>public class Impersonator&lt;br /&gt;    {&lt;br /&gt;        public const int LOGON32_LOGON_INTERACTIVE = 2;&lt;br /&gt;        public const int LOGON32_PROVIDER_DEFAULT = 0;&lt;br /&gt;&lt;br /&gt;        WindowsImpersonationContext impersonationContext;&lt;br /&gt;&lt;br /&gt;        [DllImport("advapi32.dll")]&lt;br /&gt;        public static extern int LogonUserA(String lpszUserName,&lt;br /&gt;            String lpszDomain,&lt;br /&gt;            String lpszPassword,&lt;br /&gt;            int dwLogonType,&lt;br /&gt;            int dwLogonProvider,&lt;br /&gt;            ref IntPtr phToken);&lt;br /&gt;        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]&lt;br /&gt;        public static extern int DuplicateToken(IntPtr hToken,&lt;br /&gt;            int impersonationLevel,&lt;br /&gt;            ref IntPtr hNewToken);&lt;br /&gt;&lt;br /&gt;        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]&lt;br /&gt;        public static extern bool RevertToSelf();&lt;br /&gt;&lt;br /&gt;        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]&lt;br /&gt;        public static extern bool CloseHandle(IntPtr handle);&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;        public bool impersonate(String userName, String domain, String password)&lt;br /&gt;        {&lt;br /&gt;            WindowsIdentity tempWindowsIdentity;&lt;br /&gt;            IntPtr token = IntPtr.Zero;&lt;br /&gt;            IntPtr tokenDuplicate = IntPtr.Zero;&lt;br /&gt;&lt;br /&gt;            if (RevertToSelf())&lt;br /&gt;            {&lt;br /&gt;                if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,&lt;br /&gt;                    LOGON32_PROVIDER_DEFAULT, ref token) != 0)&lt;br /&gt;                {&lt;br /&gt;                    if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)&lt;br /&gt;                    {&lt;br /&gt;                        tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);&lt;br /&gt;                        impersonationContext = tempWindowsIdentity.Impersonate();&lt;br /&gt;                        if (impersonationContext != null)&lt;br /&gt;                        {&lt;br /&gt;                            CloseHandle(token);&lt;br /&gt;                            CloseHandle(tokenDuplicate);&lt;br /&gt;                            return true;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            if (token != IntPtr.Zero)&lt;br /&gt;                CloseHandle(token);&lt;br /&gt;            if (tokenDuplicate != IntPtr.Zero)&lt;br /&gt;                CloseHandle(tokenDuplicate);&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void undoImpersonation()&lt;br /&gt;        {&lt;br /&gt;            impersonationContext.Undo();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;//Sample Code&lt;br /&gt;&lt;br /&gt;Impersonator imp = new Impersonator();&lt;br /&gt;            bool isTrue=imp.impersonate("testuser1", "buildmachine", "password");&lt;br /&gt;            if (isTrue)&lt;br /&gt;            {&lt;br /&gt;                items = testDocLib.GetItems(query);&lt;br /&gt;&lt;br /&gt;                Console.WriteLine(items.Count);&lt;br /&gt;                imp.undoImpersonation();&lt;br /&gt;            }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-6272954271715789080?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/6272954271715789080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=6272954271715789080' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/6272954271715789080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/6272954271715789080'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/12/impersonate-another-user-c.html' title='Impersonate another user c#'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-7691528707051048361</id><published>2009-12-03T07:06:00.000-08:00</published><updated>2009-12-03T07:06:52.075-08:00</updated><title type='text'>SharePoint Hard Limits and Recommendation</title><content type='html'>&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Entity&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Max Permissible Size&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Site Name&lt;/td&gt;&lt;td&gt;128 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Site URL&lt;/td&gt;&lt;td&gt;255 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Display name&lt;/td&gt;&lt;td&gt;128 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Connection string&lt;/td&gt;&lt;td&gt;384 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Email address&lt;/td&gt;&lt;td&gt;128 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Version numbers&lt;/td&gt;&lt;td&gt;064 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Virtual Server Friendly Name&lt;/td&gt;&lt;td&gt;064 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SQL Database Name&lt;/td&gt;&lt;td&gt;123 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SQL Database Column&lt;/td&gt;&lt;td&gt;128 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SQL Database Table Name&lt;/td&gt;&lt;td&gt;128 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SQL Role Name&lt;/td&gt;&lt;td&gt;128 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Server Name&lt;/td&gt;&lt;td&gt;128 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Windows User Name&lt;/td&gt;&lt;td&gt;300 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Windows Password&lt;/td&gt;&lt;td&gt;300 characters&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dependencies per object&lt;/td&gt;&lt;td&gt;032 objects&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Zone enumeration value&lt;/td&gt;&lt;td&gt;004 zones&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Default SQL command timeout&lt;/td&gt;&lt;td&gt;300 seconds&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Number of simultaneous workflows that can be run&lt;/td&gt;&lt;td&gt;015&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table border="1" cellPadding="0" cellSpacing="0" style="border-right:#cccccc 1pt solid;border-top:medium none;border-left:medium none;border-bottom:#cccccc 1pt solid;" class="MsoNormalTable"&gt;&lt;thead&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;br /&gt;&lt;p style="margin:0 0 4.25pt;" class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Site object&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Guidelines for acceptable performance&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Notes&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Scope of impact when performance degrades&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Site collection &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;50,000 per Web application&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Total farm throughput degrades as the number of site collections increases.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Farm&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Web site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;250,000 per site collection&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;You can create a very large total number of Web sites by nesting the subsites. For example, 100 sites, each with 1000 subsites, is 100,000 Web sites. The maximum recommended number of sites and subsites is 125 sites with 2,000 subsites each, for a total of 250,000 sites.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Site collection&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Subsite&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;2,000 per Web site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;The interface for enumerating subsites of a given Web site does not perform well as the number of subsites surpasses 2,000.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Site view&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Document&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;5 million per library&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;You can create very large document libraries by nesting folders, using standard views and site hierarchy. This value may vary depending on how documents and folders are organized, and by the type and size of documents stored.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Library&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Item&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;2,000 per view&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Testing indicates a reduction in performance beyond two thousand items. Using indexing on a flat folder view can improve performance.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;List view&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Document file size&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;50MB (2GB max*)&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;File save performance is proportional to the size of the file. The default maximum is 50 MB. This maximum is enforced by the system, but you can change it to any value up to 2 GB.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Library, file save performance&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;List&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;2,000 per Web site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Testing indicates a reduction in list view performance beyond two thousand entries.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;List view&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Field type&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;256 per list&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is not a hard limit, but you might experience list view performance degradation as the number of field types in a list increases.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;List view&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Column&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;2,000 per document library&lt;/span&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;4,096 per list&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is not a hard limit, but you might experience library and list view performance degradation as the number of columns in a document library or list increases.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Library and list view&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Web Part&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;50 per page&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This figure is an estimate based on simple Web Parts. The complexity of the Web Parts dictates how many Web Parts can be used on a page before performance is affected.&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Page&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Verdana','sans-serif';"&gt;The following table lists the recommended guidelines for people objects.&lt;/span&gt;&lt;/p&gt;&lt;table border="1" cellPadding="0" cellSpacing="0" style="border-right:#cccccc 1pt solid;border-top:medium none;border-left:medium none;border-bottom:#cccccc 1pt solid;" class="MsoNormalTable"&gt;&lt;thead&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;br /&gt;&lt;p style="margin:0 0 4.25pt;" class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;People object&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Guidelines for acceptable performance&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Notes&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Users in groups &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;2 million per Web site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;You can add millions of people to your Web site by using Microsoft Windows security groups to manage security instead of using individual users.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;User profile&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;5 million per farm&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This number represents the number of profiles which can be imported from a directory service, such as Active Directory, into the people profile store.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Security principal&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;2,000 per Web site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;The size of the access control list is limited to a few thousand security principals (users and groups in the Web site).&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Verdana','sans-serif';"&gt;The following table lists the recommended guidelines for search objects.&lt;/span&gt;&lt;/p&gt;&lt;table border="1" cellPadding="0" cellSpacing="0" style="border-right:#cccccc 1pt solid;border-top:medium none;border-left:medium none;border-bottom:#cccccc 1pt solid;" class="MsoNormalTable"&gt;&lt;thead&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;br /&gt;&lt;p style="margin:0 0 4.25pt;" class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Search object&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Guidelines for acceptable performance &lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Notes&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Search indexes&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;One per SSP&lt;/span&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Maximum of 20 per farm&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Office SharePoint Server 2007 supports one content index per SSP. Given that we recommend a maximum of 20 SSPs per farm, a maximum of 20 content indexes is supported. &lt;/span&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Note that an SSP can be associated with only one index server and one content index. However, an index server can be associated with multiple SSPs and have a content index for each SSP.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Indexed documents &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;50,000,000 per content index&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Office SharePoint Server 2007 supports 50 million documents per index server. This could be divided up into multiple content indexes based on the number of SSPs associated with an index server.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Content sources &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;500 per SSP*&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is a hard limit enforced by the system. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Start Addresses &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;500 per content source*&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is a hard limit enforced by the system.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Alerts &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;1,000,000 per SSP&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is the tested limit.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Scopes &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;200 per site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is a recommended limit per site. We recommend a maximum of 100 scope rules per scope. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Display groups &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;25 per site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;These are used for a grouped display of scopes through the user interface. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Crawl rules &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;10,000 per SSP&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;We recommend a maximum 10,000 crawl rules irrespective of type.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Keywords&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;15,000 per site&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;We recommend a maximum of 10 Best Bets and five synonyms per keyword.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Crawled properties &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;500,000 per SSP&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;These are properties that are discovered during a crawl.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Managed properties &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;100,000 per SSP&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;These are properties used by the search system in queries. Crawled properties are mapped to managed properties. &lt;/span&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;We recommend a maximum of 100 mappings per managed property.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Authoritative pages&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;200 per relevance level&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is the maximum number of sites in each of the four relevance levels.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Results removal&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;100 &lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This is the maximum recommended number of URLs that should be removed from the system in one operation.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Crawl logs&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;50,000,000&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Number of individual log entries in the crawl log.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Verdana','sans-serif';"&gt;The following table lists the recommended guidelines for logical architecture objects.&lt;/span&gt;&lt;/p&gt;&lt;table border="1" cellPadding="0" cellSpacing="0" style="border-right:#cccccc 1pt solid;border-top:medium none;border-left:medium none;border-bottom:#cccccc 1pt solid;" class="MsoNormalTable"&gt;&lt;thead&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;br /&gt;&lt;p style="margin:0 0 4.25pt;" class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Logical architecture object&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Guidelines for acceptable performance&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Notes&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Shared Services Provider (SSP)&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;3 per farm (20 per farm maximum)&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Zone&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;5* per farm&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;The number of zones defined for a farm is hard coded to 5.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Web application&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;99 per SSP&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;This limit includes the number of Web applications on child farms consuming resources on this SSP.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Internet Information Services (IIS) application pool&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;8 per Web server&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Maximum number is determined by hardware capabilities.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Site collection&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;50,000 per Web application&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Content database&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;100 per Web application&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Site collection&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;50,000 per database&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Verdana','sans-serif';"&gt;The following table lists the recommended guidelines for physical objects.&lt;/span&gt;&lt;/p&gt;&lt;table border="1" cellPadding="0" cellSpacing="0" style="border-right:#cccccc 1pt solid;border-top:medium none;border-left:medium none;border-bottom:#cccccc 1pt solid;" class="MsoNormalTable"&gt;&lt;thead&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;br /&gt;&lt;p style="margin:0 0 4.25pt;" class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Physical object&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Guidelines for acceptable performance&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#cccccc;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;strong&gt;&lt;span style="font-size:8.5pt;color:black;font-family:'Verdana','sans-serif';"&gt;Notes&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Index servers&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;1 per SSP*&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Application servers running Excel Calculation Services&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;No limit&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Query servers&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;No limit&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Because 100 content databases are supported for each query server, the number of query servers required per farm is based on the number of content databases in the farm. For example, if there are 500 content databases in your farm, you will need at least 5 query servers.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Web server/database server ratio&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;8 Web servers per database server&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;border-left:#cccccc 1pt solid;border-bottom:#cccccc;background-color:transparent;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;The scale out factor is dependent upon the mix of operations.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Web server/domain controller ratio&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;3 Web servers per domain controller&lt;/span&gt;&lt;/td&gt;&lt;td vAlign="top" style="border-right:#cccccc;border-top:#cccccc 1pt solid;background:#e9e9e6;border-left:#cccccc 1pt solid;border-bottom:#cccccc;padding:2.1pt;"&gt;&lt;span style="font-size:8.5pt;line-height:140%;font-family:'Times New Roman','serif';"&gt;Depending on how much authentication traffic is generated, your environment may support a greater number of Web servers per domain controller.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-7691528707051048361?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/7691528707051048361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=7691528707051048361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7691528707051048361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/7691528707051048361'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/12/sharepoint-hard-limits-and.html' title='SharePoint Hard Limits and Recommendation'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-665667396578123323</id><published>2009-12-02T14:50:00.001-08:00</published><updated>2009-12-02T14:50:09.911-08:00</updated><title type='text'>SPSiteDataQuery example</title><content type='html'>&lt;p&gt;I have been playing with the SPSiteDataQuery a fair bit recently and thought it would be interesting to post some of the results.&lt;/p&gt;&lt;p&gt;When using the SPSiteDataQuery to perform a search there are four main properties you are going to set which determine the results you will get. If you have seen my previous post (XML results using SPSiteDataQuery in SharePoint) you will have seen that they are Lists, Query, Webs and ViewFields.&lt;/p&gt;&lt;p&gt;If you read nothing else then remember this...If you make a mistake in the Webs or Lists properties, invalid XML or invalid attributes, the SPSiteDataQuery will fall back to it's default behavior and will not throw an error!! Knowing this can save a lot of time...ensure your properties are correctly formatted.&lt;/p&gt;&lt;p&gt;So, assuming the basic setup is&lt;/p&gt;&lt;pre&gt;&lt;p&gt;SPSiteDataQuery q = new SPSiteDataQuery();&lt;br&gt;q.Lists = &amp;quot;&amp;lt;Lists BaseType='1'/&amp;gt;&amp;quot;;&lt;br&gt;q.Query = &amp;quot;&amp;lt;Where&amp;gt;&amp;lt;Gt&amp;gt;&amp;lt;FieldRef Name='ID' /&amp;gt;&amp;lt;Value Type='Number'&amp;gt;0&amp;lt;/Value&amp;gt;&amp;lt;/Gt&amp;gt;&amp;lt;/Where&amp;gt;&amp;quot;;&lt;br&gt;q.Webs = &amp;quot;&amp;lt;Webs Scope='SiteCollection' /&amp;gt;&amp;quot;;&lt;br&gt;q.ViewFields = &amp;quot;&amp;lt;FieldRef Name='Title' /&amp;gt;&amp;lt;FieldRef Name='ID' /&amp;gt;&amp;quot;';&lt;br&gt;q.RowLimit = 10;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;Here are the changes you can make to achieve different result sets and tips as to why the query could be failing.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Webs Property&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There are basically three different values for this...&lt;/p&gt;&lt;p&gt;&lt;br&gt;&amp;quot;&amp;lt;Webs Scope='SiteCollection' /&amp;gt;&amp;quot; This will search the entire site collection no matter which web you use to execute the query.&lt;br&gt;&amp;quot;&amp;lt;Webs Scope='Recursive' /&amp;gt;&amp;quot; This will search the web on which you execute the query and recurse through any child webs.&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;quot; If you leave it blank then it will only search the web on which you execute the query. No child webs will be queried. This is important as I have read on several other sites that this is not possible with SPSiteDataQuery, but it is!!&lt;br&gt;&lt;br&gt;I would also point out that that if you get anything wrong with this property SharePoint will not throw an error, it will just default to the blank behavior...It will only search the web on which you executed the query. This is an important point as &amp;quot;&amp;lt;Webs scope='Recursive' /&amp;gt;&amp;quot;  or &amp;quot;&amp;lt;Webs Scope='recursive' /&amp;gt;&amp;quot; (small 's' in Scope and small 'r' in recursive) look OK but are actually invalid and the query will default to only the current web.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Lists Property&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This defines what type of document libraries and lists WSS will search for your items. You can specify the exact type of list, the base type or even specific lists. Examples of the Lists property are...&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;lt;Lists BaseType='1'/&amp;gt;&amp;quot; As above, this will search all lists which are based on a 'Document Library. This is useful if you only want to find documents. Other values for BaseType include...&lt;/p&gt;&lt;p&gt;0 - Generic list - This will search all lists and not document libraries.&lt;br&gt;1 - Document Library&lt;br&gt;3 - Discussion Forum&lt;br&gt;4 - Vote or Survey&lt;br&gt;5 - Issues list&lt;/p&gt;&lt;p&gt;(no, I don't know what happened to number 2!!)&lt;/p&gt;&lt;p&gt;I should also point out that the default is to search BaseType = '0' , and so if you do not set or make a mistake in the XML only lists will be searched.&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;lt;Lists ServerTemplate='850'/&amp;gt;&amp;quot; This will limit the search to only a particular list template (850 is the Pages template in a publishing site). The number is fairly random and is defined in the list definition. I haven't needed to look at them as yet so I don't know a better way than looking in the definitions in the FEATURES folder for SharePoint. If you make a mistake with this property it will revert to the default.&lt;/p&gt;&lt;p&gt;Another options is Hidden, which determines if hidden lists or document libraries are searched. This an additional attribute and would be used like this...&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;lt;Lists ServerTemplate='850' Hidden='TRUE'/&amp;gt;&amp;quot;&lt;/p&gt;&lt;p&gt;The MaxListLimit attribute specifies the total number of lists to search. You will receive an exception if the query exceeds the MaxListLimit. The default amount is 1000 and by setting this to 0 you can search everything. So the following would only search the first 50 lists...&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;lt;Lists BaseType='1' MaxListsLimit='50'/&amp;gt;&amp;quot; &lt;/p&gt;&lt;p&gt;Another thing you can do with the Lists property is to query specific lists. This can be done by specifying the Guid of the list you want to search. An example would be...&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;lt;Lists&amp;gt;&amp;lt;List ID=&amp;quot;129AB4CAE-12EF-9871-DE45-F34A180D3EAB5&amp;quot;/&amp;gt;&amp;lt;/Lists&amp;gt;&amp;quot;&lt;/p&gt;&lt;p&gt;You would obviously need to know the Guid of the lists you wish to query before creating this property.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;The ViewFields property&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The ViewFields property specifies the fields (columns), that will be returned in the query. This is very similar to SQL and you should ensure that you specify any fields that you may wish to use in you Where or OrderBy part of the query.&lt;/p&gt;&lt;p&gt;Things to point out here is that that you can specify the ID(Guid) of the property or the name of the property...this is the Internal Name, not the name you may see in the UI. For example the standard publishing field &amp;quot;Image Caption&amp;quot; would become &amp;quot;PublishingImageCaption&amp;quot; as that is it's internal name.&lt;/p&gt;&lt;p&gt;So, to add the &amp;quot;Image Caption&amp;quot; filed to the results we would need...&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;lt;FieldRef Name='Title' /&amp;gt;&amp;lt;FieldRef Name='ID' /&amp;gt;&amp;lt;FieldRef Name='PublishingImageCaption' /&amp;gt;&amp;quot;&lt;/p&gt;&lt;p&gt;Another thing to remember is that not all lists or documents libraries contain the same fields. If you are not worried about a particular field and want the item returned whether the field (column) exists or not the you can set Nullable to true. So if we have some items which may not have an 'Image Caption' column then we could use...&lt;/p&gt;&lt;p&gt;&amp;quot;&amp;lt;FieldRef Name='Title' /&amp;gt;&amp;lt;FieldRef Name='ID' /&amp;gt;&amp;lt;FieldRef Name='PublishingImageCaption' Nullable='TRUE'/&amp;gt;&amp;quot;&lt;/p&gt;&lt;p&gt;and this would still find those items without an 'Image Caption' column (field).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Query Property&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This property will allow you to bot limit and order you results. You can do both or just one, but it is similar to SQL in what you can do. There is a lot to this, but I will give a couple of samples...&lt;/p&gt;&lt;p&gt;Querying by date...&lt;/p&gt;&lt;p&gt;string sLastWeek = SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Today.AddDays(-1));&lt;br&gt;q.Query = &amp;quot;&amp;lt;Where&amp;gt;&amp;lt;Gt&amp;gt;&amp;lt;FieldRef Name='Created'&amp;gt;&amp;lt;Value Type='DateTime'&amp;gt;&amp;quot; + sLastWeek + &amp;quot;&amp;lt;/Value&amp;gt;&amp;lt;/Gt&amp;gt;&amp;lt;/Where&amp;gt;&amp;quot;;&lt;br&gt;&lt;br&gt;This will find items created within the last week. The &amp;lt;Gt&amp;gt; denotes 'Greater Than', you could also use &amp;lt;Gte&amp;gt;, &amp;lt;Lt&amp;gt; or &amp;lt;Eq&amp;gt;. These can be combined to create more complex queries.&lt;/p&gt;&lt;p&gt;q.Query = &amp;quot;&amp;lt;OrderBy&amp;gt;&amp;lt;FieldRef Name='Title' Ascending='FALSE'&amp;gt;&amp;lt;/OrderBy&amp;gt;&amp;quot;;&lt;/p&gt;&lt;p&gt;This will order the items descending by the title (Z-A).&lt;/p&gt;&lt;p&gt;q.Query = &amp;quot;&amp;lt;Where&amp;gt;&amp;lt;Gt&amp;gt;&amp;lt;FieldRef Name='Created'&amp;gt;&amp;lt;Value Type='DateTime'&amp;gt;&amp;quot; + sLastWeek + &amp;quot;&amp;lt;/Value&amp;gt;&amp;lt;/Gt&amp;gt;&amp;lt;/Where&amp;gt;&amp;lt;OrderBy&amp;gt;&amp;lt;FieldRef Name='Title' Ascending='FALSE'&amp;gt;&amp;lt;/OrderBy&amp;gt;&amp;quot;;&lt;/p&gt;&lt;p&gt;This is a combination of the above...items created in the last week ordered Z-A.&lt;/p&gt;&lt;p&gt;Finally, make sure you set the RowLimit property...you may not get any results otherwise!!&lt;br&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-665667396578123323?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/665667396578123323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=665667396578123323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/665667396578123323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/665667396578123323'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/12/spsitedataquery-example.html' title='SPSiteDataQuery example'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-8525104797529896417</id><published>2009-11-23T17:34:00.000-08:00</published><updated>2009-11-23T18:06:57.307-08:00</updated><title type='text'>Custom PowerShell Commands</title><content type='html'>To Create Custom Cmdlet, Your class can inherit from either PSCmdlet or Cmdlet class.&lt;br /&gt;&lt;br /&gt;You could override below methods.&lt;br /&gt;&lt;b&gt;BeginProcessing&lt;/b&gt;-- Provides optional one-time, preprocessing functionality for the cmdlet. &lt;br /&gt;&lt;b&gt;ProcessRecord&lt;/b&gt; -- Provides record-by-record processing functionality for the cmdlet. It may be called any number of times or not at all, depending on the input of the cmdlet. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;EndProcessing&lt;/b&gt; Provides optional one-time, post-processing functionality for the cmdlet. &lt;br /&gt;&lt;b&gt;StopProcessing&lt;/b&gt; Stops processing when the user stops the cmdlet asynchronously, such as by entering the key combination Ctrl+C. &lt;br /&gt;&lt;br /&gt;To register this cmdlet you need to create a custom SnapIn by inheriting from &lt;b&gt;PSSnapIn&lt;/b&gt; or &lt;b&gt;CustomPSSnapin&lt;/b&gt;&lt;br /&gt;You have to override below property.&lt;br /&gt;&lt;strong&gt;Description:&lt;/strong&gt; Supply short description of your Snap-in here. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Name:&lt;/strong&gt; Supply name of your Snap-in here. &lt;br /&gt;&lt;strong&gt;Vendor:&lt;/strong&gt; Supply vendor information for your Snap-in here. &lt;br /&gt;&lt;strong&gt;Cmdlets:&lt;/strong&gt; This is where you provide collection of Cmdlets that need to be registered. I will discuss this in details. &lt;br /&gt;&lt;br /&gt;Make sure you override the &lt;b&gt;CmdLets&lt;/b&gt; property which should return all the Cmdlets that you want to register with PowerShell.&lt;br /&gt;Example: &lt;br /&gt;public override Collection Cmdlets&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;if (null == _cmdlets)&lt;br /&gt;{&lt;br /&gt;_cmdlets = new Collection();&lt;br /&gt;_cmdlets.Add(new CmdletConfigurationEntry&lt;br /&gt;("Get-Book", typeof(GetBookCommand), "AmazonPS.dll-Help.xml"));&lt;br /&gt;}&lt;br /&gt;return _cmdlets;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You need to mark the class with &lt;b&gt;RunInstaller&lt;/b&gt; attribute&lt;br /&gt;&lt;br /&gt;Then you have to install this snapin using &lt;b&gt;installUtil&lt;/b&gt; 64 bit utility.&lt;br /&gt;Then the snapin will be registered with the powershell.&lt;br /&gt;&lt;br /&gt;Every time you open the powershell console. You have to run &lt;b&gt;Add-PSSnapIn&lt;/b&gt; command.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-8525104797529896417?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/8525104797529896417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=8525104797529896417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8525104797529896417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8525104797529896417'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/11/custom-powershell-commands.html' title='Custom PowerShell Commands'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5387103488971022232</id><published>2009-11-23T15:59:00.001-08:00</published><updated>2009-11-23T15:59:02.328-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2007'/><title type='text'>Custom stsadm commnad in SharePoint 2007</title><content type='html'>&lt;div id="mainBody"&gt;        &lt;br /&gt;        &lt;p&gt;The STSADM.EXE utility enables many administrative operations in Windows SharePoint Services that cannot be done with the Central Administration application. See the article &lt;a id="ctl00_contentContainer_ctl02" href="http://technet2.microsoft.com/Office/en-us/library/188f006d-aa66-4784-a65b-a31822aa13f71033.mspx"&gt;Stsadm.exe command-line tool (Office SharePoint Server)&lt;/a&gt; in Microsoft TechNet for details. With Windows SharePoint Services 3.0 you can extend the functionality of the STSADM utility by adding your own operations and command line parameters with simple projects using any .NET language.&lt;/p&gt;        &lt;p&gt;Creating such a project requires two major tasks.&lt;/p&gt;        &lt;ol&gt;          &lt;li&gt;&lt;br /&gt;            &lt;p&gt;Create a class that implements the &lt;a id="ctl00_contentContainer_ctl03" href="/en-us/library/microsoft.sharepoint.stsadmin.ispstsadmcommand.aspx"&gt;ISPStsadmCommand&lt;/a&gt; interface.&lt;/p&gt;          &lt;/li&gt;          &lt;li&gt;&lt;br /&gt;            &lt;p&gt;Inform STSADM about your extension by registering the class and its assembly.&lt;/p&gt;          &lt;/li&gt;        &lt;/ol&gt;        &lt;h1 class="heading"&gt;Create a class that implements ISPStsadmCommand&lt;/h1&gt;        &lt;div id="procedureSection0" class="section"&gt;          &lt;ol&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Start a Class Library project in Visual Studio.&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Add &lt;strong&gt;using&lt;/strong&gt; statements for &lt;a id="ctl00_contentContainer_ctl04" href="/en-us/library/microsoft.sharepoint.aspx"&gt;Microsoft.SharePoint&lt;/a&gt; and &lt;a id="ctl00_contentContainer_ctl05" href="/en-us/library/microsoft.sharepoint.stsadmin.aspx"&gt;Microsoft.SharePoint.StsAdmin&lt;/a&gt;.&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Use a namespace that follows the pattern &lt;code&gt;CompanyName.TechnologyName.Feature.SubFeature&lt;/code&gt;. For example, &lt;code&gt;AjaxInc.SharePoint.StsAdmin.CustomCommands&lt;/code&gt;. (See &lt;a id="ctl00_contentContainer_ctl06" href="/en-us/library/ms229026.aspx"&gt;Names of Namespaces&lt;/a&gt;.)&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Use a class name that expresses the common denominator of the new STSADM operations that you will be creating; for example, "SortCommands".&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;The class should inherit &lt;strong&gt;ISPStsadmCommand&lt;/strong&gt;; with a declaration similar to the following.&lt;/p&gt;              &lt;p&gt;public class SortCommands : ISPStsAdminCommand&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Write the implementation of the &lt;a id="ctl00_contentContainer_ctl07" href="/en-us/library/microsoft.sharepoint.stsadmin.ispstsadmcommand.gethelpmessage.aspx"&gt;GetHelpMessage&lt;/a&gt; method. See the example below.&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Write the implementation of the &lt;a id="ctl00_contentContainer_ctl08" href="/en-us/library/microsoft.sharepoint.stsadmin.ispstsadmcommand.run.aspx"&gt;Run&lt;/a&gt; method. See the example below.&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Compile the project, using the namespace name as the name of the assembly.&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Deploy the assembly to the global assembly cache; for example C:\Windows\Assembly.&lt;/p&gt;            &lt;/li&gt;          &lt;/ol&gt;        &lt;/div&gt;        &lt;h1 class="heading"&gt;Register the new class and assembly&lt;/h1&gt;        &lt;div id="procedureSection1" class="section"&gt;          &lt;ol&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Create a text file (UTF-8) named stsadmcommands.&lt;em&gt;uniqueID&lt;/em&gt;.xml, where &lt;em&gt;uniqueID&lt;/em&gt; is the name of your company or some other ID that ensures uniqueness on any server on which your extension of STSADM might be deployed. The XML declaration should read simply &lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/code&gt;. The top-level element is &lt;code&gt;&amp;lt;commands&amp;gt;&amp;lt;/commands&amp;gt;&lt;/code&gt;.&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;For each custom STSADM operation you created—that is, each possible value of the &lt;span class="parameter"&gt;command&lt;/span&gt; parameter of &lt;strong&gt;GetHelpMessage&lt;/strong&gt; and &lt;strong&gt;Run&lt;/strong&gt;—add a &lt;code&gt;&amp;lt;command/&amp;gt;&lt;/code&gt; element (inside the &lt;code&gt;&amp;lt;commands&amp;gt;&lt;/code&gt; element) to your stsadmcommands file with the following syntax. (See the following example.) Change the version and culture values as needed.&lt;/p&gt;              &lt;span id="ctl00_contentContainer_ctl09"&gt;&lt;br /&gt;&lt;div class='libCScode'&gt;    &lt;br /&gt;    &lt;div class="CodeSnippetTitleBar"&gt;        &lt;div class="CodeDisplayLanguage"&gt;            &lt;br /&gt;        &lt;/div&gt;    &lt;/div&gt;    &lt;div dir="ltr" style="background-color: #ddd"&gt;    &lt;pre class="libCScode" style="word-wrap:break-word; word-break:break-all" id="ctl00_contentContainer_ctl09_code" space="preserve"&gt;&amp;lt;commands&amp;gt;&lt;br /&gt;    &amp;lt;command &lt;br /&gt;        name="command_name" &lt;br /&gt;        class="fully_qualified_class_name, assembly_name, &lt;br /&gt;        Version=1.0.0.0, &lt;br /&gt;        Culture=neutral, &lt;br /&gt;        PublicKeyToken=value"/&amp;gt;&lt;br /&gt;    &amp;lt;!-- other command elements, if any --&amp;gt;&lt;br /&gt;&amp;lt;/commands&amp;gt;&lt;/pre&gt;    &lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Replace &lt;em&gt;command_name&lt;/em&gt;, &lt;em&gt;fully_qualified_class_name&lt;/em&gt;, and &lt;em&gt;assembly_name&lt;/em&gt; with the appropriate values. (Do not include the ".dll" extension on the assembly name.)&lt;/p&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Replace &lt;em&gt;value&lt;/em&gt; with the public key token for your assembly which you obtain with these steps.&lt;/p&gt;              &lt;ol&gt;                &lt;li&gt;&lt;br /&gt;                  &lt;p&gt;Right-click your assembly in the global assembly cache and select &lt;strong&gt;Properties&lt;/strong&gt;.&lt;/p&gt;                &lt;/li&gt;                &lt;li&gt;&lt;br /&gt;                  &lt;p&gt;On the &lt;strong&gt;General&lt;/strong&gt; tab, copy the &lt;strong&gt;Public Key Token&lt;/strong&gt; value.&lt;/p&gt;                &lt;/li&gt;                &lt;li&gt;&lt;br /&gt;                  &lt;p&gt;Paste it as the value for &lt;code&gt;PublicKeyToken&lt;/code&gt;.&lt;/p&gt;                &lt;/li&gt;              &lt;/ol&gt;            &lt;/li&gt;            &lt;li&gt;&lt;br /&gt;              &lt;p&gt;Copy the stsadmcommands.&lt;em&gt;uniqueID&lt;/em&gt;.xml file to &lt;code&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG&lt;/code&gt;.&lt;/p&gt;            &lt;/li&gt;          &lt;/ol&gt;        &lt;/div&gt;        &lt;h1 class="heading"&gt;Example&lt;/h1&gt;        &lt;div id="codeExampleSection" class="section"&gt;          &lt;br /&gt;            &lt;p&gt;The following example shows the *.cs file and, below that, the stsadmcommands.&lt;em&gt;uniqueID&lt;/em&gt;.xml file for a custom STSADM operation, called enumfeatures, that will list the features at a site. &lt;/p&gt;          &lt;br /&gt;          &lt;span id="ctl00_contentContainer_ctl10"&gt;&lt;br /&gt;&lt;div class='libCScode'&gt;    &lt;br /&gt;    &lt;div class="CodeSnippetTitleBar"&gt;        &lt;div class="CodeDisplayLanguage"&gt;            C#&lt;br /&gt;        &lt;/div&gt;    &lt;/div&gt;    &lt;div dir="ltr" style="background-color: #ddd"&gt;    &lt;pre class="libCScode" style="word-wrap:break-word; word-break:break-all" id="ctl00_contentContainer_ctl10_code" space="preserve"&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; System.Collections.Specialized;&lt;br /&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; Microsoft.SharePoint;&lt;br /&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt; Microsoft.SharePoint.StsAdmin;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace&lt;/span&gt; MS.Samples.SharePoint&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;class&lt;/span&gt; SimpleCommandHandler : ISPStsadmCommand&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;string&lt;/span&gt; GetHelpMessage(&lt;span style="color:blue"&gt;string&lt;/span&gt; command)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;return&lt;/span&gt; &lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;-url &amp;lt;full url to a site in SharePoint&amp;gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;int&lt;/span&gt; Run(&lt;span style="color:blue"&gt;string&lt;/span&gt; command, StringDictionary keyValues, out &lt;span style="color:blue"&gt;string&lt;/span&gt; output)&lt;br /&gt;        {&lt;br /&gt;            command = command.ToLowerInvariant();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:blue"&gt;switch&lt;/span&gt; (command)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color:blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;enumfeatures&amp;quot;&lt;/span&gt;&lt;/span&gt;:&lt;br /&gt;                    &lt;span style="color:blue"&gt;return&lt;/span&gt; &lt;span style="color:blue"&gt;this&lt;/span&gt;.EnumerateFeatures(keyValues, out output);&lt;br /&gt;&lt;br /&gt;                &lt;span style="color:blue"&gt;default&lt;/span&gt;:&lt;br /&gt;                    throw &lt;span style="color:blue"&gt;new&lt;/span&gt; InvalidOperationException();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;private&lt;/span&gt; &lt;span style="color:blue"&gt;int&lt;/span&gt; EnumerateFeatures(StringDictionary keyValues, out &lt;span style="color:blue"&gt;string&lt;/span&gt; output)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;if&lt;/span&gt; (!keyValues.ContainsKey(&lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                throw &lt;span style="color:blue"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;The url parameter was not specified.&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            String url = keyValues[&lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;            SPFeatureCollection features = &lt;span style="color:blue"&gt;null&lt;/span&gt;;&lt;br /&gt;            SPWeb web = &lt;span style="color:blue"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:blue"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                SPSite site = &lt;span style="color:blue"&gt;new&lt;/span&gt; SPSite(url);&lt;br /&gt;&lt;br /&gt;                web = site.OpenWeb();&lt;br /&gt;&lt;br /&gt;                features = web.Features;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color:blue"&gt;catch&lt;/span&gt; (Exception e)&lt;br /&gt;            {&lt;br /&gt;                throw &lt;span style="color:blue"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;Error retrieving url '&amp;quot;&lt;/span&gt;&lt;/span&gt; + url + &lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;'.  Please check the format of your url, and ensure that the site exists.  Details: &amp;quot;&lt;/span&gt;&lt;/span&gt; + e.Message);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            StringBuilder sb = &lt;span style="color:blue"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;&lt;br /&gt;            sb.AppendLine(&lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;Features at '&amp;quot;&lt;/span&gt;&lt;/span&gt; + web.Url + &lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;':\n&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:blue"&gt;foreach&lt;/span&gt; (SPFeature feature &lt;span style="color:blue"&gt;in&lt;/span&gt; features)&lt;br /&gt;            {&lt;br /&gt;                sb.AppendLine(feature.Definition.DisplayName + &lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot; (&amp;quot;&lt;/span&gt;&lt;/span&gt; + feature.DefinitionId + &lt;span style="color: maroon"&gt;&lt;span style="color: maroon"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            output = sb.ToString();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:blue"&gt;return&lt;/span&gt; 0;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;    &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5387103488971022232?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5387103488971022232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5387103488971022232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5387103488971022232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5387103488971022232'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/11/custom-stsadm-commnad-in-sharepoint.html' title='Custom stsadm commnad in SharePoint 2007'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-3260216963146495415</id><published>2009-11-13T13:51:00.000-08:00</published><updated>2009-11-13T13:51:37.846-08:00</updated><title type='text'>Workaround for Double Hop issue</title><content type='html'>&lt;span style="font-family: Verdana,sans-serif; font-size: x-small;"&gt;&lt;/span&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;public class UnImpersonator : IDisposable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DllImport("advapi32.dll")]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static extern int RevertToSelf();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private WindowsIdentity connectedUser = null;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public UnImpersonator()&lt;br /&gt;&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; connectedUser = WindowsIdentity.GetCurrent();&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; RevertToSelf();&lt;br /&gt;&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; void IDisposable.Dispose()&lt;br /&gt;&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; connectedUser.Impersonate();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;//Sample Usage&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;&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; if (!IsPostBack)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (new UnImpersonator())&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlConnection cn = new SqlConnection("Data Source=servername;Initial Catalog=Employee;Integrated Security=true;");&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; SqlCommand cm = new SqlCommand("select empid,empname from employee", cn);&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; cn.Open();&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; ddlEmployee.DataSource = cm.ExecuteReader();&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; ddlEmployee.DataTextField = "empname";&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; ddlEmployee.DataValueField = "empid";&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; ddlEmployee.DataBind();&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; cn.Close();&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; cn.Dispose();&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; }&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-3260216963146495415?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/3260216963146495415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=3260216963146495415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3260216963146495415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/3260216963146495415'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/11/workaround-for-double-hop-issue.html' title='Workaround for Double Hop issue'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5394119099785151794</id><published>2009-11-09T19:12:00.001-08:00</published><updated>2009-11-09T19:12:58.650-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>ListFieldIterator Control to render the sharepoint fields the way you want.</title><content type='html'>This control renders each field in a list item with an appropriate control. A single line text field will be rendered as a text box while a lookup field will be rendered as combo box. This control resides in the &lt;strong&gt;Microsoft.SharePoint.WebControls&lt;/strong&gt; namespace of the &lt;strong&gt;Microsoft.SharePoint.dll&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In its simplest way you can declare the control as follows:&lt;/p&gt;&lt;pre&gt;&amp;lt;spuc:ListFieldIterator ID="TestListFieldIterator" runat="server"&lt;br /&gt;                        ControlMode="Edit" ListId="{e2886b6e-4d63-4063-a02c-eac7fb3aef79}" /&amp;gt;&lt;/pre&gt;&lt;p&gt;This renders the first list item as follows:&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-252" title="listfielditerator-edit-mode" src="http://karinebosch.files.wordpress.com/2009/03/listfielditerator-edit-mode.png?w=597&amp;#038;h=378" alt="listfielditerator-edit-mode" width="597" height="378" /&gt;&lt;/p&gt;&lt;p&gt;You can also set the &lt;strong&gt;ControlMode&lt;/strong&gt; attribut to &lt;strong&gt;Display&lt;/strong&gt; which renders the list item as follows:&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-253" title="listfielditerator-display-mode" src="http://karinebosch.files.wordpress.com/2009/03/listfielditerator-display-mode.png?w=297&amp;#038;h=133" alt="listfielditerator-display-mode" width="297" height="133" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If the control mode is set to &lt;strong&gt;New&lt;/strong&gt;, empty controls are shown.&lt;/p&gt;&lt;p&gt;The way a choice field is rendered depends on the definition of the column. If you opted for a dropdown list when you created the column, the field is rendered as a dropdown. If you opted for check boxes for multi selection, the field is rendered as a list of check boxes:&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-250" title="choice-field" src="http://karinebosch.files.wordpress.com/2009/03/choice-field.png?w=249&amp;#038;h=280" alt="choice-field" width="249" height="280" /&gt;&lt;/p&gt;&lt;p&gt;You can set different properties of the &lt;strong&gt;ListFieldIterator&lt;/strong&gt; control:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;ListId&lt;/strong&gt;: This property must contain the id &amp;#8211; which is a Guid - of the list you want to display.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ControlMode&lt;/strong&gt;: Defines whether the controls are displayed in display mode, edit mode or new mode.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ExcludeFields&lt;/strong&gt;: Specify the fields that don&amp;#8217;t need to be rendered. Separate each field with ;#&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Item&lt;/strong&gt;: In code behind, you can retrieve the current list item by using this property.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ItemId&lt;/strong&gt;: in code behind, you can retrieve the id of the current list item. But you can also decide which item to render by setting this attribute declaratively.&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&amp;lt;spuc:ListFieldIterator ID="TestListFieldIterator" runat="server"&lt;br /&gt;            ControlMode="Edit" ListId="{e2886b6e-4d63-4063-a02c-eac7fb3aef79}" ItemId="2" /&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;List&lt;/strong&gt;: In code behind, you can retrieve the current list by using this property.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Template&lt;/strong&gt;: you can set this property if you have deployed your own custom template to the 12\TEMPLATE\CONTROLTEMPLATES folder.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you first add one or more controls to render fields from the list, and then add a &lt;strong&gt;ListFieldIterator&lt;/strong&gt; control, it will automatically detect the fields already rendered and will not render them anymore. This can be useful if you want to change the order in which the controls must appear, or even more if you want to change the standard rendering of one or more fields (f.e. if you want to render one of the fields using Silverlight &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt;  ).&lt;/p&gt;&lt;pre&gt;&amp;lt;spuc:RichTextField ID="ContactTextField" runat="server"  &lt;br /&gt;      ControlMode="Edit" ListId="{e2886b6e-4d63-4063-a02c-eac7fb3aef79}" FieldName="Description"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;spuc:ListFieldIterator ID="TestListFieldIterator" runat="server"&lt;br /&gt;      ControlMode="Edit" ListId="{e2886b6e-4d63-4063-a02c-eac7fb3aef79}" /&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-254" title="listfielditerator-and-fields-before" src="http://karinebosch.files.wordpress.com/2009/03/listfielditerator-and-fields-before.png?w=595&amp;#038;h=365" alt="listfielditerator-and-fields-before" width="595" height="365" /&gt;&lt;/p&gt;&lt;p&gt;This does not count for controls added AFTER the &lt;strong&gt;ListFieldIterator&lt;/strong&gt; control.&lt;/p&gt;&lt;p&gt;Don&amp;#8217;t forget to add a page directive in order to be able to use the control:&lt;/p&gt;&lt;pre&gt;&amp;lt;%@ Register TagPrefix="spuc" Namespace="Microsoft.SharePoint.WebControls"&lt;br /&gt;             Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;/pre&gt;&lt;p&gt;You can use this control in web parts and application pages but in general it is used in custom list definitions. When creating a custom list definition, the columns of the list will be rendered in a standard &lt;strong&gt;DisplayForm&lt;/strong&gt;, &lt;strong&gt;NewForm&lt;/strong&gt; and &lt;strong&gt;EditForm&lt;/strong&gt;. If this standard rendering behavior does not satisfy your needs you can develop your own custom control templates. They need to be deployed in the &lt;strong&gt;12\TEMPLATE\CONTROLTEMPLATES&lt;/strong&gt; directory and need to be referenced in &lt;strong&gt;Forms&lt;/strong&gt; element of the &lt;strong&gt;schema.xml&lt;/strong&gt; of the custom list definition:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;Forms&amp;gt;&lt;br /&gt;    &amp;lt;Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx"  WebPartZoneID="Main"/&amp;gt;&lt;br /&gt;    &amp;lt;Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" Template="CustomersForm" WebPartZoneID="Main"/&amp;gt;&lt;br /&gt;    &amp;lt;Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" Template="CustomersForm" WebPartZoneID="Main"/&amp;gt;&lt;br /&gt;&amp;lt;/Forms&amp;gt;&lt;/pre&gt;&lt;p&gt;The &lt;strong&gt;Template&lt;/strong&gt; attribute must contain the name of the template that is defined in an ascx control deployed in the &lt;strong&gt;12\TEMPLATE\CONTROLTEMPLATES&lt;/strong&gt; folder.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;		              &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5394119099785151794?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5394119099785151794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5394119099785151794' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5394119099785151794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5394119099785151794'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/11/listfielditerator-control-to-render.html' title='ListFieldIterator Control to render the sharepoint fields the way you want.'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-2321967204078913633</id><published>2009-11-06T20:05:00.000-08:00</published><updated>2009-11-06T20:05:51.545-08:00</updated><title type='text'>Some Important Links</title><content type='html'>&lt;a href="http://techtrainingnotes.blogspot.com/2008/02/sharepoint-hiding-menus-not-using.html"&gt;http://techtrainingnotes.blogspot.com/2008/02/sharepoint-hiding-menus-not-using.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms473643.aspx"&gt;Add Custom Actions to UI&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb802730.aspx"&gt;Default Custom Action Locations and IDs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogit.create.pt/blogs/andrevala/archive/2007/12/02/SharePoint-2007-Deployment_3A00_-Overview.aspx"&gt;Content Types&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-2321967204078913633?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/2321967204078913633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=2321967204078913633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2321967204078913633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/2321967204078913633'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/11/some-important-links.html' title='Some Important Links'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-8296694870847856109</id><published>2009-11-03T21:12:00.000-08:00</published><updated>2009-11-03T21:12:06.680-08:00</updated><title type='text'>Hide Multiple Upload menu from a Document Library</title><content type='html'>Use this javascript&lt;br /&gt;&lt;br /&gt;&amp;lt;script language="JavaScript"&amp;gt;&lt;br /&gt;_spBodyOnLoadFunctionNames.push("HideNewIcons");&lt;br /&gt;function HideNewIcons()&lt;br /&gt;{&lt;br /&gt;var doc = document.getElementsByTagName('ie:menuitem');&lt;br /&gt;for(var i=0;i&amp;lt;doc.length;i++)&lt;br /&gt;{&lt;br /&gt;if(doc(i).id.match('MultipleUpload'))&lt;br /&gt;{&lt;br /&gt;doc(i).style.visibility="hidden";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-8296694870847856109?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/8296694870847856109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=8296694870847856109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8296694870847856109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/8296694870847856109'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/11/hide-multiple-upload-menu-from-document.html' title='Hide Multiple Upload menu from a Document Library'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp0.blogger.com/_mBxfQQ-GqTg/SFABtReZIPI/AAAAAAAAALM/ENgtlGSaS7Q/S220/IMG_0625.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343300690276792504.post-5908245481309219726</id><published>2009-11-03T19:55:00.000-08:00</published><updated>2009-11-03T21:28:26.192-08:00</updated><title type='text'>Add Custom Menus using CustomAction</title><content type='html'>Following are few examples of how to add a new menu to EditControlBlock,SiteSettings Gallary,SiteActions menu.&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;CustomAction &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id="NewEditItemMenu"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegistrationType="List"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegistrationId="101"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Location="EditControlBlock"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sequence="106"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title="MY ECB ITEM"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;UrlAction Url="/_layouts/viewlsts.aspx"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/CustomAction&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;CustomAction&lt;br /&gt;&amp;nbsp;&amp;nbsp; Id="NewSiteSettingsGallary"&lt;br /&gt;&amp;nbsp;&amp;nbsp; GroupId="Galleries"&lt;br /&gt;&amp;nbsp;&amp;nbsp; Location="Microsoft.SharePoint.SiteSettings"&lt;br /&gt;&amp;nbsp;&amp;nbsp; Sequence="106"&lt;br /&gt;&amp;nbsp;&amp;nbsp; Title="MY ECB ITEM"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;UrlAction Url="/_layouts/viewlsts.aspx"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/CustomAction&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;CustomAction&lt;br /&gt;&amp;nbsp;&amp;nbsp; Id="NewSiteActionsMenu"&lt;br /&gt;&amp;nbsp;&amp;nbsp; GroupId="SiteActions"&lt;br /&gt;&amp;nbsp;&amp;nbsp; Location="Microsoft.SharePoint.StandardMenu"&lt;br /&gt;&amp;nbsp;&amp;nbsp; Sequence="106"&lt;br /&gt;&amp;nbsp;&amp;nbsp; Title="MY ECB ITEM"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;UrlAction Url="/_layouts/viewlsts.aspx"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/CustomAction&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/Elements&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Using ControlAssembly to Add New Menus to any &lt;b&gt;GroupId&lt;/b&gt;&lt;/h2&gt;Check my other &lt;a href="http://milapshah.blogspot.com/2009/11/sharepoint-customaction-element.html"&gt;blogpost&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6343300690276792504-5908245481309219726?l=milapshah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milapshah.blogspot.com/feeds/5908245481309219726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6343300690276792504&amp;postID=5908245481309219726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5908245481309219726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343300690276792504/posts/default/5908245481309219726'/><link rel='alternate' type='text/html' href='http://milapshah.blogspot.com/2009/11/add-custom-menus-using-customaction.html' title='Add Custom Menus using CustomAction'/><author><name>milap shah</name><uri>http://www.blogger.com/profile/15455678652574340512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail'
