<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3468218280828126488</atom:id><lastBuildDate>Fri, 10 Feb 2012 20:41:55 +0000</lastBuildDate><category>Windows Phone</category><category>PowerShell</category><category>TDD</category><category>Project Management</category><category>SEO</category><category>Features</category><category>Governance</category><category>Multilingual</category><category>Client Model</category><category>TFS</category><category>MSF</category><category>SharePoint</category><category>Patterns</category><category>Workflow</category><category>SharePoint 2010</category><category>Training</category><category>Document Sets</category><category>Cloud</category><category>Snippets</category><category>CodePlex</category><category>Search Customization</category><category>Administration</category><title>Tobias Lekman - Blog</title><description /><link>http://blog.lekman.com/</link><managingEditor>noreply@blogger.com (Tobias Lekman)</managingEditor><generator>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/lekman" /><feedburner:info uri="lekman" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-9045918008114167307</guid><pubDate>Mon, 23 Jan 2012 09:34:00 +0000</pubDate><atom:updated>2012-01-23T09:34:33.628Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>Configuring SMTP relay to Live Mail for SharePoint 2010</title><description>&lt;p&gt;When developing SharePoint solutions, you normally use a virtual image locally or hosted on a Cloud service. If you wish to use outgoing emails you normally require an Exchange server. Instead, I am now installing relay to my live.com account hosted by Microsoft.&lt;/p&gt;  &lt;p&gt;First, I activate the SMTP server feature on the server via Server Manager:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-Q9PzdXDIHuI/Tx0pmcmOvkI/AAAAAAAAAWE/lD29P2qLlVY/image%25255B61%25255D.png?imgmax=800" width="587" height="435" /&gt;&lt;/p&gt;  &lt;p&gt;I then open the IIS 6.0 Manager, connect to the local SMTP server instance and configure the properties of the relay server.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-eUWAtMg_Npw/Tx0pm_hAByI/AAAAAAAAAWM/jNGIEB0bHI4/image%25255B63%25255D.png?imgmax=800" width="583" height="414" /&gt;&lt;/p&gt;  &lt;p&gt;Under &lt;strong&gt;Access&lt;/strong&gt; select &lt;strong&gt;Relay&lt;/strong&gt; and select the “All except the list below” option&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-_1oWd2gZSCs/Tx0pn5Ba0cI/AAAAAAAAAWU/lhWc7mXqayc/image%25255B59%25255D.png?imgmax=800" width="631" height="407" /&gt;&lt;/p&gt;  &lt;p&gt;From &lt;strong&gt;Delivery&lt;/strong&gt;, click &lt;strong&gt;Outbound Security&lt;/strong&gt; and enter your Live ID credentials and check the &lt;strong&gt;TLS encryption&lt;/strong&gt; option.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-9q4CL1g8NqQ/Tx0potfuYdI/AAAAAAAAAWY/Om2_WnjYLpk/image%25255B67%25255D.png?imgmax=800" width="536" height="417" /&gt;&lt;/p&gt;  &lt;p&gt;Under &lt;strong&gt;Advanced&lt;/strong&gt; set the smart host address to &lt;strong&gt;smtp.live.com&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-kHOpt6cqt3w/Tx0ppLFor7I/AAAAAAAAAWg/CeMsqL_mYts/image%25255B82%25255D.png?imgmax=800" width="315" height="347" /&gt;&lt;/p&gt;  &lt;p&gt;Last, configure the outgoing email settings from the Central Administration site under System Settings/Outgoing Email Settings.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-DDWy_IS-PA8/Tx0pps38RKI/AAAAAAAAAWs/9t0eohfKMoQ/image%25255B68%25255D.png?imgmax=800" width="646" height="299" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-9045918008114167307?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2012/01/configuring-smtp-relay-to-live-mail-for.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-Q9PzdXDIHuI/Tx0pmcmOvkI/AAAAAAAAAWE/lD29P2qLlVY/s72-c/image%25255B61%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-6306773159405120839</guid><pubDate>Thu, 24 Nov 2011 09:01:00 +0000</pubDate><atom:updated>2011-11-24T09:08:09.125Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>SharePoint, WCM and the Magic Quadrant</title><description>&lt;p&gt;&lt;a href="http://www.gartner.com/technology/reprints.do?id=1-17QB0QB&amp;amp;ct=111020&amp;amp;st=sb"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://lh4.ggpht.com/-iH2ELyMlR6A/Ts4H4Uywx4I/AAAAAAAAAT8/CTMf_RWShTs/image%25255B16%25255D.png?imgmax=800" width="335" height="343" /&gt;&lt;/a&gt;I was recently turned to &lt;a href="http://www.mkse.com/2011/11/18/2011-magic-quadrant-for-cms-bjod-pa-nagra-nyheter/" target="_blank"&gt;a post about the Magic Quadrant for CMS&lt;/a&gt; where Microsoft and SharePoint was nowhere to be seen. Emails were sent. Lync was flaring.&amp;#160; &lt;/p&gt;  &lt;p&gt;I often get the question how SharePoint compare to &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.episerver.com%2F&amp;amp;ei=_v7NTu8nwZiIB9rIteYO&amp;amp;usg=AFQjCNHWaIG7K2ZahWQtslMS5SqDeg0Lqg" target="_blank"&gt;EPiServer&lt;/a&gt; (who has a strong hold of WCM in Sweden) but the focus is only on what EPiServer can do – not what SharePoint can do that WCM products can’t. The point is – you cannot compare Microsoft SharePoint as a platform with products such as&amp;#160; EPiServer or &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CFUQFjAA&amp;amp;url=http%3A%2F%2Fwww.sitecore.net%2F&amp;amp;ei=__7NTvyeLIuXiQe1mKzHDg&amp;amp;usg=AFQjCNEpcoFbpWU0ku-A1zCp_NUsfujnPA" target="_blank"&gt;SiteCore&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;When looking at the Magic Quadrant for Horizontal Portals and Enterprise Content Management, Microsoft (and SharePoint) are in a clear leading position.&lt;/p&gt;  &lt;h2&gt;WCM versus ECM&lt;/h2&gt;  &lt;p&gt;There is a clear difference between WCM and ECM and the term “CMS” adds even further confusion.&lt;/p&gt;  &lt;p&gt;By definition, web content management (WCM) is for controlling the content of a website through the use of specific management tools based on a core repository. This includes content creation functions, such as templating, workflow and change management, and content deployment functions that deliver prepackaged or on-demand content to Web servers.&lt;/p&gt;  &lt;p&gt;ECM contains WCM and also document management, records management, image-processing, social content and workflow/business process management.&lt;/p&gt;  &lt;h2&gt;Much more than WCM&lt;/h2&gt;  &lt;p&gt;SharePoint 2010 is so much more than web content management. If you only need web content management, will never require ECM features and trust Gartner on this, go for SiteCore. But if you would require the possibilities to add business process management, DAM, e-forms, document composition, advanced search, information archiving and packaged application integration; then SharePoint is for you!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“…Microsoft SharePoint takes hold in an organization, users naturally begin exploring its suitability for a wider range of content management applications and its potential as a replacement for existing solutions. Essential considerations for this category include abilities to manage rich metadata, enable full life cycle control, allow easier migrations from other repositories, network drives or file servers, and to bring some analytic or business intelligence-like capability to unstructured data overall. Understanding how content relates to larger enterprise information management disciplines will also become critical.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Source: &lt;a href="http://www.gartner.com/technology/reprints.do?id=1-17QB0QB&amp;amp;ct=111020&amp;amp;st=sb" target="_blank"&gt;Gartner&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-6306773159405120839?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/11/sharepoint-wcm-and-magic-quadrant.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-iH2ELyMlR6A/Ts4H4Uywx4I/AAAAAAAAAT8/CTMf_RWShTs/s72-c/image%25255B16%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-1897762720898674056</guid><pubDate>Thu, 27 Oct 2011 09:34:00 +0000</pubDate><atom:updated>2011-10-27T10:37:11.737+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cloud</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>Resources: Building a Private Cloud for SharePoint 2010</title><description>&lt;p&gt;In short; a private cloud is an on-premise, virtualized farm that can automatically grow to cater for your needs. The key here is &lt;em&gt;automated&lt;/em&gt;. Simply creating an over-sized static farm and allowing applications to run here is not the same thing; that’s traditional hosting.&lt;/p&gt;  &lt;p&gt;In addition, a hybrid cloud is where the private cloud also uses public cloud services, such as Office 365, &lt;/p&gt;  &lt;p&gt;Private cloud architectures are becoming popular and a large amount of good resources are out there for you right now. Why not take a look?&lt;/p&gt;  &lt;h3&gt;Private Cloud For the Technical Decision Maker&lt;/h3&gt;  &lt;p&gt;Microsoft has published an excellent overview of the different types of cloud service models and their impact on investment, governance, level of control and the challenges a business might face.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-gb/cloud/hh147296.aspx"&gt;http://technet.microsoft.com/en-gb/cloud/hh147296.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;MOF Infrastructure and Planning Design Guide&lt;/h3&gt;  &lt;p&gt;Microsoft has release a whitepaper guide on how to use the Microsoft Operations Framework for service management of a private cloud. Available now after registration on the Microsoft Connect site.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://connect.microsoft.com/site14/Downloads"&gt;https://connect.microsoft.com/site14/Downloads&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Optimizing SQL Server for Private Cloud&lt;/h3&gt;  &lt;p&gt;SQL Server 2012 codename “Denali” contains many service-optimizations for cloud services. Microsoft has released a poster and a guidance on how to optimize SQL server resources for a private cloud deployment.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/sqlserver/en/us/solutions-technologies/cloud-computing/private-cloud.aspx"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-wvEmB1LoG74/TqkmOxgWimI/AAAAAAAAATA/Nz3hB9Jv1XM/image%25255B2%25255D.png?imgmax=800" width="244" height="169" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Full article: &lt;a href="http://www.microsoft.com/sqlserver/en/us/solutions-technologies/cloud-computing/private-cloud.aspx"&gt;http://www.microsoft.com/sqlserver/en/us/solutions-technologies/cloud-computing/private-cloud.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Video: How to Build a Private Cloud&lt;/h3&gt;  &lt;p&gt;Chris Henley discusses “the emergence of a private cloud as the logical next step in virtualization and the amazing benefits that you can get by automating IT services in your organization”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/b/chenley/archive/2011/08/15/how-to-build-a-private-cloud-part1.aspx" target="target"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-nKLp6KqWDhw/TqkltAj-fcI/AAAAAAAAATI/PT1OZhvG7pA/image%25255B1%25255D.png?imgmax=800" width="299" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Video: &lt;a href="http://blogs.technet.com/b/chenley/archive/2011/08/15/how-to-build-a-private-cloud-part1.aspx"&gt;http://blogs.technet.com/b/chenley/archive/2011/08/15/how-to-build-a-private-cloud-part1.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Deploying Cloud-Based Solutions&lt;/h3&gt;  &lt;p&gt;Finally, Phil Wiklund has released a book on cloud deployments for SharePoint. I found out about the book while attending Phil’s session at the Microsoft SharePoint Conference in Anaheim (&lt;a href="http://www.sharepointedutech.com/2011/10/05/spc223-deploying-sharepoint-2010-in-private-public-and-hybrid-cloud-architectures/" target="_blank"&gt;read my recap of the session&lt;/a&gt;). The book is very well written and I recommend it to anyone in the process of planning or deploying cloud solutions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://shop.oreilly.com/product/0790145331182.do" target="target"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="book2" border="0" alt="book2" src="http://lh3.ggpht.com/-sXgmYDfwVPs/TqkluDUlD1I/AAAAAAAAATM/zeOQu4VoABc/book2.jpg?imgmax=800" width="201" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Deploying Cloud-Based Solutions, &lt;a href="http://shop.oreilly.com/product/0790145331182.do" target="_blank"&gt;available from O’Reilly&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/3468218280828126488-1897762720898674056?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/10/resources-building-private-cloud-for.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-wvEmB1LoG74/TqkmOxgWimI/AAAAAAAAATA/Nz3hB9Jv1XM/s72-c/image%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-5584822474555169755</guid><pubDate>Tue, 11 Oct 2011 08:10:00 +0000</pubDate><atom:updated>2011-10-11T09:10:00.794+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Converting C# to PowerShell</title><description>&lt;p&gt;I found a great tip from &lt;a href="http://msmvps.com/blogs/paulomorgado/archive/2009/09/18/powershell-for-the-net-developer.aspx" target="_blank"&gt;Paulo Morgado&lt;/a&gt; around generating PowerShell from C# code.&lt;/p&gt;  &lt;p&gt;.NET Reflector has an array of &lt;a href="http://reflectoraddins.codeplex.com/releases/view/1805" target="_blank"&gt;add-ons on CodePlex&lt;/a&gt;, and one of these is the &lt;a href="http://reflectoraddins.codeplex.com/wikipage?title=PowerShellLanguage&amp;amp;ProjectName=reflectoraddins" target="_blank"&gt;PowerShell add-on&lt;/a&gt; that allows you to disassemble code directly into PowerShell.&lt;/p&gt;  &lt;p&gt;In this example, I am opening the method ChangeAccountPassword from the SPUtility library in SharePoint:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-FZPjE--RqwA/TpP5ygR56HI/AAAAAAAAAR4/_drWB4orZew/s1600-h/image%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-nm0ue3G1iXU/TpP5z4tAf1I/AAAAAAAAASA/ASF4nqUSCiY/image_thumb%25255B2%25255D.png?imgmax=800" width="442" height="433" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I can now change targets from C# to PowerShell. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-ewN3_EyydaY/TpP50lpq4ZI/AAAAAAAAASI/zz4XzGx060s/s1600-h/image%25255B13%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-MClWV3qpj1g/TpP517jgw8I/AAAAAAAAASQ/noXSNXYbf74/image_thumb%25255B7%25255D.png?imgmax=800" width="443" height="510" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you need to convert helper methods from C# to PowerShell or if you’re new to PowerShell syntax, this tool is really helpful!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-5584822474555169755?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/10/converting-c-to-powershell.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-nm0ue3G1iXU/TpP5z4tAf1I/AAAAAAAAASA/ASF4nqUSCiY/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-8870069160941429973</guid><pubDate>Sun, 09 Oct 2011 18:56:00 +0000</pubDate><atom:updated>2011-10-09T19:56:03.442+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>SharePoint Conference 2011</title><description>&lt;p&gt;This year’s conference was great and provided everything; sunny weather, interesting speakers, great parties, cool swag giveaways from the exhibitors and most of all a great amount of information.&lt;/p&gt;  &lt;p&gt;It is a humbling feeling to look back over the crowd during the opening keynote and not being able to see the end of the room for the 7500 or so attendees. Even more so when considering the million people strong SharePoint community that is out there today!&lt;/p&gt;  &lt;p&gt;During the event, I did some guest blogging on &lt;a href="http://www.sharepointedutech.com/" target="_blank"&gt;SharePointEduTech&lt;/a&gt; which is hosted by &lt;a href="http://twitter.com/#!/davecoleman146" target="_blank"&gt;Dave Coleman&lt;/a&gt;. I wrote a few pieces around the sessions that I enjoyed the most.&lt;/p&gt;  &lt;h2&gt;SPC223: Deploying SharePoint 2010 in Private, Public and Hybrid Cloud Architectures&lt;/h2&gt;  &lt;p&gt;The conference sessions has had a few ups-n-downs but there has been a couple that really stood out. &lt;a href="http://philwicklund.com/"&gt;Phil Wicklund&lt;/a&gt;’s session on Cloud deployment options for SharePoint however was excellent. I had prepared for the conference with a sheet of questions, most of which was targeted to this session, and all of them were covered off the bat in the actual session.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sharepointedutech.com/2011/10/05/spc223-deploying-sharepoint-2010-in-private-public-and-hybrid-cloud-architectures/" target="_blank"&gt;Read more…&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;SPC102: Drive Adoption and Get Users Excited About SharePoint&lt;/h2&gt;  &lt;p&gt;This was the first session I attended at the conference and I was surprised how much I enjoyed it. I had been registering for some pretty heavy technical sessions and this was not it. It was however one of the most useful ones that I can take home with me and use in my everyday projects.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sharepointedutech.com/2011/10/06/spc102-drive-adoption-and-get-users-excited-about-sharepoint/" target="_blank"&gt;Read more…&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;SPC373: Performance Tuning SharePoint 2010&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.binarywave.com/blogs/eshupps/default.aspx"&gt;Eric Shupps, the “SharePoint Cowboy”&lt;/a&gt;, held an intense session focusing on performance tuning SharePoint 2010. It was filled with live demos and Eric’s usual high energy. It also contained a great amount of helpful tips and tricks for improving performance on your farm installation.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sharepointedutech.com/2011/10/09/spc373-performance-tuning-sharepoint-2010/" target="_blank"&gt;Read more…&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/3468218280828126488-8870069160941429973?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/10/sharepoint-conference-2011.html</link><author>noreply@blogger.com (Tobias Lekman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-471676283022526343</guid><pubDate>Thu, 29 Sep 2011 08:22:00 +0000</pubDate><atom:updated>2011-09-29T09:25:19.225+01:00</atom:updated><title>Sogeti SharePoint Round Table # 11: Attending and Speaking</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/-0HD6amH5QPk/ToQqoOLiEAI/AAAAAAAAARw/5pQaQxGL1C8/s1600-h/image%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://lh3.ggpht.com/-tJnt4ZjxEQM/ToQqqsxgpbI/AAAAAAAAAR0/EuJH-qg0jsU/image_thumb%25255B2%25255D.png?imgmax=800" width="235" height="114" /&gt;&lt;/a&gt;It’s that time of the year again – SharePoint Round Table is kicking off, this time in Gothenburg. &lt;a href="http://www.zooma.se/" target="_blank"&gt;Zooma&lt;/a&gt; is hosting the event at their offices and as usual, we meet lunch-to-lunch over two days.&lt;/p&gt;  &lt;p&gt;This year’s speakers include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Anders Björklund&lt;/strong&gt;, &lt;a href="http://zooma.se/" target="_blank"&gt;Zooma&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Niklas Möllberg&lt;/strong&gt;, &lt;a href="http://www.stena.com/" target="_blank"&gt;Stena Rederi&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Marc DiBiaso&lt;/strong&gt;, &lt;a href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Martin Olausson&lt;/strong&gt;, &lt;a href="http://zooma.se/" target="_blank"&gt;Zooma&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Tony Ottosson Gadd&lt;/strong&gt;, &lt;a href="http://www.chalmers.se/" target="_blank"&gt;Chalmers&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Diana Hiorth Persson&lt;/strong&gt;, &lt;a href="http://www.jordbruksverket.se/" target="_blank"&gt;Jordbruksverket&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Therese Sinter, &lt;/strong&gt;&lt;a href="http://www.sogeti.se" target="_blank"&gt;Sogeti&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Tobias Lekman&lt;/strong&gt;, &lt;a href="http://www.sogeti.se/" target="_blank"&gt;Sogeti&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://maps.google.com/maps?q=Theres Svenssons gata 15++Gothenburg+417 55+Sweden"&gt;&lt;img alt="Zooma Headquarters" src="http://maps.google.com/maps/api/staticmap?center=Theres Svenssons gata 15++Gothenburg+417 55+se&amp;amp;zoom=14&amp;amp;size=250x200&amp;amp;maptype=roadmap&amp;amp;markers=color:red|Theres Svenssons gata 15++Gothenburg+417 55+Sweden&amp;amp;sensor=true" /&gt; &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For full agenda and registration information, see:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sogeti.se/Nyheter-Media/Kalendarium/SharePoint-Round-Table-Goteborg-2011/" target="_blank"&gt;http://www.sogeti.se/Nyheter-Media/Kalendarium/SharePoint-Round-Table-Goteborg-2011/&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/3468218280828126488-471676283022526343?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/09/sogeti-sharepoint-round-table-11.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-tJnt4ZjxEQM/ToQqqsxgpbI/AAAAAAAAAR0/EuJH-qg0jsU/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-8127150653901365364</guid><pubDate>Mon, 19 Sep 2011 08:01:00 +0000</pubDate><atom:updated>2011-09-19T09:06:52.562+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">CodePlex</category><title>Convert Web applications to Claims Authentication</title><description>&lt;p&gt;Once you have created your SharePoint 2010 web application from within Central Administration using Classic, there is no way to change this to claims using the graphical interface from the Central Administration site.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-K_JPA3KO_zc/Tnb4CbGEAAI/AAAAAAAAARk/eLVeRkRV8kk/image%25255B1%25255D.png?imgmax=800" width="522" height="208" /&gt;&lt;/p&gt;  &lt;p&gt;There is, however, a way to do this using our old trusted friend PowerShell.&lt;/p&gt;  &lt;h2&gt;Background&lt;/h2&gt;  &lt;p&gt;When using Classic mode, the web.config file is set to use Windows authentication. By using claims, we switch to Forms authentication and we introduce the use of the Security Token Service, a separate IIS application that distributes a “claim”, i.e. a security token for the duration of the client’s visit.&lt;/p&gt;  &lt;p&gt;The web.config file looks like this on a Classic mode web application, i.e. has “Windows” authentication:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-pj5FXBjOHt4/Tnb2tst-1PI/AAAAAAAAARo/acuBm2K8hPU/image9%25255B1%25255D.png?imgmax=800" width="511" height="181" /&gt;&lt;/p&gt;  &lt;h2&gt;Executing the PowerShell script&lt;/h2&gt;  &lt;p&gt;The script runs as follows:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;function Enable-Claims([&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;] $Identity)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    $w = Get-SPWebApplication $Identity&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    $w.UseClaimsAuthentication = &lt;span style="color: #006080"&gt;&amp;quot;True&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    $w.Update()&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    $w.ProvisionGlobally()&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Write-Host -ForegroundColor Green &lt;span style="color: #006080"&gt;&amp;quot;Claims authentication enabled for &amp;quot;&lt;/span&gt; -NoNewline&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Write-Host -ForegroundColor Green $Identity&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;Enable-Claims &lt;span style="color: #006080"&gt;&amp;quot;http://finweb.contoso.com&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The web.config is now configured using “Forms” authentication as:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-GPGCoBO04Q4/Tnb2vr47RlI/AAAAAAAAARs/Ma8EthPgu1k/image14%25255B1%25255D.png?imgmax=800" width="402" height="149" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The script can be downloaded from here: &lt;a href="http://lekman.codeplex.com/releases/view/65930" target="_blank"&gt;http://lekman.codeplex.com/releases/view/65930&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/3468218280828126488-8127150653901365364?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/09/convert-web-applications-to-claims.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-K_JPA3KO_zc/Tnb4CbGEAAI/AAAAAAAAARk/eLVeRkRV8kk/s72-c/image%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-5452817458858552076</guid><pubDate>Tue, 30 Aug 2011 14:28:00 +0000</pubDate><atom:updated>2011-08-30T15:52:10.452+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">Governance</category><title>Information Lifecycle Management in SharePoint</title><description>&lt;p&gt;Let’s face it – without data, SharePoint is just an empty shell. I urge clients to spend more hours considering the implications of moving all of their documents from the 10 year old file server onto SharePoint rather than musing over the benefits of custom development jobs.&lt;/p&gt;  &lt;p&gt;Finding information in today’s document management systems or file storage systems has become an insurmountable task. Gigs and terabytes of data of old versions of documents, 16 edits of the same video clip, 10 revisions of the same CAD file… and so on. Sure, we can implement search engines and spend time tweaking algorithms to sift through the waste in order to find the nuggets, but are we not approaching the issue the wrong way around?&lt;/p&gt;  &lt;h3&gt;Word from the Wise&lt;/h3&gt;  &lt;p&gt;A discussion from a recent workshop:&lt;/p&gt;  &lt;p&gt;Client A: &lt;em&gt;“Should we allow people to upload anything to SharePoint then?”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Client B: &lt;em&gt;“Well, no. It’s just too easy today. Slap in the memory stick, transfer your 100s of images to My Documents and the lot is synchronized to the NAS”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Client A: &lt;em&gt;“Well, who owns the information?”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Client B: &lt;em&gt;“How about this – either own up to the information or bin it?”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Best idea I ever heard. Information without ownership is volatile or pointless and should not be the burden of a corporate document management system. If it is, store it in a temporary area used for information gathering, such as a document workspace or team site, with a policy to delete once the master document has been approved.&lt;/p&gt;  &lt;h3&gt;Solutions?&lt;/h3&gt;  &lt;p&gt;The best solution by far is to consciously &lt;strong&gt;plan and manage the information silos&lt;/strong&gt; within the organization and seek consensus within the business. Train, plan and evangelize – your data matters. Good communication that leads to real understanding outweighs technical efforts 1000-1. &lt;/p&gt;  &lt;p&gt;However, SharePoint has some excellent solutions to help you combat waste documents.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Insist on ownership:&lt;/strong&gt; If we create a base content type that requires a document owner to be specified, we know who to turn to when the information needs to be updated or removed. Too hard for the users? Pre-fill the information based on type of document or area within the site?&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-69oq8zYim3I/TlzzfN4BtfI/AAAAAAAAAQ4/hVEOaDp2uX4/image%25255B7%25255D.png?imgmax=800" width="537" height="175" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Information Policies:&lt;/strong&gt; Add an information policy that forces uses to update or review the information. If the document is not reviewed – delete it or archive it. You can also start custom workflows that let you customize the retention stage.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-qtxApmwS91M/Tlzzg7KMfZI/AAAAAAAAAQ8/jm06R3EwwYw/s1600-h/image%25255B12%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-x9mSAm10_7c/TlzzingnWbI/AAAAAAAAARA/pRf9rTPpvuo/image_thumb%25255B7%25255D.png?imgmax=800" width="439" height="456" /&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/3468218280828126488-5452817458858552076?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/08/information-lifecycle-management-in.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-69oq8zYim3I/TlzzfN4BtfI/AAAAAAAAAQ4/hVEOaDp2uX4/s72-c/image%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-5600512335467819052</guid><pubDate>Thu, 25 Aug 2011 07:57:00 +0000</pubDate><atom:updated>2011-08-25T08:58:55.819+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">Document Sets</category><title>"Cannot create a folder in a Document Set" Error</title><description>&lt;p&gt;This strange error can be seen in the UI when creating a custom document set from a feature with a default document but where the content type used by the default document is not set to allowed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-1I6n1HN5BoY/TlYAdDmVsuI/AAAAAAAAAQw/osq6lj42xRU/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-rFNt9B3A8Uw/TlYAeq-KRDI/AAAAAAAAAQ0/yAeZm14m9Hw/image_thumb%25255B1%25255D.png?imgmax=800" width="570" height="124" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note the &lt;strong&gt;AllowedContentType 0x0101&lt;/strong&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-5600512335467819052?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/08/create-folder-in-document-set-error.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-rFNt9B3A8Uw/TlYAeq-KRDI/AAAAAAAAAQ0/yAeZm14m9Hw/s72-c/image_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-2853370769705297493</guid><pubDate>Wed, 24 Aug 2011 07:37:00 +0000</pubDate><atom:updated>2011-08-24T08:44:57.071+01:00</atom:updated><title>Deploying Document Sets and List Definitions in Features</title><description>&lt;p&gt;Recently, I had an issue where my document set customizations just would not include in my feature deployment.&lt;/p&gt;  &lt;p&gt;I have already &lt;a href="http://blog.lekman.com/2011/05/custom-document-set-features-in.html"&gt;followed my own guidelines&lt;/a&gt; for making the correct schema file, provisioning the welcome page etc… now the default documents simply would not kick in.&lt;/p&gt;  &lt;p&gt;The error is all in the solution packaging. You need the following:&lt;/p&gt;  &lt;p&gt;1. A module containing the default documents, deploying the default documents to the content type folder as: &lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&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;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&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;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Module&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;DefaultDocuments&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;_cts/MyDocSet&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;File&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Path&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;DefaultDocuments\Sample.docx&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Sample.docx&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Module&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&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;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;2. Reference the default documents in the content type XML:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;XmlDocument&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #ff0000"&gt;NamespaceURI&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/office/documentsets/defaultdocuments&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;dd:DefaultDocuments&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;xmlns:dd&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/office/documentsets/defaultdocuments&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;AddSetName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;LastModified&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1/1/2010 08:00:00 AM&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;DefaultDocument&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Sample.docx&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;idContentType&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0x0101&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;dd:DefaultDocuments&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;XmlDocument&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;3. Content type feature that adds the document set with an event receiver that implements DocumentSetFeatureReceiver (&lt;a href="http://blog.lekman.com/2011/05/custom-document-set-features-in.html"&gt;read more here&lt;/a&gt;)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;4. A feature for the list definition that specifies the content type feature as a dependency, &lt;strong&gt;guaranteeing that the content types are activated first&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And now, voila! My document set has all the default documents.&lt;strong&gt; The key is to activate the content types before the list definition and instance.&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-2853370769705297493?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/08/deploying-document-sets-and-list.html</link><author>noreply@blogger.com (Tobias Lekman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-8059508137880235799</guid><pubDate>Tue, 16 Aug 2011 12:40:00 +0000</pubDate><atom:updated>2011-08-16T13:40:22.546+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cloud</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>SharePoint Development on the Cloud</title><description>&lt;p&gt;In my last two projects, we have made the decision to use a cloud-based VMWare hosting service named &lt;a href="http://www.cloudshare.com/" target="_blank"&gt;CloudShare&lt;/a&gt; that creates ready-made SharePoint 2010 environments.&lt;/p&gt;  &lt;p&gt;The service is a little bit slower than when running the image locally on my quad-core SSD laptop, but the approach solves a large number of issues for us:&lt;/p&gt;  &lt;h2&gt;Issue 1: Demands on developer laptops&lt;/h2&gt;  &lt;p&gt;We have more than 1000 consultants nationally, more than 20,000 consultants world-wide and more than 100,000 consultants in the entire business group. Keeping everyone up-to-date with a laptop that is fast enough for development is a huge task where mainboards and SSD drives go under every week. Since we can now use pretty much any hardware and remote in to the environment, we eliminate a large administrative burden and cost.&lt;/p&gt;  &lt;h2&gt;Issue 2: Sharing and Staging&lt;/h2&gt;  &lt;p&gt;CloudShare allows for the consultant to share an environment with anyone using an email address. Once the recipient opens the link, he/she gets a snapshot copy of the environment to review for 48 hours.&lt;/p&gt;  &lt;p&gt;In addition, you get a static web URL that can be used to redirect to your development site that you can share with the client.&lt;/p&gt;  &lt;h2&gt;Issue 3. Licensing&lt;/h2&gt;  &lt;p&gt;We normally have to worry about licensing issues where a new development environment should be financed by the client, not the consultant. With CloudShare, we rent the development environments monthly for a low cost which can be billed to the client.&lt;/p&gt;  &lt;h2&gt;Future?&lt;/h2&gt;  &lt;p&gt;We use Team Foundation System for everything in the project – source code, project planning, change management, bug tracking and reporting, test management, document management and forecast reporting. At the moment, we connect the service back to the client TFS instance or a shared corporate instance.&lt;/p&gt;  &lt;p&gt;According to Microsoft, the &lt;a href="http://blogs.msdn.com/b/dannawi/archive/2011/01/24/the-next-tfs-as-a-cloud-service.aspx" target="_blank"&gt;next version of TFS will be fully deployable on Azure&lt;/a&gt;. Furthermore, there are several companies out there that does TFS SaaS hosting:     &lt;br /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.saasmadeeasy.com/"&gt;Saas Made Easy&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.phase2.com/hosted_team_foundation_server_overview2.aspx"&gt;Phase2&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.teamdevcentral.com/"&gt;TeamDevCentral&lt;/a&gt; (Product of &lt;a href="http://www.rationaleyes.com/"&gt;Rational Eyes&lt;/a&gt;)&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; – your project must be open source &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.tfs2010hosting.com/"&gt;http://www.tfs2010hosting.com&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.praktikhosting.com/"&gt;http://www.praktikhosting.com&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://classifieds.websitegear.com/view/3267"&gt;ASPHostCentral&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;[Source: &lt;a href="http://blogs.msdn.com/b/granth/archive/2010/07/16/hosted-team-foundation-server.aspx" target="_blank"&gt;MSDN&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/3468218280828126488-8059508137880235799?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/08/sharepoint-development-on-cloud.html</link><author>noreply@blogger.com (Tobias Lekman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-8885112807410375853</guid><pubDate>Wed, 03 Aug 2011 08:41:00 +0000</pubDate><atom:updated>2011-08-03T09:41:06.289+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">CodePlex</category><title>Un-ghosting Page Layouts</title><description>&lt;p&gt;Recently I had issues with page layouts that “ghosted” themselves, i.e. customized versions of page layouts and master pages were added to the database causing future updates from features to be ignored.&lt;/p&gt;  &lt;p&gt;When editing a page layout in SharePoint Designer, two tags are added to the @Page attribute. &lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;meta&lt;/font&gt;:&lt;font color="#ff0000"&gt;webpartpageexpansion&lt;/font&gt;=&amp;quot;full&amp;quot; &lt;font color="#ff0000"&gt;meta&lt;/font&gt;:&lt;font color="#ff0000"&gt;progid&lt;/font&gt;=&amp;quot;SharePoint.WebPartPage.Document&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;These tags causes the page layout to automatically be ghosted directly after deploying these with a feature. Step one was to remove the tags and redeploy the feature.&lt;/p&gt;  &lt;p&gt;Now, the page layouts will not update as they are ghosted. I then found a very nice console application on &lt;a href="http://dirkvandenberghe.com/2009/03/24/how-to-ghost-back-page-layouts.html" target="_blank"&gt;Dirk Van den Berghe’s blog&lt;/a&gt; which I turned into a PowerShell script instead. Now, all page layouts are reset to site definition.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; Reset-PageLayouts([&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$Identity)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     Write-Host -ForegroundColor Green &lt;span style="color: #006080"&gt;&amp;quot;Resetting page layouts at URL &amp;quot;&lt;/span&gt; -NoNewline;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     Write-Host -ForegroundColor Green $Identity&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     $s = Get-SPSite $Identity&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     $w = $s.RootWeb&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     $ps = New-Object Microsoft.SharePoint.Publishing.PublishingSite($s)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     $pls = $ps.PageLayouts&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     Foreach ($pl &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; $pls)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     {        &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;         $f = $w.GetFile($pl.ServerRelativeUrl)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;         &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;         Write-Host&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;         Write-Host -ForegroundColor Green &lt;span style="color: #006080"&gt;&amp;quot;Layout page name: &amp;quot;&lt;/span&gt; -NoNewline&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;         Write-Host -ForegroundColor Green $f.Name        &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;         Write-Host -ForegroundColor Green &lt;span style="color: #006080"&gt;&amp;quot;Status before: &amp;quot;&lt;/span&gt; -NoNewline&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;         Write-Host -ForegroundColor Green $f.CustomizedPageStatus&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;         &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;         $f.RevertContentStream()&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;         &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;         Write-Host -ForegroundColor Green &lt;span style="color: #006080"&gt;&amp;quot;Status after: &amp;quot;&lt;/span&gt; -NoNewline&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;         Write-Host -ForegroundColor Green $f.CustomizedPageStatus&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;     &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt;     $w.Dispose()&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt;     $s.Dispose()&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can download the script, and other useful functions, at my CodePlex site at &lt;a href="http://lekman.codeplex.com/releases/view/65930"&gt;http://lekman.codeplex.com/releases/view/65930&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/3468218280828126488-8885112807410375853?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/08/un-ghosting-page-layouts.html</link><author>noreply@blogger.com (Tobias Lekman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-2622297372419126075</guid><pubDate>Wed, 25 May 2011 07:27:00 +0000</pubDate><atom:updated>2011-05-25T08:45:27.036+01:00</atom:updated><title>Hiding Inactive Ribbon Commands in SharePoint 2010</title><description>&lt;p&gt;The SharePoint ribbon is still new to some end users who are still using Office 2003 or have limited knowledge about Office in general. I have on several occasions heard that the amount of options made available to the user are daunting.&lt;/p&gt;  &lt;p&gt;In this post, I am looking at removing the ribbon commands that are unavailable for the user, or “greyed out” and also removing the entire group should none of the commands in that group be available.&lt;/p&gt;  &lt;p&gt;The whole purpose of this is to increase usability for the end users and I am fully aware that this will not be everyone’s cup of tea, so like it or leave it. I would definitely recommend end user training over technical implementations, but the combination of these worked well for clients of mine in several occasions.&lt;/p&gt;  &lt;h2&gt;Customizing the Ribbon&lt;/h2&gt;  &lt;p&gt;First of all, you can add new tab sections, remove existing tabs, limit what options are available to the rich-text editor and add your own context-driven groups.&lt;/p&gt;  &lt;p&gt;Chris O’Brien has an excellent series of posts on ribbon customizations, which can be read at:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.sharepointnutsandbolts.com/2010/01/customizing-ribbon-part-1-creating-tabs.html" target="_blank"&gt;Customizing the ribbon (part 1) – creating tabs, groups and controls&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sharepointnutsandbolts.com/2010/01/adding-ribbon-items-into-existing.html" target="_blank"&gt;Adding ribbon items into existing tabs/groups (ribbon customization part 2)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sharepointnutsandbolts.com/2010/02/ribbon-customizations-dropdown-controls.html" target="_blank"&gt;Ribbon customizations - dropdown controls, Client Object Model and JavaScript Page Components&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sharepointnutsandbolts.com/2010/02/customize-ribbon-programmatically-from.html" target="_blank"&gt;Customize the ribbon programmatically from web parts and field controls&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For information on how to customize the editing options for the rich text editor, check out Waldek Mastykarz’s blog entries:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.mastykarz.nl/consistent-content-authoring-sharepoint-2010-rich-text-editor/" target="_blank"&gt;Consistent content authoring in SharePoint 2010 Rich Text Editor&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.mastykarz.nl/foolproof-consistent-content-authoring-sharepoint-2010-rich-text-editor/" target="_blank"&gt;Fool-proof consistent content authoring in SharePoint 2010 Rich Text Editor&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Hiding Inactive Commands and Groups&lt;/h2&gt;  &lt;p&gt;If a read-only user uses the ribbon on a team site, he/she will see a set of options that are not available:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sUXF1wIDVtE/Tdyy54W9HmI/AAAAAAAAAO8/7j1dVy8SzKc/s1600-h/image3%5B1%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_sUXF1wIDVtE/TdyvTGWOh8I/AAAAAAAAAPA/fkHshSTb2-4/image3_thumb.png?imgmax=800" width="580" height="367" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Running a small amount of jQuery and CSS, the user is instead presented with the following options:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_sUXF1wIDVtE/TdyvVWYyYLI/AAAAAAAAAPE/u_YS-sB8elw/s1600-h/image6%5B1%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_sUXF1wIDVtE/TdyvXOm19GI/AAAAAAAAAPI/GszZ-LvjKuA/image6_thumb.png?imgmax=800" width="584" height="369" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Implementation:&lt;/h3&gt;  &lt;p&gt;The inactive links in a ribbon is attributed with the CSS class “ms-cui-disabled” and we can hide these with a CSS stylesheet as:    &lt;br /&gt;&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; a.ms-cui-disabled&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     display: none !important;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Then, a jQuery function checks to see what tab groups have only hidden content and hides these. In addition, the hidden tab actions containers are removed so that all controls are top aligned.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; checkRibbon() {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Loop the tab groups&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     $(&lt;span style="color: #006080"&gt;&amp;quot;div.ms-cui-tabContainer ul li.ms-cui-group&amp;quot;&lt;/span&gt;).each(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; obj = $(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// How many links in total in this group?&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; allLinks = $(&lt;span style="color: #006080"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;, obj).length;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;         &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// How many are disabled?&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; disabledLinks = $(&lt;span style="color: #006080"&gt;&amp;quot;a.ms-cui-disabled&amp;quot;&lt;/span&gt;, obj).length;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// If all links are gone, hide the ribbon group&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (allLinks == disabledLinks) {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;             obj.hide();&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Some are active, show the group&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;             obj.show();&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Remove the container for inactive controls so that all &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// controls are top aligned&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;             $(&lt;span style="color: #006080"&gt;&amp;quot;a.ms-cui-disabled&amp;quot;&lt;/span&gt;, obj).each(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ($(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;).parent().attr(&lt;span style="color: #006080"&gt;&amp;quot;class&amp;quot;&lt;/span&gt;) == &lt;span style="color: #006080"&gt;&amp;quot;ms-cui-row&amp;quot;&lt;/span&gt;) {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;                     $(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;).parent().hide();&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;                 }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;             });&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Personally, I do not like the pages view on the page editing &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt;  31:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// section and the ID is in a format that do not allow direct &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum32"&gt;  32:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// removal in CSS. Very optional.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum33"&gt;  33:&lt;/span&gt;         $(&lt;span style="color: #006080"&gt;&amp;quot;span&amp;quot;&lt;/span&gt;, obj).each(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum34"&gt;  34:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ($(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;).attr(&lt;span style="color: #006080"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;) == &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum35"&gt;  35:&lt;/span&gt;                     &lt;span style="color: #006080"&gt;&amp;quot;Ribbon.Library.CustomViews-LargeMedium-2-2&amp;quot;&lt;/span&gt;) {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum36"&gt;  36:&lt;/span&gt;                 $(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;).hide();&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum37"&gt;  37:&lt;/span&gt;             }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum38"&gt;  38:&lt;/span&gt;         });&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum39"&gt;  39:&lt;/span&gt;     });&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum40"&gt;  40:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum41"&gt;  41:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum42"&gt;  42:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Track current selected ribbon tab&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum43"&gt;  43:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; ribbonSelected;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum44"&gt;  44:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum45"&gt;  45:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; checkRibbonState() {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum46"&gt;  46:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Has the ribbon tab changed or has the ribbon never been set up?&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum47"&gt;  47:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; id = $(&lt;span style="color: #006080"&gt;&amp;quot;li.ms-cui-tt-s&amp;quot;&lt;/span&gt;).attr(&lt;span style="color: #006080"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum48"&gt;  48:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (ribbonSelected != id)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum49"&gt;  49:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum50"&gt;  50:&lt;/span&gt;         ribbonSelected = id;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum51"&gt;  51:&lt;/span&gt;         checkRibbon();&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum52"&gt;  52:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum53"&gt;  53:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum54"&gt;  54:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum55"&gt;  55:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Start the watcher for ribbon select. Decrease interval if you find &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum56"&gt;  56:&lt;/span&gt; &lt;span style="color: #008000"&gt;// client has performance issues, I found none during testing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum57"&gt;  57:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; beginCheckRibbon() {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum58"&gt;  58:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Increase parameter from 10 up if you have performance issues&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum59"&gt;  59:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; checkRibbonStateInterval = setInterval(&lt;span style="color: #006080"&gt;&amp;quot;checkRibbonState()&amp;quot;&lt;/span&gt;, 10); &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum60"&gt;  60:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum61"&gt;  61:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum62"&gt;  62:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Start the watcher when the page has finished loading&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum63"&gt;  63:&lt;/span&gt; $(document).ready(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum64"&gt;  64:&lt;/span&gt;     setTimeout(&lt;span style="color: #006080"&gt;&amp;quot;beginCheckRibbon()&amp;quot;&lt;/span&gt;, 500);&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum65"&gt;  65:&lt;/span&gt; });&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Last, I add a CSS style to hide the ribbon inside wrapper until the script has determined its visibility, otherwise the tab “jumps” around while the script is executed.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; div.ms-cui-tabContainer ul li.ms-cui-group&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     display: none;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&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/3468218280828126488-2622297372419126075?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/05/hiding-inactive-ribbon-commands-in.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_sUXF1wIDVtE/TdyvTGWOh8I/AAAAAAAAAPA/fkHshSTb2-4/s72-c/image3_thumb.png?imgmax=800" height="72" width="72" /><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-7333771888290904023</guid><pubDate>Tue, 10 May 2011 17:20:00 +0000</pubDate><atom:updated>2011-05-10T18:21:21.711+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>Sogeti SharePoint Round Table #10 @Linköping</title><description>&lt;h2&gt;&lt;a href="http://lh6.ggpht.com/_sUXF1wIDVtE/Tclz9MYU4kI/AAAAAAAAAOk/Yn_ZawfA2RM/s1600-h/IMG_0634%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="IMG_0634" border="0" alt="IMG_0634" src="http://lh4.ggpht.com/_sUXF1wIDVtE/Tclz99cr17I/AAAAAAAAAOo/B9BjRZmAxu4/IMG_0634_thumb%5B2%5D.jpg?imgmax=800" width="628" height="470" /&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;h2&gt;Intro&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.saabgroup.com" target="_blank"&gt;Saab Group&lt;/a&gt;, the defence and security enterprise, hosts the 10th SharePoint Round Table in Linköping.&lt;/p&gt;  &lt;p&gt;This conference has a focus on multilingual features in SharePoint 2010, current trends in Best Practices, Azure Cloud and the ongoing Governance discussion continues.&lt;/p&gt;  &lt;h2&gt;Agenda (Revised)&lt;/h2&gt;  &lt;h3&gt;Day One&lt;/h3&gt;  &lt;table border="0" cellspacing="3" cellpadding="2" width="563"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="57"&gt;11:30&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;Lunch with meet &amp;amp; greet&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;12:15&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;           &lt;p&gt;Introduction&lt;/p&gt;            &lt;br /&gt;&lt;/strong&gt;Anders S Berndtsson, &lt;a href="http://www.saabgroup.com" target="_blank"&gt;Saab Group&lt;/a&gt;, opens the conference.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;13:00&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;           &lt;p&gt;Kick-off&lt;/p&gt;         &lt;/strong&gt;          &lt;br /&gt;Mats Stuhrmann, &lt;a href="http://www.sogeti.com" target="_blank"&gt;Sogeti&lt;/a&gt;, introduces the different upcoming activities.           &lt;br /&gt;The attending companies introduce themselves. Anders S Berndtsson presents Saab Group and their new SharePoint project.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;14:00&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;           &lt;p&gt;Mutlilingual management and features on the web&lt;/p&gt;            &lt;br /&gt;&lt;/strong&gt;How do large global corporations manage multiple languages on their local business areas? What support are there for information distribution using the world’s different languages? Matz Söderberg, &lt;a href="http://www.lionbridge.com" target="_blank"&gt;Lionbridge&lt;/a&gt; ( the world’s largest translation company with clients such as Microsoft) presents.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;14:30&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;           &lt;p&gt;&lt;strong&gt;Chalmers – Enterprise Search using FAST for SharePoint&lt;/strong&gt; &lt;/p&gt;            &lt;br /&gt;&lt;/strong&gt;Tony Ottosson Gadd, Chalmers and Tobias Lekman, Sogeti, shares their insights and experiences from the planning phase of the Enterprise Search project and the collaboration with Microsoft Consulting Services which aims to set up FAST for SharePoint for the public website and the upcoming Intranet.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;15:30&lt;/td&gt;        &lt;td valign="top" width="495"&gt;         &lt;p&gt;&lt;strong&gt;Zooma – Online&lt;/strong&gt;&lt;/p&gt;          &lt;br /&gt;Anders Björklund from Zooma talks about the online concept and its connection to marketing and online presence. An indescribable presentation – you got to be there.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;18:00&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;           &lt;p&gt;Lantmännen Goes Collaboration&lt;/p&gt;            &lt;br /&gt;&lt;/strong&gt;Stefan Hägglund, Lantmännen, and Tobias Lekman, Sogeti, shares experiences and insights from their ongoing Intranet project where collaboration is a pillar in combination with multilingual support for 14 different languages.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;19:30&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;Dinner&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;Day Two&lt;/h3&gt;  &lt;table border="0" cellspacing="3" cellpadding="2" width="563"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="57"&gt;08:30&lt;/td&gt;        &lt;td valign="top" width="495"&gt;         &lt;p&gt;&lt;strong&gt;Deep Dive Dialogs&lt;/strong&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;ul&gt;           &lt;ul&gt;             &lt;li&gt;“The Complete Picture”, Control vs. Freedom of Information &lt;/li&gt;              &lt;ul&gt;               &lt;ul&gt;                 &lt;li&gt;Dissect Saab Group’s new SharePoint solution: good and bad? &lt;/li&gt;               &lt;/ul&gt;             &lt;/ul&gt;           &lt;/ul&gt;            &lt;li&gt;Extranet/Internet collaboration on one platform &lt;/li&gt;            &lt;li&gt;SharePoint: areas of usage and application &lt;/li&gt;            &lt;li&gt;“Social” functions and SharePoint: what’s the alternatives? &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="57"&gt;12:30&lt;/td&gt;        &lt;td valign="top" width="495"&gt;&lt;strong&gt;Lunch and wrap-up&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h2&gt;Notes to self&lt;/h2&gt;  &lt;p&gt;The sessions at Round Table sparks many interesting discussions and thoughts. Amongst many light bulb, “aha!” moments and visions I had during these days, here’s the ones that stand out (in no particular order):&lt;/p&gt;  &lt;div style="display: block; height: 15px"&gt;&lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;When running workshops with people with mixed IT competence/maturity, either separate the groups or raise the competence in the group &lt;/li&gt;    &lt;li&gt;Must read the books “Long Tail”, “Free” and “The Thank You Economy” &lt;/li&gt;    &lt;li&gt;Must view more presentations from TED &lt;/li&gt;    &lt;li&gt;Finish my LinkedIn connector package for SharePoint and publish it on CodePlex &lt;/li&gt;    &lt;li&gt;Make sure that there is a project budget for the project that follow yours, such as content migration, online communication, support, training or copywriting &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/3468218280828126488-7333771888290904023?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/05/sogeti-sharepoint-round-table-10.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_sUXF1wIDVtE/Tclz99cr17I/AAAAAAAAAOo/B9BjRZmAxu4/s72-c/IMG_0634_thumb%5B2%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-3616179032160074769</guid><pubDate>Wed, 04 May 2011 07:33:00 +0000</pubDate><atom:updated>2011-05-04T08:37:13.244+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Snippets</category><category domain="http://www.blogger.com/atom/ns#">Features</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>Custom Document Set Features in SharePoint 2010</title><description>&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;During a project we found that packaging custom document sets in SharePoint was not as straight-forward as we thought. In this post, I will share lessons learned and solutions for packaging and deploying custom document sets.&lt;/p&gt;  &lt;h2&gt;About Document Sets&lt;/h2&gt;  &lt;p&gt;&lt;em&gt;“Document Sets&lt;/em&gt; is a new feature in SharePoint Server 2010 that enables an organization to manage a single deliverable, or &lt;em&gt;work product&lt;/em&gt;, which can include multiple documents or files. A Document Set is a special kind of folder that combines unique Document Set attributes, the attributes and behavior of folders and documents, and provides a user interface (UI), metadata, and object model elements to help manage all aspects of the work product.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://i.msdn.microsoft.com/dynimg/IC391997.jpg" width="584" height="268" /&gt;&lt;/p&gt;  &lt;p&gt;Document Sets planning (SharePoint Server 2010) (TechNet): &lt;a href="http://technet.microsoft.com/en-us/library/ff603637.aspx" target="_blank"&gt;http://technet.microsoft.com/en-us/library/ff603637.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;The Issue&lt;/h2&gt;  &lt;p&gt;When creating a new document set and customizing the document set properties, these work well in SharePoint but are hard to package and export.&lt;/p&gt;  &lt;p&gt;Steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Activate the &lt;strong&gt;Document Sets&lt;/strong&gt; site collection feature &lt;/li&gt;    &lt;li&gt;Create a new document type that inherits the Document Set content type &lt;/li&gt;    &lt;li&gt;Customize the document set properties &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Create and manage document sets (Microsoft): &lt;a href="http://office.microsoft.com/en-us/sharepoint-server-help/create-and-manage-document-sets-HA101782480.aspx" target="_blank"&gt;http://office.microsoft.com/en-us/sharepoint-server-help/create-and-manage-document-sets-HA101782480.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can try to export the document set as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Exporting a list using the content type as a list template&lt;/li&gt;    &lt;li&gt;Save the site as a sandboxed site template solution&lt;/li&gt;    &lt;li&gt;Import the content type using Server Explorer in Visual Studio&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;None of the solutions will allow us to control the document property settings. On top of that, importing the content type in Visual Studio does not even generate XML that is valid according to the schema.&lt;/p&gt;  &lt;h2&gt;The Solution&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;First of all, we will import the Content Type ID into a new Content Type module in Visual Studio&lt;/li&gt;    &lt;li&gt;Then, we customize the XML for the document set content type.&lt;/li&gt;    &lt;li&gt;Last, we add a custom version of the feature event handler that provisions the document set welcome page&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The issue is that, inheriting directly from this code, the web parts on the welcome page will be provisioned each time the feature is activated, making upgrades a tad hard. Also, when the feature deactivates a check is made to see if the document set content type is in use and then cancels the deactivation process. This is not what we want to do.&lt;/p&gt;  &lt;p&gt;I have posted the solution on MSDN Snippets Gallery instead of adding all the source code in this post.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_sUXF1wIDVtE/TcEBXTLTDaI/AAAAAAAAAOU/rJe2wmxpDuY/s1600-h/image%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_sUXF1wIDVtE/TcEBY23rtpI/AAAAAAAAAOY/8yoVD654G1o/image_thumb%5B3%5D.png?imgmax=800" width="480" height="411" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Provisioning Event Handler for Custom Document Set Features in SharePoint 2010 (MSDN Code Snippets) &lt;a href="http://code.msdn.microsoft.com/Custom-Document-Set-eb3fbcfd" target="_blank"&gt;http://code.msdn.microsoft.com/Custom-Document-Set-eb3fbcfd&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/3468218280828126488-3616179032160074769?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/05/custom-document-set-features-in.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_sUXF1wIDVtE/TcEBY23rtpI/AAAAAAAAAOY/8yoVD654G1o/s72-c/image_thumb%5B3%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-206725885875907957</guid><pubDate>Wed, 20 Apr 2011 20:30:00 +0000</pubDate><atom:updated>2011-04-21T13:26:23.191+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>Adding Default Web Parts Programmatically</title><description>&lt;p&gt;You can add default web parts on page layouts using SharePoint Designer or embedding these using the &lt;strong&gt;&amp;lt;AllUsersWebPart&amp;gt;&lt;/strong&gt; tag. However, both solutions have issues. Adding the web parts in the page layout causes them to add again when switching between page layouts and the &lt;strong&gt;&amp;lt;AllUsersWebPart&amp;gt;&lt;/strong&gt; cannot be used for all types of web parts.&lt;/p&gt;  &lt;p&gt;By adding the control &lt;strong&gt;DefaultWebPartRegistration&lt;/strong&gt; we can add default web parts to the current page. In this case, we use a server control to add registrations to a specific page layout. When the user adds the page or changes page layout, the code is executed and adds the default web part or web parts to the page.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;When the user first loads the page, he sees:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_sUXF1wIDVtE/TbAb3kxygOI/AAAAAAAAAOQ/E4psEBwMsFE/image%5B1%5D.png?imgmax=800" width="472" height="163" /&gt;&lt;/p&gt;  &lt;p&gt;Then the web part is added to the page:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://i4.code.msdn.microsoft.com/adding-default-web-parts-ab7aec72/image/file/21289/1/added.png" width="559" height="418" /&gt;&lt;/p&gt;  &lt;p&gt;To get the actual code and further description of the solution, head over to &lt;a href="http://code.msdn.microsoft.com/Adding-default-web-parts-ab7aec72" target="_blank"&gt;MSDN Code Snippets: Adding default web parts programmatically on SharePoint 2010 Page Layouts&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/3468218280828126488-206725885875907957?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/04/adding-default-web-parts.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_sUXF1wIDVtE/TbAb3kxygOI/AAAAAAAAAOQ/E4psEBwMsFE/s72-c/image%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-6627995805841982904</guid><pubDate>Sun, 17 Apr 2011 16:52:00 +0000</pubDate><atom:updated>2011-04-17T19:20:22.554+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><title>SharePoint Server 2010 : Accelerate Program</title><description>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sUXF1wIDVtE/Taso55c6I6I/AAAAAAAAAOA/LGSVWNfxG1Y/s1600-h/image%5B8%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px auto 20px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_sUXF1wIDVtE/Taso7JQy7mI/AAAAAAAAAOE/bXk0HtuNx4w/image_thumb%5B3%5D.png?imgmax=800" width="458" height="63" /&gt;&lt;/a&gt;     &lt;br /&gt;On April 25th, me and my colleagues at &lt;a href="http://www.sogeti.com" target="_blank"&gt;Sogeti&lt;/a&gt; are embarking on the SharePoint Server 2010 Accelerate program for partners. The program will run for four weeks.&lt;/p&gt;  &lt;p&gt;The program sees attendees from across our world-wide organization and is formed with a a few select global Alliance partners, including &lt;b&gt;&lt;a href="http://www.sogeti.com" target="_blank"&gt;Sogeti&lt;/a&gt;. &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Individuals in each role will participate in a 4-week virtual mentoring curriculum, managed by Wright Robbins, followed by virtual coaching and pursuit assistance tailored for their unique role and responsibilities in positioning, closing and delivering SharePoint 2010 advanced workload project opportunities.&amp;#160; At the conclusion of the mentoring sessions, participants will complete an “End-of-Class Project” based on a real-world case study in which they will apply the skills learned to the tasks needed for real-world customer engagement.&lt;/p&gt;  &lt;p&gt;The program runs in four different tracks; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Account Managers and Sales Specialists &lt;/li&gt;    &lt;li&gt;Technical Pre-Sales Solution Architects &lt;/li&gt;    &lt;li&gt;Solution Designers &lt;/li&gt;    &lt;li&gt;Implementation Consultants &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The program also has two blocks; &lt;strong&gt;ECM&lt;/strong&gt; (Enterprise Content Management) and &lt;strong&gt;BI&lt;/strong&gt; (Business Intelligence).&lt;/p&gt;  &lt;p&gt;The ECM track primarily address the architecture of ECM in SharePoint and focuses on taxonomy and meta data management with records centers.&lt;/p&gt;  &lt;p&gt;The BI track primarily address the self-service BI with &lt;strong&gt;PowerPivot&lt;/strong&gt;, including monitoring, data-feeds, analysis and reporting.&lt;/p&gt;  &lt;p&gt;Each track concludes with the preparation of a solution proposal scope to present to the instructors based on a prepared customer scenario. The solution scope must cover the following: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Clear articulation of the customer’s business objectives &lt;/li&gt;    &lt;li&gt;Draft business requirements document for proposed solution &lt;/li&gt;    &lt;li&gt;Create a strategy document &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The program should prove useful for a large group of consultants at &lt;a href="http://www.sogeti.com" target="_blank"&gt;Sogeti&lt;/a&gt; and is part of our continuous “Academy” program where we aim for constant improvement of skills and “sharpening of the saw”. It is also a great opportunity to further strengthen our partnership with Microsoft and get close connections to the SharePoint team in Redmond.&lt;/p&gt;  &lt;p&gt;I will get back on program progress soon!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-6627995805841982904?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/04/sharepoint-server-2010-accelerate.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_sUXF1wIDVtE/Taso7JQy7mI/AAAAAAAAAOE/bXk0HtuNx4w/s72-c/image_thumb%5B3%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-8592937910009506641</guid><pubDate>Wed, 16 Mar 2011 09:13:00 +0000</pubDate><atom:updated>2011-03-16T09:13:47.779Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">Features</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">CodePlex</category><title>Troubleshooting SharePoint 2010, Part 1</title><description>&lt;p&gt;This is a quick video-based guide on how to troubleshoot errors and issues in SharePoint 2010. In this post, we will go through looking for detailed errors in logs, in code and finding what component causes issues on a specific page.&lt;/p&gt;  &lt;h3&gt;ULS Logs&lt;/h3&gt;  &lt;p&gt;The Unified Logging Service, or ULS, is a file-based log system that contains errors generated from SharePoint. It uses &lt;strong&gt;correlation ID&lt;/strong&gt; to map the user error to the log entry. The files get large and are hard to navigate, so I recommend using the &lt;a href="http://sharepointlogviewer.codeplex.com/" target="_blank"&gt;ULS Log Viewer on CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sUXF1wIDVtE/TYB_ROQk2pI/AAAAAAAAANk/hVtR_7LK9js/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_sUXF1wIDVtE/TYB_R7nyNRI/AAAAAAAAANo/MVxrPpp646g/image_thumb%5B1%5D.png?imgmax=800" width="420" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the following video, we will track down an error using correlation ID using the logs and the CodePlex log viewer:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:af82546c-8083-446f-8d47-794aaf9b1387" class="wlWriterEditableSmartContent"&gt;&lt;div id="c770691c-f950-4257-8890-f3a4d88169ef" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=qT3Z6NvMzVM" target="_new"&gt;&lt;img src="http://lh4.ggpht.com/_sUXF1wIDVtE/TYB_SKRzgcI/AAAAAAAAANs/PLlVhyI_P8w/video0abee11b2a44%5B5%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('c770691c-f950-4257-8890-f3a4d88169ef'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/qT3Z6NvMzVM?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/qT3Z6NvMzVM?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:640px;clear:both;font-size:.8em"&gt;Video: ULS logs and the LogViewer tool in SharePoint 2010. NOTE: Click Menu/CC to enable descriptive subtitles!&lt;/div&gt;&lt;/div&gt;  &lt;h3&gt;Enable Debugging and Detailed Errors&lt;/h3&gt;  &lt;p&gt;You can either edit the web.config of the web application and add the following changes:   &lt;br /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;lt;SharePoint&amp;gt;&amp;lt;SafeMode CallStack=&amp;quot;true&amp;quot; AllowPageLevelTrace=&amp;quot;true&amp;quot; /&amp;gt; &lt;/li&gt;    &lt;li&gt;&amp;lt;system.web&amp;gt;&amp;lt;customErrors mode=&amp;quot;Off&amp;quot; /&amp;gt; &lt;/li&gt;    &lt;li&gt;&amp;lt;system.web&amp;gt;&amp;lt;compilation debug=&amp;quot;true&amp;quot; /&amp;gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To make this a little bit easier, I have wrapped the changes in a &lt;a href="http://lekman.codeplex.com/releases/view/62654" target="_blank"&gt;feature that can be downloaded from CodePlex&lt;/a&gt;. The following video shows how to install the feature, enable debugging and see the difference in SharePoint:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:599b629e-df8e-4e94-9cb9-eca327e6fbf5" class="wlWriterEditableSmartContent"&gt;&lt;div id="42854338-1777-4c3e-b79f-c4bcdb672a68" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=bD6NbVna_w4" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/_sUXF1wIDVtE/TYB_Ss8v2uI/AAAAAAAAANw/2wY2qjRh968/video3379577d9454%5B30%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('42854338-1777-4c3e-b79f-c4bcdb672a68'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/bD6NbVna_w4?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/bD6NbVna_w4?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:640px;clear:both;font-size:.8em"&gt;Video: Enable Debugging and Detailer Error Information. NOTE: Click Menu/CC to enable descriptive subtitles!&lt;/div&gt;&lt;/div&gt;  &lt;h3&gt;Developer Dashboard&lt;/h3&gt;  &lt;p&gt;The developer dashboard is a page level tracing mechanism that allows you to view detailed information about the entire call stack in all modules that execute within the context of a page. This allows us to find detailed information about slow rendering of pages and see what component on the page is causing the issue.&lt;/p&gt;  &lt;p&gt;You enable the dashboard using the command &amp;quot;&lt;strong&gt;stsadm -o setproperty -pn developer-dashboard -pv ondemand&lt;/strong&gt;&amp;quot;. The following video shows how to enable the dashboard. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:55d20020-b6e9-41e1-b6fd-a9b5c4442060" class="wlWriterEditableSmartContent"&gt;&lt;div id="ddbb9216-7cc9-46ca-bc38-d1b771d4a420" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=x1CEHbqf_hE" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/_sUXF1wIDVtE/TYB_SyV34lI/AAAAAAAAAN0/c0eacdV_VJQ/video533eead910bc%5B73%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('ddbb9216-7cc9-46ca-bc38-d1b771d4a420'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/x1CEHbqf_hE?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/x1CEHbqf_hE?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:640px;clear:both;font-size:.8em"&gt;Video: Enabling the Developer Dashboard in SharePoint 2010. NOTE: Click Menu/CC to enable descriptive subtitles!&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;The page trace shows different components and method calls in a hierarchical structure called a &lt;em&gt;monitored scope&lt;/em&gt;. You can easily extend the trace within your own webpart by encapsulating your call in an &lt;strong&gt;SPMonitoredScope&lt;/strong&gt;. For some good information on how to extend the trace using SPMonitoredScope, see &lt;a href="http://www.zimmergren.net/archive/2010/12/21/sp-2010-developing-for-performance-part-2-spmonitoredscope.aspx" target="_blank"&gt;Tobias Zimmergren's blog post &amp;quot;Developing for Performance, Part 2&amp;quot;&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/3468218280828126488-8592937910009506641?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/03/troubleshooting-sharepoint-2010-part-1.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_sUXF1wIDVtE/TYB_R7nyNRI/AAAAAAAAANo/MVxrPpp646g/s72-c/image_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-3393831745743050509</guid><pubDate>Sun, 13 Feb 2011 10:02:00 +0000</pubDate><atom:updated>2011-02-13T10:39:52.309Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Patterns</category><category domain="http://www.blogger.com/atom/ns#">Project Management</category><title>Boston charts and Backlog Prioritization</title><description>&lt;p&gt;A week back I was discussing the use of scatter charts with a colleague of mine during backlog prioritization. I am now attempting to automate this process in Microsoft Excel.&lt;/p&gt;  &lt;p&gt;The problem with backlog prioritization is that often only the business priority is considered. By combining the complexity and risk of the task we can see that objectives that are both easy to do and has a large impact on the business should be prioritized.&lt;/p&gt;  &lt;p&gt;The idea was to combine the clients business priority with our measure of perceived risk and priority. This gave us a scatter matrix graph. Note that both values was entered in percentage values where 100 is the high number.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_sUXF1wIDVtE/TVesNBvKqXI/AAAAAAAAANA/9NQZbEbRfnU/s1600-h/image%5B19%5D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_sUXF1wIDVtE/TVesNhGSqiI/AAAAAAAAANE/J4CVlmnp-PY/image_thumb%5B13%5D.png?imgmax=800" width="604" height="456" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;By adding an overlay according to the &lt;a href="http://en.wikipedia.org/wiki/Growth-share_matrix" target="_blank"&gt;Boston Chart&lt;/a&gt; type, we can see that     &lt;br /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;ul&gt;       &lt;li&gt;Requirements with high business value and low risk/complexity give the highest backlog priority &lt;/li&gt;        &lt;li&gt;Requirements with low business value and high risk/complexity give the lowest backlog priority &lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;The source data also contains a small calculation to give the weighted combined priority which can be overridden with the “adjusted priority” field.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_sUXF1wIDVtE/TVesOMVIf_I/AAAAAAAAANM/_XFUWARKDDQ/s1600-h/image%5B20%5D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_sUXF1wIDVtE/TVesOWHl2OI/AAAAAAAAANY/827zqZC4B_o/image_thumb%5B14%5D.png?imgmax=800" width="601" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can download the &lt;a href="http://lekman.codeplex.com/releases/view/60861" target="_blank"&gt;Excel file from my CodePlex site&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;To get the hover labels, you also need &lt;a href="http://appspro.com/Utilities/ChartLabeler.htm" target="_blank"&gt;Rob Bovey’s Chart Labeler&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/3468218280828126488-3393831745743050509?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/02/boston-charts-and-backlog.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_sUXF1wIDVtE/TVesNhGSqiI/AAAAAAAAANE/J4CVlmnp-PY/s72-c/image_thumb%5B13%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-1411278227791292049</guid><pubDate>Sat, 12 Feb 2011 08:42:00 +0000</pubDate><atom:updated>2011-02-12T09:33:20.677Z</atom:updated><title>Focus on Business Processes, NOT Technology</title><description>&lt;div style="margin: 1em; display: block; float: right" class="zemanta-img"&gt;&lt;a href="http://commons.wikipedia.org/wiki/File:Business_Process_Reengineering_Cycle.jpg"&gt;&lt;img style="border-bottom: medium none; border-left: medium none; display: block; border-top: medium none; border-right: medium none" alt="Business Process Reengineering Cycle" src="http://upload.wikimedia.org/wikipedia/commons/6/6a/Business_Process_Reengineering_Cycle.jpg" /&gt;&lt;/a&gt;     &lt;p style="font-size: 0.8em" class="zemanta-img-attribution"&gt;Image via &lt;a href="http://commons.wikipedia.org/wiki/File:Business_Process_Reengineering_Cycle.jpg"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; I have been asked to quote for or implement an IT system or application with specific requirements from a customer.&lt;/p&gt;  &lt;p&gt;When tasked with providing estimates and design suggested solutions, it is too easy to focus on the technology and the software instead of the actual problem. Sure, you have years of experience managing and implementing solutions in SharePoint/Dynamics AX/EPi Server but before you start to shove your one-size-fits-all down the neck of the client, ask yourself: &lt;strong&gt;what is the supporting business process?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We should assess and &lt;strong&gt;identify the business process(es) that the IT system will support&lt;/strong&gt;. If the process is ill defined or non-existent then you have poor conditions for success.&lt;/p&gt;  &lt;h2&gt;Discovering and Mapping Business Processes&lt;/h2&gt;  &lt;p&gt;We have excellent tools available for mapping processes, such as &lt;a title="Unified Modeling Language" href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank"&gt;UML&lt;/a&gt; and modeling diagrams as used in Microsoft Office Visio or in Visual Studio 2010 for Architects. &lt;/p&gt;  &lt;p&gt;Use cases, &lt;a title="Sequence diagram" href="http://en.wikipedia.org/wiki/Sequence_diagram" target="_blank"&gt;sequence diagrams&lt;/a&gt; and declarative workflows with swim-lanes are all excellent for mapping processes, but they must be verified with the organization to ensure that they are actually in place. A process or policy that is not followed will not be adhered to any better with an IT tool that supports the badly adhered to process! Therefore, &lt;strong&gt;never discuss technology during process workshops&lt;/strong&gt; and always &lt;strong&gt;focus on the users day-to-day tasks&lt;/strong&gt; that align to that process.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img alt="System participates in payment but not delivery." src="http://i.msdn.microsoft.com/dynimg/IC292997.png" width="246" height="139" /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;img alt="Sequence diagram with System and actors." src="http://i.msdn.microsoft.com/dynimg/IC274170.png" width="300" height="248" /&gt;&lt;/p&gt;  &lt;p&gt;Pictures showing use case and sequence diagrams. See “&lt;a href="http://blog.lekman.com/2010/06/user-requirements-modeling-with-tfs.html" target="_blank"&gt;User Requirements Modeling with TFS 2010 for Scrum Backlogs&lt;/a&gt;” for more information on the topic.&lt;/p&gt;  &lt;h2&gt;Going Technical: Gap Analysis and System Assessment&lt;/h2&gt;  &lt;p&gt;When the business processes are identified, we can review them and map these to proposed system/application solutions using &lt;a href="http://en.wikipedia.org/wiki/Gap_analysis" target="_blank"&gt;Gap Analysis&lt;/a&gt; or a mapping workshop. This may prove that by making small changes to the current business process we will &lt;strong&gt;adhere to a more industrialized process that is readily supported by existing systems&lt;/strong&gt;. This is a difficult balance and any such decision must be supported by the business, understood and implemented enterprise wide and should not be approached without proper caution.&lt;/p&gt;  &lt;p&gt;A common problem is &lt;strong&gt;going from heavily customized and bespoke software to industry standard applications&lt;/strong&gt; and this transition can be extremely painful for the organization unless the core business processes are reviewed and a proper change management program is in place.&lt;/p&gt;  &lt;h2&gt;Learn from Others&lt;/h2&gt;  &lt;p&gt;There are many good and bad examples where businesses have changed their processes to accommodate more industrialized or streamlined processes and there are several references to companies who have gone under while implementing Enterprise ERP systems.&lt;/p&gt;  &lt;p&gt;A good success story is &lt;a title="Volkswagen" href="http://www.volkswagen.com/" target="_blank"&gt;Volkswagen&lt;/a&gt; who championed a new organizational IT structure to use resources more efficiently and used this project to reorganize business processes.&lt;/p&gt;  &lt;p&gt;Read more at &lt;a href="http://www.mckinseyquarterly.com/How_IT_can_drive_business_process_reorganization_An_interview_with_the_CIO_of_Volkswagen_1846" target="_blank"&gt;McKinsey Quarterly: How IT can drive business process reorganization: An interview with the CIO of Volkswagen&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/3468218280828126488-1411278227791292049?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/02/focus-on-business-processes-not.html</link><author>noreply@blogger.com (Tobias Lekman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-4773562014063734685</guid><pubDate>Sat, 22 Jan 2011 07:49:00 +0000</pubDate><atom:updated>2011-01-22T08:00:01.717Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><title>SharePoint capacity planning, management and testing</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_sUXF1wIDVtE/TTqL8urW5lI/AAAAAAAAAMk/JVMpSO9Z08E/s1600-h/Ff758647_f1eefc9c-460d-47fd-8e83-bc2%5B1%5D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 15px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Ff758647_f1eefc9c-460d-47fd-8e83-bc2fb1b935ba(en-us,office_14)" border="0" alt="Ff758647_f1eefc9c-460d-47fd-8e83-bc2fb1b935ba(en-us,office_14)" align="right" src="http://lh3.ggpht.com/_sUXF1wIDVtE/TTqL9LNAlGI/AAAAAAAAAMo/_NZREk6dj_Q/Ff758647_f1eefc9c-460d-47fd-8e83-bc2.gif?imgmax=800" width="214" height="216" /&gt;&lt;/a&gt;Lately, I have been talking at length with clients about SharePoint server capacity planning, hardware requirements and scalability of the environment. &lt;/p&gt;  &lt;p&gt;Capacity management is an ongoing process, because no implementation remains static in terms of content and usage. You need to plan for growth and change, so that your environment can continue to deliver an effective user experience. &lt;/p&gt;  &lt;h2&gt;Planning&lt;/h2&gt;  &lt;p&gt;First of all, SharePoint itself has some basic &lt;strong&gt;minimum&lt;/strong&gt; hardware requirements. In short, this means that most corporate environment should have 16gb ram for SharePoint servers with 4 CPU cores and 80gb space on the system drive. Personally, I think 80gb is too low and always go for 100gb. Also, this does &lt;strong&gt;not reflect databases&lt;/strong&gt;, as these need to be calculated separately and continuously monitored and support expansion. Note that if your content databases exceed 2 terabytes you will need to add more RAM to your SharePoint servers.&lt;/p&gt;  &lt;p&gt;For full details, see &lt;a href="http://technet.microsoft.com/en-us/library/cc262485.aspx" target="_blank"&gt;TechNet: Hardware and software requirements (SharePoint Server 2010)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is very basic and covers installation only. Before proceeding with any real capacity design decisions, you must review the model architecture of the solution to get an understanding of the workload and the datasets. Capacity planning is near impossible if you do not have a clear picture of these details.The most important considerations are:&lt;/p&gt;  &lt;p&gt;Workload&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Concurrent users &lt;/strong&gt;(number of distinct users at any time) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Requests per Seconds&lt;/strong&gt; (RPS) – This workload can be hard to estimate but may be gauged through performance testing from use cases or monitoring during a pilot/test phase &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Total daily requests&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Total daily users&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Workload distribution&lt;/strong&gt;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Datasets&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Database size (in GB) &lt;/li&gt;    &lt;li&gt;Number of sites &lt;/li&gt;    &lt;li&gt;Number of documents &lt;/li&gt;    &lt;li&gt;Number of lists &lt;/li&gt;    &lt;li&gt;Number of user profiles &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For more details, see &lt;a href="http://technet.microsoft.com/en-us/library/ff758645.aspx#step1" target="_blank"&gt;Capacity planning for SharePoint Server 2010, Model&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There are also some so called hard limits, i.e. maximum amount of items in a list, maximum site collections, maximum number of users or amount of web parts on a page. These were fairly restrictive in SharePoint 2007 but few organizations should face issues with SharePoint 2010.&lt;/p&gt;  &lt;p&gt;For more details, see &lt;a href="http://technet.microsoft.com/en-us/library/cc262787.aspx" target="_blank"&gt;SharePoint Server 2019 capacity management: Software boundaries and limits&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Testing and Optimization&lt;/h2&gt;  &lt;p&gt;You should include performance testing in your SharePoint strategy. There are many good tools out there for testing, such as &lt;a href="http://visualstudiomagazine.com/articles/2010/07/08/load-testing-with-visual-studio-2010.aspx" target="_blank"&gt;Microsoft Visual Studio 2010 load tests&lt;/a&gt; or the open source project &lt;a href="http://spperformancetest.codeplex.com/" target="_blank"&gt;SharePoint Performance Tests&lt;/a&gt;. These tools can also be used to simulate a workload to your system. &lt;/p&gt;  &lt;p&gt;For optimization, you can look at performance logs or the Development Dashboard feature, which runs on the SharePoint server page and breaks down requests into segments so that you can analyze time taken for execution per request/component.&lt;/p&gt;  &lt;p&gt;You should also enable caching which can have a dramatic impact on CPU usage on the SharePoint server and lower requests to the database tier. Caching strategies should be part of any SharePoint strategy and rollout.&lt;/p&gt;  &lt;p&gt;For more details, see &lt;a href="http://www.zimmergren.net/archive/2010/12/18/sp-2010-developing-for-performance-part-1-developer-dashboard.aspx" target="_blank"&gt;Tobias Zimmergren: SP 2010: Developing for Performance Part 1&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Management&lt;/h2&gt;  &lt;p&gt;You must continuously monitor and maintain an environment. An excellent tool is Microsoft System Center Operations Manager (SCOM) which has ready made management packs for monitoring the servers in your SharePoint farm. You can download the management pack here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=5c73415d-97ba-4bdc-8e92-2c4ea4507f91&amp;amp;displaylang=en" target="_blank"&gt;Microsoft SharePoint 2010 Products Management Pack for System Center Operations Manager 2007&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;SCOM harvests and processes event logs, so by extending the logging features within your custom SharePoint code you can ensure that SCOM picks up your message and, depending on the event ID or content, SCOM can perform an action such as sending an email alert.&lt;/p&gt;  &lt;p&gt;Your environment must be able to scale. This is done vertically/up or horizontally/out. Vertical scaling or scaling up means to add more resources such as memory or processors to a server. Horizontal scaling or scaling out means to add more servers to a SharePoint farm. Virtualization has obvious advantages here, where hardware resources can easily be added and new servers can be added using preconfigured images and &lt;a href="http://blog.lekman.com/2010/11/automated-sharepoint-2010-installations.html"&gt;automated SharePoint installations&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Related Material&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc261700.aspx" target="_blank"&gt;TechNet: Capacity management and sizing for SharePoint Server 2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/edge/Video/ff711425" target="_blank"&gt;Video: Scaling SharePoint 2010 Topologies for Your Organization&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://h20338.www2.hp.com/activeanswers/Secure/548230-0-0-0-121.html" target="_blank"&gt;Tool: HP Sizer for SharePoint 2010&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/3468218280828126488-4773562014063734685?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/01/sharepoint-capacity-planning-management.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_sUXF1wIDVtE/TTqL9LNAlGI/AAAAAAAAAMo/_NZREk6dj_Q/s72-c/Ff758647_f1eefc9c-460d-47fd-8e83-bc2.gif?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-7989511988464373562</guid><pubDate>Wed, 19 Jan 2011 17:50:00 +0000</pubDate><atom:updated>2011-01-20T16:39:00.591Z</atom:updated><title>Sogeti sharePoint Round Table #9 @Sandviken</title><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_sUXF1wIDVtE/TTckSJlUa2I/AAAAAAAAAMc/42Y8X9n8WAc/s1600-h/photo%5B5%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="photo" border="0" alt="photo" src="http://lh6.ggpht.com/_sUXF1wIDVtE/TTckS4i7IYI/AAAAAAAAAMg/d2LasF7A-z0/photo_thumb%5B2%5D.jpg?imgmax=800" width="564" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The 9th Sogeti SharePoint Round Table has kicked off today in Sandviken. It has been a full day of discussions and presentations and the debate started over breakfast and has not lost momentum yet.&lt;/p&gt;  &lt;p&gt;We are now all looking forward to an excellent meal here at Högbo Brukshotell to enter in more conversations and get more energy for tomorrow’s discussions.&lt;/p&gt;  &lt;p&gt;The proposed agenda was:&lt;/p&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h4&gt;19 JANUARY&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;09.00&amp;#160;&amp;#160;&amp;#160; Portals &amp;amp; Collaboration (open discussion – official discussions start at lunch) &lt;/p&gt;    &lt;p&gt;12.00&amp;#160;&amp;#160;&amp;#160; Meet and Greet &lt;/p&gt;    &lt;p&gt;12.30&amp;#160;&amp;#160;&amp;#160; Lunch &lt;/p&gt;    &lt;p&gt;13.00&amp;#160;&amp;#160;&amp;#160; Sandvik welcomes guests and presents the company &lt;/p&gt;    &lt;p&gt;14.30&amp;#160;&amp;#160;&amp;#160; Collaboration Enterprise Governance &amp;amp; Maintenance (Chalmers, Credit Suisse and Elanders) &lt;/p&gt;    &lt;p&gt;16.00&amp;#160;&amp;#160;&amp;#160; Collaboration &amp;amp; Intranet (Sandvik, Saab, Lantmännen och Credit Suisse) &lt;/p&gt;    &lt;p&gt;17.00&amp;#160;&amp;#160;&amp;#160; &lt;strike&gt;Inspiration: Online Strategy (Zooma)&lt;/strike&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Replaced: Use of Services Ready and Use case methodologies       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; during development of a product management system (Sogeti, Tobias Lekman) &lt;/p&gt;    &lt;p&gt;19.00&amp;#160;&amp;#160;&amp;#160; Dinner&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;20 JANUARY&lt;/h4&gt;  &lt;p&gt;09.00-10.30&amp;#160;&amp;#160;&amp;#160; Search optimization, versions, federated search (Saab, Lantmännen and Tobias Lekman) &lt;/p&gt;  &lt;p&gt;10.30-11.30&amp;#160;&amp;#160;&amp;#160; Do’s and Dont’s Extranet (Santa Maria and Saab) &lt;/p&gt;  &lt;p&gt;11.30-12.00&amp;#160;&amp;#160;&amp;#160; Wrap-up &lt;/p&gt;  &lt;p&gt;12.00-13.00&amp;#160;&amp;#160;&amp;#160; Lunch and leave&lt;/p&gt;  &lt;p&gt;A few speakers went missing and I jumped in and presented my current project. All presentations are available via the &lt;a href="http://www.linkedin.com/groups?mostPopular=&amp;amp;gid=3440993&amp;amp;trk=myg_ugrp_ovr" target="_blank"&gt;Round Table LinkedIn group&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/3468218280828126488-7989511988464373562?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2011/01/sogeti-sharepoint-round-table-9.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_sUXF1wIDVtE/TTckS4i7IYI/AAAAAAAAAMg/d2LasF7A-z0/s72-c/photo_thumb%5B2%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-6974286327286150622</guid><pubDate>Fri, 19 Nov 2010 08:40:00 +0000</pubDate><atom:updated>2010-12-18T09:40:13.178Z</atom:updated><title>Microsoft releases Lync</title><description>&lt;p&gt;Microsoft has just released &lt;a href="http://lync.microsoft.com/en-us/launch/Pages/launch.aspx" target="_blank"&gt;Lync Server&lt;/a&gt; which is the latest communication platform from the company and intends to replace Microsoft Office Communication Server (OCS) and integrates features from Live Meeting. You can read the full press release here: &lt;a title="http://www.microsoft.com/Presspass/press/2010/nov10/11-17MicrosoftLyncPR.mspx" href="http://www.microsoft.com/Presspass/press/2010/nov10/11-17MicrosoftLyncPR.mspx" target="_blank"&gt;http://www.microsoft.com/Presspass/press/2010/nov10/11-17MicrosoftLyncPR.mspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Personally, I am getting loads of good material from our Microsoft Partner contact and am looking forward to writing plug-ins to the platform.&lt;/p&gt;  &lt;h2&gt;Bill Gates on Microsoft Lync&lt;/h2&gt;  &lt;p style="padding-bottom: 10px; padding-left: 10px; width: 512px; padding-right: 10px; background: #ccc; padding-top: 10px"&gt;&lt;iframe height="288" src="http://lync.microsoft.com/en-us/_layouts/EnhancedVideoWebPart/standaloneplayer.aspx?vid=23&amp;amp;vlist=Launch Event Videos&amp;amp;vweb=/en-us&amp;amp;vwidth=512&amp;amp;vheight=288" frameborder="0" width="512" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Full launch site: &lt;a title="http://lync.microsoft.com/en-us/launch/Pages/launch.aspx" href="http://lync.microsoft.com/en-us/launch/Pages/launch.aspx" target="_blank"&gt;http://lync.microsoft.com/en-us/launch/Pages/launch.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Screenshots&lt;/h2&gt;  &lt;h2&gt;&lt;a href="http://lh4.ggpht.com/_sUXF1wIDVtE/TOY4Zh771UI/AAAAAAAAALc/Jz1d6a9WQTA/s1600-h/screen_ActivityFeeds%5B5%5D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="screen_ActivityFeeds" border="0" alt="screen_ActivityFeeds" src="http://lh5.ggpht.com/_sUXF1wIDVtE/TOY4aOBK34I/AAAAAAAAALg/okyXXKFWmvw/screen_ActivityFeeds_thumb%5B3%5D.jpg?imgmax=800" width="190" height="114" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_sUXF1wIDVtE/TOY4a-cC7nI/AAAAAAAAALo/YXFAXMerQYc/s1600-h/screen_ToAppShare%282%29%5B5%5D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="screen_ToAppShare(2)" border="0" alt="screen_ToAppShare(2)" src="http://lh4.ggpht.com/_sUXF1wIDVtE/TOY4cCmFxGI/AAAAAAAAALw/qfrSxoxYwgQ/screen_ToAppShare%282%29_thumb%5B3%5D.jpg?imgmax=800" width="192" height="115" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_sUXF1wIDVtE/TOY4c0Bv8fI/AAAAAAAAAL0/c3DtLWICEfA/s1600-h/screen_ExpandedContactCard%5B5%5D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="screen_ExpandedContactCard" border="0" alt="screen_ExpandedContactCard" src="http://lh3.ggpht.com/_sUXF1wIDVtE/TOY4d6yZpWI/AAAAAAAAAL8/7iMJbAZWzkE/screen_ExpandedContactCard_thumb%5B3%5D.jpg?imgmax=800" width="190" height="114" /&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;h2&gt;Integration with Office and SharePoint&lt;/h2&gt;  &lt;p&gt;Lync integrates naturally in the Office platform including SharePoint server.&lt;/p&gt;  &lt;p&gt;As an end user myself I love the experience Lync brings to SharePoint and Office with the real-time collaboration I rely on every day to find and interact with people and teams across our business and others outside Microsoft. These products were built to work together and the experience speaks for itself.&amp;#160; Here are my personal favorites:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;See the people I interact with through the visual experience of Lync and the social capabilities of SharePoint, including photos from SharePoint My Site and high definition video that delivers the best image based on bandwidth. &lt;/li&gt;    &lt;li&gt;Find the people I need to work with using Lync skills search which accesses SharePoint’s people search and skills, expertise and organization information in SharePoint My Site. I can quickly find who I’m looking for and start interacting with them immediately. No more sending e-mails to large aliases asking “does anyone know…?” &lt;/li&gt;    &lt;li&gt;Connect instantly with people’s names lit up with presence icons throughout SharePoint and Office that allow me to initiate IM, phone or online meetings on the fly. This allows me to interact with someone as we co-author a document or ask a question to the person who submitted approval for a budget in Excel from inside SharePoint or Excel. Very cool and very fast. &lt;/li&gt;    &lt;li&gt;Post recorded meetings to SharePoint sites using the Lync recording manager. All of my team’s documents, meeting notes and interactions and decisions can be easily saved and shared in SharePoint. &lt;/li&gt;    &lt;li&gt;Know more about the people I’m working with through Lync contact cards that show up every place I see someone’s name. No more assigning a task or workflow approval to the wrong person! &lt;/li&gt; &lt;/ul&gt;  &lt;p align="right"&gt;Source: Eric Swift, Microsoft SharePoint Team Blog: &lt;a title="http://blogs.msdn.com/b/sharepoint/archive/2010/11/18/connecting-lync-to-sharepoint.aspx" href="http://blogs.msdn.com/b/sharepoint/archive/2010/11/18/connecting-lync-to-sharepoint.aspx" target="_blank"&gt;http://blogs.msdn.com/b/sharepoint/archive/2010/11/18/connecting-lync-to-sharepoint.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;In the Cloud&lt;/h2&gt;  &lt;p&gt;Lync will also be available on the cloud via &lt;a href="http://office365.microsoft.com/en-us/lync-online.aspx" target="_blank"&gt;Lync Online&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Microsoft Lync Online is a next-generation cloud communications service that connects people in new ways, anytime, from anywhere. Lync Online provides intuitive communications capabilities across presence, instant messaging, audio/video calling and a rich online meeting experience including PC-audio, video and web conferencing. Transform your interactions with colleagues, customers and partners from today’s hit-and-miss communication to a more collaborative, engaging, and effective experience.“&lt;/em&gt;&lt;/p&gt;  &lt;p align="right"&gt;Source: Lync Online website: &lt;em&gt;&lt;a title="http://office365.microsoft.com/en-us/lync-online.aspx" href="http://office365.microsoft.com/en-us/lync-online.aspx" target="_blank"&gt;http://office365.microsoft.com/en-us/lync-online.aspx&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-6974286327286150622?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2010/11/microsoft-releases-lync.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_sUXF1wIDVtE/TOY4aOBK34I/AAAAAAAAALg/okyXXKFWmvw/s72-c/screen_ActivityFeeds_thumb%5B3%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-4954816326255798715</guid><pubDate>Thu, 18 Nov 2010 10:09:00 +0000</pubDate><atom:updated>2011-09-08T14:43:57.052+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><category domain="http://www.blogger.com/atom/ns#">CodePlex</category><title>Automated SharePoint 2010 Installations: Step-by-step</title><description>&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;I have been using automated installations for a few months now and have used both in-house scripts and the &lt;a href="http://autospinstaller.codeplex.com/" target="_blank"&gt;AutoSPInstaller from CodePlex&lt;/a&gt;. I have lately used AutoSPInstaller and wanted to go through the various steps used to prepare the installation media.&lt;/p&gt;  &lt;p style="padding-bottom: 10px; background-color: #ccc; padding-left: 10px; padding-right: 10px; padding-top: 10px"&gt;&lt;strong&gt;Update:&lt;/strong&gt; I have updated the documentation according to v2 of AutoSPIntaller and explain the setup of the configuration files in detail.&lt;/p&gt;  &lt;h2&gt;Preparing the base media&lt;/h2&gt;  &lt;p&gt;1. Either download the SharePoint 2010 ISO from MSDN subscriber downloads or copy them from the installation media. I extract the files into the folder &lt;strong&gt;c:\SP2010&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;2. Run &lt;a href="http://autospinstaller.codeplex.com/releases/view/44442" target="_blank"&gt;Download-All SP2010 Prereqs.ps1&lt;/a&gt; and add these files to &lt;strong&gt;c:\SP2010&lt;/strong&gt;. This will add all the pre-requisite files into our base media catalog for offline installations. Most servers I install are behind a firewall and do not allow direct access to the internet.&lt;/p&gt;  &lt;p&gt;3. Download &lt;a href="http://autospinstaller.codeplex.com/" target="_blank"&gt;AutoSPInstaller from CodePlex&lt;/a&gt; and extract the files into the c:\SP2010 folder.&lt;/p&gt;  &lt;p&gt;4. Download the SharePoint 2010 Language Packs and add them to your folder at &lt;strong&gt;c:\SP2010\LanguagePacks&lt;/strong&gt;. NOTE! Rename the files by appending the locale to the end of the file. For example,&lt;strong&gt; ServerLanguagePack_sv-se.exe&lt;/strong&gt; for Swedish.&lt;/p&gt;  &lt;p&gt;5. Slipstream the latest hotfix by downloading the &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;2512800" target="_blank"&gt;cumulative update package&lt;/a&gt;. Extract the contents as:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font face="Courier New"&gt;office2010kb2512800fullfilex64glb.exe /extract:.\&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Locate the &lt;strong&gt;.msp files&lt;/strong&gt; and add them to the &lt;strong&gt;c:\SP2010\Updates&lt;/strong&gt; folder. &lt;/p&gt;  &lt;p&gt;Your folder layout should now look like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_sUXF1wIDVtE/TOT7Q6EOSvI/AAAAAAAAAKU/DVmGZ8UhLLU/s1600-h/image4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_sUXF1wIDVtE/TOT7RRxb2gI/AAAAAAAAAKY/eC-akdnoqpU/image_thumb2.png?imgmax=800" width="196" height="489" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Prepare server hardware and software&lt;/h2&gt;  &lt;p&gt;The following requirements must be fulfilled prior to the installation of SharePoint Server 2010. &lt;/p&gt;  &lt;h3&gt;Hardware Requirements&lt;/h3&gt;  &lt;table border="1" cellspacing="5" cellpadding="5"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;Component&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;&lt;b&gt;Minimum Requirement&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;Processor&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;64-bit, four cores&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;RAM&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;8gb for single server, 16gb for multi-server environments. For databases above 2 terabytes see the link below.&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;Recommend 16gb as standard.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;Hard disk&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;80gb for system drive. For databases, see &lt;a href="http://technet.microsoft.com/en-us/library/cc261700.aspx"&gt;Capacity management and sizing for SharePoint Server 2010&lt;/a&gt;.&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;From experience, I recommend 160gb for system drive and a separate 50gb drive for logs and search indexes.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;For full details see &lt;a href="http://technet.microsoft.com/en-us/library/cc262485.aspx"&gt;http://technet.microsoft.com/en-us/library/cc262485.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h3&gt;Software Requirements&lt;/h3&gt;  &lt;table border="1" cellspacing="5" cellpadding="5"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;Component&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;&lt;b&gt;Minimum Requirement&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;OS&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;Windows Server 2008 64-bit with SP2 &lt;/p&gt;          &lt;p&gt;&lt;i&gt;or&lt;/i&gt;&lt;/p&gt;          &lt;p&gt;Windows Server 2008 R2 64-bit (recommended)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;OS Edition&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;Standard is customary for SharePoint servers. Will work with Standard, Enterprise, Data Center or Web Server with SP2. Clustered SQL servers require Enterprise edition.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;Server Roles and Features&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;No features or roles installed. &lt;strong&gt;Note: &lt;/strong&gt;Install base Windows with drivers only, the setup will take care of IIS and other components.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="180"&gt;         &lt;p&gt;&lt;b&gt;Database&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="451"&gt;         &lt;p&gt;SQL Server 2005 with SP3 and &lt;a href="http://go.microsoft.com/fwlink/?LinkId=165748"&gt;Cumulative Update package 3&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;i&gt;or&lt;/i&gt;&lt;/p&gt;          &lt;p&gt;SQL Server 2008 with SP1 and &lt;a href="http://go.microsoft.com/fwlink/?LinkId=165962"&gt;Cumulative Update 2&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;i&gt;or&lt;/i&gt;&lt;/p&gt;          &lt;p&gt;SQL Server 2008 R2 (recommended)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;For full details see &lt;a href="http://technet.microsoft.com/en-us/library/cc262485.aspx"&gt;http://technet.microsoft.com/en-us/library/cc262485.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;System Accounts&lt;/h3&gt;  &lt;p&gt;These accounts must be created and passwords must be made available before installation begins.&lt;/p&gt;  &lt;p&gt;Naming standards are examples and may be changed to reflect internal policies.&lt;/p&gt;  &lt;table border="1" cellspacing="5" cellpadding="5"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Account Type&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Account Name&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Rights&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Install Account&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SPS_INSTALL&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;Full administrator rights on all SharePoint and SQL servers. Will be disabled after install is completed.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;SQL Service Account&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SQL_SERVICE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;If not already installed, domain account with no local rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Farm Administrator&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SPS_FARM&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SQL roles DBCREATOR and SECURITYADMIN.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Application Pool&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SPS_APP_POOLn&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;One account per application. For example one per intranet, extranet and public website.&lt;/p&gt;          &lt;p&gt;Naming standard could be SPS_APP_POOL1 or SPS_APP_POOL_INTRANET.&lt;/p&gt;          &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;&lt;strong&gt;My Site&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="205"&gt;SPS:MYSITE&lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Services&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SPS_SERVICES&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Search Agent&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SPS_SEARCH&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Search Crawl Access&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SPS_CRAWL&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;         &lt;p&gt;&lt;strong&gt;Profile Access&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;SPS_PROFILE&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Account needs “replicate changes” rights in Active Directory. For more info, see &lt;a href="http://technet.microsoft.com/en-us/library/ee721049.aspx#RDCDomain" target="_blank"&gt;TechNet&lt;/a&gt;. For a script to test if the account was set up correctly, see &lt;a href="http://lekman.codeplex.com/releases/view/65930" target="_blank"&gt;my CodePlex site&lt;/a&gt;.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;&lt;strong&gt;Cache Admin&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="205"&gt;SPS_CACHEADM&lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;&lt;strong&gt;Cache Reader&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="205"&gt;SPS_CACHERD&lt;/td&gt;        &lt;td valign="top" width="205"&gt;         &lt;p&gt;No local rights or SQL rights above Domain User.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;For more information see &lt;a href="http://technet.microsoft.com/en-us/library/ee662513.aspx"&gt;http://technet.microsoft.com/en-us/library/ee662513.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Prepare server for unATtended installation&lt;/h2&gt;  &lt;p&gt;Personally, I like drinking coffee better than staring at a monitor. Therefore, I want the installation to bother me as little as possible, i.e. not at all. I don’t want meaningless confirm clicks or silly errors.&lt;/p&gt;  &lt;p&gt;1. Turn off the nag by typing “Run…”, “msconfig”, “Tools” and launch “Change UAT Settings”. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_sUXF1wIDVtE/TOT7Rr9pGoI/AAAAAAAAAKc/SeoIy_Uv1bk/s1600-h/image11.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_sUXF1wIDVtE/TOT7SFazsqI/AAAAAAAAAKg/KyJjW6bKANY/image_thumb5.png?imgmax=800" width="336" height="225" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_sUXF1wIDVtE/TOT7Sm7DEhI/AAAAAAAAAKk/zaI7Iqfa1IQ/s1600-h/image12.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_sUXF1wIDVtE/TOT7TMh5OtI/AAAAAAAAAKo/EO0Mq1uy9Ls/image_thumb6.png?imgmax=800" width="379" height="281" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. Turn off warning on file open by typing “Run…” “gpedit.msc”, “User Configuration”, “Administrative Templates”, “Windows Components”, “Attachment Manager”, “Inclusing list for low file types” and add “.exe;” to the list. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_sUXF1wIDVtE/TOT7TkXwHVI/AAAAAAAAAKs/flP2M3NyVz0/s1600-h/lowrisk3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="lowrisk" border="0" alt="lowrisk" src="http://lh6.ggpht.com/_sUXF1wIDVtE/TOT7U8iGHQI/AAAAAAAAAKw/9tQMLsISsqw/lowrisk_thumb1.png?imgmax=800" width="440" height="293" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For more info, see &lt;a title="http://www.windowsreference.com/windows-7/how-to-disable-open-file-security-warning-in-windows-7/" href="http://www.windowsreference.com/windows-7/how-to-disable-open-file-security-warning-in-windows-7/"&gt;http://www.windowsreference.com/windows-7/how-to-disable-open-file-security-warning-in-windows-7/&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Prepare The Scripts&lt;/h2&gt;  &lt;p&gt;First of all, open the file config.xml and config-OWA.xml and enter the SharePoint 2010 product key under the PIDKEY parameter. Once done, open the files in Internet Explorer to ensure they open without errors, i.e. that they contain well formed XML.&lt;/p&gt;  &lt;p&gt;Now rename the AutoSPInstallerInput.xml file by appending the name of your server. For example, AutoSPInstallerInput-SPQASRV7873.xml. By not having the original file present, we ensure that our environment specific file is loaded and forms a way of documenting the installation.&lt;/p&gt;  &lt;p&gt;Open the renamed file and perform the following changes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Set the farm passphrase at &lt;strong&gt;Configuration/Farm/PassPhrase.&lt;/strong&gt; Note: Make sure that the farm passphrase is complex or the installation will fail. &lt;/li&gt;    &lt;li&gt;Reference the farm account at the following locations:      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;Configuration/Farm/Account/Username&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Cond &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Reference your database server at the following locations:      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;Configuration/Farm/Database/DBServer&lt;/strong&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Map the service accounts to the ones mentioned earlier as      &lt;ul&gt;       &lt;li&gt;Add &lt;strong&gt;SPS_SERVICE&lt;/strong&gt; account to &lt;strong&gt;Configuration/Farm/ManagedAccounts &lt;/strong&gt;where &lt;strong&gt;CommonName &lt;/strong&gt;is &lt;strong&gt;“spservice” &lt;/strong&gt;and to &lt;strong&gt;Configuration/EnterpriseServiceApps/VisioService/UnattenderIDUser&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Add &lt;strong&gt;SPS_SEARCH&lt;/strong&gt; account to &lt;strong&gt;Configuration/Farm/ManagedAccounts &lt;/strong&gt;where &lt;strong&gt;CommonName &lt;/strong&gt;is &lt;strong&gt;“searchservice” &lt;/strong&gt;and to&lt;strong&gt; Configuration/ServiceApps/EnterpriseSearchService/Account&lt;/strong&gt; and &lt;strong&gt;Configuration/ServiceApps/EnterpriseSearchService/EnterpriseSearchServiceApplications/            &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;EnterpriseSearchServiceApplication/AdminComponent/ApplicationPool/Account&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Add &lt;strong&gt;SPS_CRAWL&lt;/strong&gt; to &lt;strong&gt;Configuration/ServiceApps/EnterpriseSearchService/EnterpriseSearchServiceApplications/            &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;EnterpriseSearchServiceApplication/ContentAccessAccount&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Add &lt;strong&gt;SPS_APP_POOL_PORTAL&lt;/strong&gt; account to &lt;strong&gt;Configuration/Farm/ManagedAccounts &lt;/strong&gt;where &lt;strong&gt;CommonName &lt;/strong&gt;is &lt;strong&gt;“portalapppool”&lt;/strong&gt; and to &lt;strong&gt;Configuration/WebApplications/WebApplication[type=Portal]/applicationPoolAccount &lt;/strong&gt;and &lt;strong&gt;Configuration/WebApplications/WebApplication[type=Portal]/SiteCollections/SiteCollection/owner&lt;/strong&gt; &lt;strong&gt;Configuration/WebApplications/WebApplication/applicationPoolAccount&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Add &lt;strong&gt;SPS_MYSITE&lt;/strong&gt; account to &lt;strong&gt;Configuration/Farm/ManagedAccounts &lt;/strong&gt;where &lt;strong&gt;CommonName &lt;/strong&gt;is &lt;strong&gt;“mysiteapppool” &lt;/strong&gt;and to &lt;strong&gt;Configuration/WebApplications/WebApplication[type=MySiteHost]/applicationPoolAccount &lt;/strong&gt;and &lt;strong&gt;Configuration/WebApplications/WebApplication[type=MySiteHost]/SiteCollections/SiteCollection/owner&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Add &lt;strong&gt;SPS_CACHEADM&lt;/strong&gt; account to &lt;strong&gt;Configuration/Farm/ObjectCacheAccounts/SuperUser&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Add &lt;strong&gt;SPS_CACHERD&lt;/strong&gt; account to &lt;strong&gt;Configuration/Farm/ObjectCacheAccounts/SuperReader&lt;/strong&gt; &lt;!--EndFragment--&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In addition, follow the comments in the file to add optional changes.&lt;/p&gt;  &lt;h2&gt;Execute the script&lt;/h2&gt;  &lt;p&gt;Run the script &lt;strong&gt;c:\SP2010\AutoSPInstaller\AutoSPInstallerLaunch.bat&lt;/strong&gt; by executing the file with administrative privileges.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-hWSn5TZRgbc/TeCxqyAwfGI/AAAAAAAAAPM/kawrAtRmBgA/s1600-h/image%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-UUk69zbBzxw/TeCxrSvdquI/AAAAAAAAAPQ/nKUrupRUkcg/image_thumb%25255B2%25255D.png?imgmax=800" width="425" height="374" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Post execution tasks&lt;/h2&gt;  &lt;p&gt;I’m sure you had a nice coffee by now, so it’s time to document the progress. I normally save any reports from the desktop and also execute the SharePoint Auto Documenter from Sezai. I have compiled a version for SharePoint 2010 here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://lekman.codeplex.com/releases/view/55953" href="http://lekman.codeplex.com/releases/view/55953"&gt;http://lekman.codeplex.com/releases/view/55953&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lastly, I check over the farm in health reports and then disable the install account in AD.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-4954816326255798715?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2010/11/automated-sharepoint-2010-installations.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_sUXF1wIDVtE/TOT7RRxb2gI/AAAAAAAAAKY/eC-akdnoqpU/s72-c/image_thumb2.png?imgmax=800" height="72" width="72" /><thr:total>20</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3468218280828126488.post-5347279141480121210</guid><pubDate>Mon, 23 Aug 2010 16:17:00 +0000</pubDate><atom:updated>2010-08-23T17:17:58.813+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SharePoint 2010</category><title>Custom SharePoint Context Action links and Modal Dialogs</title><description>&lt;p&gt;After a question from “Chris” on a previous post, I thought it was better to post the whole solution. &lt;/p&gt;  &lt;p&gt;Abstract of Chris’ question (&lt;a href="http://blog.lekman.com/2010/06/working-with-sharepoint-2010-modal.html#comments" target="_blank"&gt;original comment&lt;/a&gt;):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“…using SharePoint Designer, I have added a few of my own custom items in the context menu. They work fine ... but they DON'T open up in the same 'modal dialog' - they simply open on my SharePoint screen.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The solution is dead simple. You can use the JavaScript from my previous post directly in SharePoint Designer.&lt;/p&gt;  &lt;p&gt;First, add a new context item on your list:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_sUXF1wIDVtE/THKfJWcQAjI/AAAAAAAAAJ8/HH2LO_vqZy0/s1600-h/image%5B4%5D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_sUXF1wIDVtE/THKfKsvkFyI/AAAAAAAAAKA/6t9iooUlEa4/image_thumb%5B2%5D.png?imgmax=800" width="323" height="295" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then, change the mode to &lt;strong&gt;Navigate to Url&lt;/strong&gt; and add the script as (change to the location of your list):&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;javascript:SP.UI.ModalDialog.showModalDialog({ url: &amp;quot;/Lists/Announcements/NewForm.aspx&amp;quot;, title: &amp;quot;Add item&amp;quot; }); return false;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sUXF1wIDVtE/THKfLw7XyjI/AAAAAAAAAKE/i-1MO8T28Tg/s1600-h/image%5B15%5D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_sUXF1wIDVtE/THKfNK8rMMI/AAAAAAAAAKI/yWYv9D3AuAI/image_thumb%5B9%5D.png?imgmax=800" width="323" height="285" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can optionally add the other parameters just as the &lt;a href="http://blog.lekman.com/2010/06/working-with-sharepoint-2010-modal.html" target="_blank"&gt;original post&lt;/a&gt; states to add window width and height.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3468218280828126488-5347279141480121210?l=blog.lekman.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.lekman.com/2010/08/custom-sharepoint-context-action-links.html</link><author>noreply@blogger.com (Tobias Lekman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_sUXF1wIDVtE/THKfKsvkFyI/AAAAAAAAAKA/6t9iooUlEa4/s72-c/image_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>9</thr:total></item></channel></rss>

