<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6587983161853073832</id><updated>2012-01-30T10:41:39.866-05:00</updated><category term='Seminars'/><category term='More Options'/><category term='MOS'/><category term='application.master'/><category term='Performance'/><category term='BCS'/><category term='SharePoint Menu'/><category term='QuickLaunch'/><category term='SharePoint column permissions'/><category term='Customization'/><category term='Form Library'/><category term='PowerPivot'/><category term='upgrade'/><category term='SharePoint Performance'/><category term='SQL Server 2008 R2 CTP'/><category term='Configuring Exchange Online Services'/><category term='Analysis Services'/><category term='JQuery'/><category term='Visual Studio 2008'/><category term='SharePoint Lists'/><category term='InfoPath 2007'/><category term='List Definition'/><category term='Wildcard'/><category term='MOSS'/><category term='Import Spreadsheet'/><category term='Large List'/><category term='SSIS'/><category term='SSP'/><category term='Sharepoint updates'/><category term='Virtual Machine'/><category term='SharePoint Validation'/><category term='K2'/><category term='LINQ'/><category term='Feature Stapling'/><category term='SharePoint 2007'/><category term='VMWare'/><category term='Feature'/><category term='Publishing'/><category term='URL Redirection'/><category term='Excel 2007'/><category term='MOSS 2007 to SharePoint 2010'/><category term='Patch issues'/><category term='hostserver'/><category term='Site Actions'/><category term='Security Trimmed UI'/><category term='Site templates'/><category term='Ajax Options'/><category term='URL'/><category term='Integrated Mode'/><category term='Publishing Sites'/><category term='Site Pages'/><category term='SharePoint 2010'/><category term='Kerberos'/><category term='OWA on Blackberry'/><category term='MyLinks'/><category term='Document Information Panel'/><category term='Remove Menu Items'/><category term='Architects'/><category term='Versioning'/><category term='Site Assets'/><category term='Visual Studio SharePoint Extensions'/><category term='DateTime Control'/><category term='Microsoft.SharePoint assembly'/><category term='SSRS 2005'/><category term='reference'/><category term='Intellisense'/><category term='Publications'/><category term='Search Scopes'/><category term='HTTP Handlers'/><category term='InfoPath with SharePoint 2010'/><category term='FBA'/><category term='vanity urls'/><category term='InfoPath'/><category term='infopath holiday poem'/><category term='Architect'/><category term='InfoPath Form Name'/><category term='People Search'/><category term='Architecture'/><category term='MOSS 2007'/><category term='Create Site'/><category term='BPOS'/><category term='workflow'/><category term='BDC'/><category term='RDA'/><category term='SPS 2003'/><category term='Remote Blob Storage'/><category term='Permissions'/><category term='Microsoft patches'/><category term='Form Name'/><category term='WSPBuilder'/><category term='Visual Studio 2010'/><category term='Ajax'/><category term='Configuration'/><category term='Excel Services'/><category term='Records Management'/><category term='VM'/><category term='ContentTypeID'/><category term='Exception'/><category term='Blackberry'/><category term='IIS7 MOSS SSL'/><category term='Web Parts'/><category term='CQWP'/><category term='TOC Webpart'/><category term='Document Libraries'/><category term='Master Pages'/><category term='Office 2007'/><category term='Wildcard Search'/><category term='DMZ'/><category term='Contact Selector'/><category term='SP2'/><category term='Collaboration Toolkit'/><category term='smartTool'/><category term='Report Viewer'/><category term='InfoPath 2010'/><category term='SharePoint 2010 Migration'/><category term='Tree Control'/><category term='SPSchedule'/><category term='ARCast'/><category term='Site Provisioning'/><category term='SharePoint'/><category term='People Picker'/><category term='Extranet'/><category term='SharePoint 2010 Upgrade'/><category term='FAST'/><category term='Search'/><category term='Reporting Services'/><category term='Greg Galipeau'/><category term='List Template'/><category term='Search Connector Framework'/><category term='SOAP'/><category term='VPC'/><category term='New Site'/><category term='redirection'/><category term='WSS 3'/><category term='Datasheet view'/><category term='Content Type'/><category term='Resource Files'/><category term='Content Management'/><category term='List Instance'/><category term='Active Directory'/><category term='SPDailySchedule'/><category term='owstimer'/><category term='Authentication'/><category term='Patches'/><category term='Wiki'/><category term='View Filtering'/><category term='Hotfixes'/><category term='QuickLinks'/><category term='Workflow Visualization'/><category term='Books'/><title type='text'>RDA Collaboration/Search Practice Group Team Blog</title><subtitle type='html'>Discussing SharePoint, Search and Related Technologies</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default?start-index=101&amp;max-results=100'/><author><name>Jeff Charikofsky</name><uri>http://www.blogger.com/profile/11815433441978317950</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>190</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-1931205446791255697</id><published>2011-10-28T20:01:00.009-04:00</published><updated>2011-10-29T11:24:16.910-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Permissions'/><category scheme='http://www.blogger.com/atom/ns#' term='BDC'/><category scheme='http://www.blogger.com/atom/ns#' term='Active Directory'/><title type='text'>Recover BDC application after an AD account is deleted</title><content type='html'>On a fine Friday morning, just a couple of days before production release a watchful IT manager deleted AD account of one of administrators no longer with the company. The account had permissions to multiple BDC objects. We found out about it a little later, by chance, but first we saw our SharePoint 2010 application built on &lt;a href="http://technet.microsoft.com/en-us/library/ee661740.aspx"&gt;Business Data Connectivity&lt;/a&gt; and InfoPath completely fall apart.&lt;br /&gt;&lt;br /&gt;Instead of any meaningful data all External Lists, administrator pages, SharePoint Designer, and thousands of lines of SharePoint logs showed the same dreadful message: "The specified user or domain group was not found". Worse, trying to set object permissions in Central Administration resulted in Null reference exception. SharePoint Designer did not even show any External Content Types, as if they did not exist!&lt;br /&gt;&lt;br /&gt;Online search did not uncover any easy solutions, with possibility of &lt;a href="http://social.technet.microsoft.com/Forums/da/sharepoint2010setup/thread/1268eb31-41cf-44fb-81b8-10d256046628"&gt;reconfiguring a production farm&lt;/a&gt;. Rebuilding the application from scratch normally took us a couple of days. The weekend was beginning look very grim.&lt;br /&gt;&lt;br /&gt;But with a few hours left in the day and a full admin access to the server we just had to try finding an easy way out. Armed with SQL Server Profiler and a test farm to experiment on, we reproduced the error and watched queries against the SharePoint database server. We reviewed data in the BDC database. We also tried recreating BDC Service Application and re-attaching existing BDC database. Turned out that settings in the BDC database caused the error.&lt;br /&gt;&lt;br /&gt;So in the end, (after backing up the database!) we had to remove references to the deleted AD account from AR_MetadataObjectSecurity table. Sample query:&lt;br /&gt;&lt;p style="font-weight: bold; margin: 0"&gt;&lt;br /&gt;   delete from [AR_MetadataObjectSecurity]&lt;br /&gt;   where IdentityName like '%username%'&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;We got the application back, but learned our lesson: do not to give individual user account permissions to the ECTs directly, but rather through AD groups.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-1931205446791255697?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/1931205446791255697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=1931205446791255697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/1931205446791255697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/1931205446791255697'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2011/10/recover-bdc-application-after-ad.html' title='Recover BDC application after an AD account is deleted'/><author><name>Mark Meyerovich</name><uri>http://www.blogger.com/profile/12476784828041031092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-6190581320416016294</id><published>2011-07-22T16:44:00.003-04:00</published><updated>2011-07-22T20:59:07.612-04:00</updated><title type='text'>Refresh All Published Content Types On Next Update for All Site Collections.</title><content type='html'>Recently, I had an issue where some content types published to the content type hub did not get published on the first try. The reason is that I had site collections where the Document Set feature had not been enabled for the initial content type publish, so all content types derived from Document Set failed to be published.&lt;br /&gt;&lt;br /&gt;It’s easy enough to activate the document set feature for all site collections, right? PowerShell. I can do that in one line:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;(Get-spWebApplication &amp;lt;web app url&amp;gt;).Sites | % {enable-spfeature &lt;span class="str"&gt;"DocumentSet"&lt;/span&gt; -url $_.url}&lt;/pre&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/div&gt;Done. But that’s not what this post is about. &lt;br /&gt;&lt;br /&gt;Now that the Document Set feature has been enabled, I needed a way to republish the content types that failed. I didn’t want to modify the content types in any way, so my only real option was to go into the content type publishing settings for each site collection and click the “Refresh all published content types on next update” checkbox. This magically makes all the content types re-publish themselves to the site collection the next time the Content Type Subscriber timer job runs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/-2Rxp_MePnp0/TinhMACsrRI/AAAAAAAAHes/w_JrHw1zKEY/s1600-h/image6%25255B1%25255D.png"&gt;&lt;img alt="image" border="0" height="131" src="http://lh4.ggpht.com/-m0IKlrnocjc/TinhMUwFZhI/AAAAAAAAHew/amZBfejr018/image6_thumb.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="597" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That’s all well and good if you have one or two site collections – go to each site collection, Site Actions –&amp;gt; Site Settings –&amp;gt; Content Type Publishing (under Site Collection Administration) –&amp;gt; Click the checkbox –&amp;gt; Click OK. It’s easy.&lt;br /&gt;&lt;br /&gt;But I had a lot of site collections. This was my My Site web application. With personal site collections for a lot of users. 200 or so users. That’s a lot of clicking.&lt;br /&gt;&lt;br /&gt;Unfortunately, I could find no apparent way to “click” this checkbox through PowerShell. There is no obvious member or property on either SPSite or SPWeb that seemed like it would do the trick. Frustrated, I turned to &lt;a href="http://wiki.sharpdevelop.net/ILSpy.ashx"&gt;ILSpy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.sharpdevelop.net/ILSpy.ashx"&gt;ILSpy&lt;/a&gt; is what has replaced Reflector in my toolbox now that Reflector is no longer free. I highly recommend it. But this isn’t a post about &lt;a href="http://wiki.sharpdevelop.net/ILSpy.ashx"&gt;ILSpy&lt;/a&gt;…&lt;br /&gt;&lt;br /&gt;The first step in trying to determine what SharePoint does when that checkbox is checked was to open the aspx file to find out where the code behind is located. Here’s the key line in ContentTypeSyndicationHubs.aspx in the Template\Layouts folder:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Page Language="C#" DynamicMasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.Taxonomy.OM.CodeBehind.ContentTypeSyndicationHubsPage"       %&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Inherits attribute tells me the namespace I’m looking for, but not the assembly. First I checked Microsoft.SharePoint.dll, but when I didn’t find it there, I checked Microsoft.SharePoint.Taxonomy.dll (in the ISAPI folder). There I found what I was looking for:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/-lzAKZaAv0fc/TinhMhuiB7I/AAAAAAAAHe0/HcvJt78cfTI/s1600-h/image%25255B9%25255D.png"&gt;&lt;img alt="image" border="0" height="253" src="http://lh6.ggpht.com/-1BDjJ-EHrjQ/TinhM0qtpII/AAAAAAAAHe4/s_EyWZKIalQ/image_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="688" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So if the checkbox is checked, a method called Subscriber.RefreshAllTimeStamps is called for the current site. What does that function do? If I click on it, I get a warning message with the latest version of ILSpy (previous versions would just silently fail…)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/-lGe4msbLG9c/TinhNP6eFuI/AAAAAAAAHe8/goyOM9v8WuE/s1600-h/image3%25255B2%25255D.png"&gt;&lt;img alt="image" border="0" height="244" src="http://lh4.ggpht.com/-_Td8viQHdlc/TinhNfcJeMI/AAAAAAAAHfA/mqkLsa1SIbw/image3_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="494" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With “Show internal types and members” selected under the View menu, I find this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-z7yuLwtAjV0/TinhNgyhjmI/AAAAAAAAHfE/0yLG2bigP78/s1600-h/image%25255B10%25255D.png"&gt;&lt;img alt="image" border="0" height="234" src="http://lh5.ggpht.com/-mZ9Ym8uV2XU/TinhN1aURoI/AAAAAAAAHfI/I4KnS5Yp6cU/image_thumb%25255B4%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="693" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahhhhhh – now we’re getting somewhere. Even though this is an internal method that can’t be called from PowerShell, now that I know what I’m doing, it’s easy enough to convert:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;Function&lt;/span&gt;&lt;/span&gt; &lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;RemoveAllTimeStamps&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;([&lt;/span&gt;&lt;/span&gt;&lt;span style="color: teal; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: teal; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: teal; font-family: Courier New; font-size: x-small;"&gt;Microsoft.SharePoint.SPSite&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$site&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt; &lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$site&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;-eq&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$null&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;) { &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt; &lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $rootWeb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$site&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;RootWeb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt; &lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$rootWeb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;.Properties.ContainsKey(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: maroon; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: maroon; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: maroon; font-family: Courier New; font-size: x-small;"&gt;"MetadataTimeStamp"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt; &lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt; &lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $rootWeb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;.Properties[&lt;/span&gt;&lt;/span&gt;&lt;span style="color: maroon; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: maroon; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: maroon; font-family: Courier New; font-size: x-small;"&gt;"MetadataTimeStamp"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span style="color: teal; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: teal; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: teal; font-family: Courier New; font-size: x-small;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;]::&lt;/span&gt;&lt;/span&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;Empty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt; &lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$rootWeb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;.Properties.Update()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that we’ve got that, it’s just a matter of calling RemoveAllTimeStamps for each site collection in the web application.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$webapp&lt;/span&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;=&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;Get-SPWebApplication&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &amp;lt;web app&amp;nbsp;url&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$webapp&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;.&lt;/span&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;Sites&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; | ? {&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$_&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;.AllWebs.Count &lt;/span&gt;&lt;/span&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: red; font-family: Courier New; font-size: x-small;"&gt;-ne&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$null&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;} | &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;%&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: purple;"&gt;&lt;span style="color: purple;"&gt;&lt;span style="color: purple;"&gt;$site&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;&lt;span style="color: red;"&gt;&lt;span style="color: red;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="color: purple;"&gt;&lt;span style="color: purple;"&gt;&lt;span style="color: purple;"&gt;$_&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: cadetblue; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RemoveAllTimeStamps&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;$site&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: purple; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $site&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;&lt;span style="color: saddlebrown; font-family: Courier New; font-size: x-small;"&gt;Dispose&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;&lt;span style="font-family: Courier New; font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;/div&gt;Now, simply run the Content Type Hub job, followed by the Content Type Subscriber job for your web application. If you have a lot of content types – be prepared to wait. I typed this up this entire blog post while my job went from 9% to 19%. &lt;br /&gt;&lt;br /&gt;- Andrew Moore&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-6190581320416016294?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/6190581320416016294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=6190581320416016294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6190581320416016294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6190581320416016294'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2011/07/refresh-all-published-content-types-on.html' title='Refresh All Published Content Types On Next Update for All Site Collections.'/><author><name>Andrew Moore</name><uri>http://www.blogger.com/profile/18218394590494591827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-m0IKlrnocjc/TinhMUwFZhI/AAAAAAAAHew/amZBfejr018/s72-c/image6_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8102563105920020267</id><published>2011-03-25T00:18:00.001-04:00</published><updated>2011-03-25T00:20:00.231-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Search Connector Framework'/><title type='text'>Powershell error - The registration of the custom connector for protocol is corrupted. Cannot be removed</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Recently came across this error when trying to remove a deployed custom SharePoint 2010 search connector in PowerShell: &lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Remove-SPEnterpriseSearchCrawlCustomConnector -Identity Inmagic -SearchApplication $searchapp&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Remove-SPEnterpriseSearchCrawlCustomConnector : &lt;b&gt;The registration of the custom connector for protocol 'Inmagic' is corrupted. Cannot be removed.&lt;/b&gt;&lt;br /&gt;At line:1 char:46&lt;br /&gt;+ Remove-SPEnterpriseSearchCrawlCustomConnector &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;nbsp; -Identity Inmagic -SearchApplication $searchapp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; + CategoryInfo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : InvalidArgument: (Inmagic:String) [Remove-SPEnterp...CustomConnector], ArgumentException&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; + FullyQualifiedErrorId : Microsoft.Office.Server.Search.Cmdlet.RemoveCustomConnector&lt;/blockquote&gt;It turned out that the message was wrong and protocol name was case-sensitive.&amp;nbsp; Just sharing as it took a while for me to figure out.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-8102563105920020267?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8102563105920020267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8102563105920020267' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8102563105920020267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8102563105920020267'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2011/03/powershell-error-registration-of-custom.html' title='Powershell error - The registration of the custom connector for protocol is corrupted. Cannot be removed'/><author><name>Ramu Pulipati</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3389697887023681920</id><published>2011-02-07T10:49:00.001-05:00</published><updated>2011-02-07T10:59:28.047-05:00</updated><title type='text'>Indexing SharePoint 2007 MySites and User Profiles with SharePoint 2010 with FAST</title><content type='html'>&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:0767317B-992E-4b12-91E0-4F059A8CECA8:eb5db938-de4e-4440-8ddd-4f8cba44876a" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/FAST" rel="tag"&gt;FAST&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Search" rel="tag"&gt;Search&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint+2010" rel="tag"&gt;SharePoint 2010&lt;/a&gt;&lt;/div&gt;    &lt;br /&gt;Recently I was approached by a customer who wanted to replace the Google Search Appliance on their SharePoint 2007 farm with the FAST search engine in SharePoint 2010.&amp;#160; For a couple of reasons they didn’t want to upgrade the whole farm at this point and were concerned about indexing the MySite and User Profile information on the SharePoint 2007 farm.&amp;#160; I told them that I thought it was possible but hadn’t tried it so would get back to them.&amp;#160; I did some quick research but couldn’t find a definitive answer.&amp;#160; So I decided to setup an environment and try it for myself.&amp;#160; I started with the Microsoft provided SP2010 with FAST environment found here: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I then built a SP 2007 environment on another VM that I had added to the Contoso domain.&amp;#160; I imported the user profile information into the SP2007 farm, and copied over the ‘Ask Me About’ descriptions.&amp;#160; I put the ‘Ask Me About’ information in the Skills profile column in SP2007 since the ‘Ask Me About’ profile column is new to SP 2010.&lt;/p&gt;  &lt;p&gt;First lets look at a screen shot of the search results from the SP2010 MySites and User Profiles:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_88umxTZ-ciA/TVAUlfsz7kI/AAAAAAAAANg/l52l9QzYIPU/s1600-h/clip_image0028.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="clip_image002" border="0" alt="clip_image002" src="http://lh4.ggpht.com/_88umxTZ-ciA/TVAUmYzSREI/AAAAAAAAANk/I4NTNJY3TMw/clip_image002_thumb3.jpg?imgmax=800" width="902" height="328" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then compare that to a screen shot of search results when indexing the SP2007 environment MySites and User Profiles.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_88umxTZ-ciA/TVAUnL01zbI/AAAAAAAAANo/5pg_KNsR9rI/s1600-h/clip_image00254.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="clip_image002[5]" border="0" alt="clip_image002[5]" src="http://lh3.ggpht.com/_88umxTZ-ciA/TVAUnoA4sRI/AAAAAAAAANs/p0APD6inFNM/clip_image0025_thumb2.jpg?imgmax=800" width="905" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see they are nearly identical.&amp;#160; To get the ‘Ask Me About’ text to show up I did add the Crawled Properties People:SPS-Skills(Text) to the Responsibilities managed property but other than that it was seamless it worked without changes.&amp;#160; You will notice that the ‘Add as colleague’ and ‘Browse in organizational chart’ don’t appear in the SP2007 crawled information that is because SP2007 doesn’t support these features.&lt;/p&gt;  &lt;p&gt;So with that happy indexing.&lt;/p&gt;  &lt;p&gt;Andrew&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3389697887023681920?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3389697887023681920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3389697887023681920' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3389697887023681920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3389697887023681920'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2011/02/indexing-sharepoint-2007-mysites-and.html' title='Indexing SharePoint 2007 MySites and User Profiles with SharePoint 2010 with FAST'/><author><name>Andrew Crowder</name><uri>http://www.blogger.com/profile/03742717900986525365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_88umxTZ-ciA/TVAUmYzSREI/AAAAAAAAANk/I4NTNJY3TMw/s72-c/clip_image002_thumb3.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-2733912160785062149</id><published>2011-01-24T21:14:00.000-05:00</published><updated>2011-01-24T21:14:31.712-05:00</updated><title type='text'>Improving SharePoint performance</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;After working on a highly available and heavily customized - MOSS Publishing Portal farm, here are few lessons learned on improving SharePoint performance.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;General web page improvements:  &lt;/b&gt;These are applied to branding files and application resources to improve the page loading speed and user experience.  Most of them are applicable to any web application. SharePoint handles some of these features natively using blob cache, core files, etc but for custom developed solutions, these items should to be handled manually:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;CSS Sprites&lt;/b&gt; - are built by grouping small images into one large image and referring part of the image using CSS class.  This reduces number of images downloaded from the client browser and improves the overall page loading speed.  More details on CSS sprites can be found at http://css-tricks.com/css-sprites/.  Since, CSS sprites are not supported in IE6, it cannot be used in organizations that still support IE6.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Consolidate JS and CSS files&lt;/b&gt; - Since number of HTTP requests are more expensive than downloading single large file, consolidating multiple JS or CSS files into single large file would improve the overall resource load times.  Also, we observed that combining most commonly used files together yielded better performance (combining too many files may adversely impact the download speed &amp;amp; processing performance due to large file size).&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Group CSS files by Browser type&lt;/b&gt; - Since, browser type is unique for each customer request, we observed it as the best way to combine the commonly used CSS files.  Also, CSS expressions were avoided due to performance concerns.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Anonymous access for CSS, JS and image files&lt;/b&gt; - Since NTLM requests require at least one additional roundtrip (typically for 401 unauthorized responses), enabling anonymous access to unsecure branding resources reduces the number of roundtrips and improves the page download speeds.Also, when SharePoint return “401 unauthorized” response, it includes the entire Error page response (see in Fiddler), reducing the size of “401 unauthorized” page would reduce the response payload and reduce bandwidth utilization.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Cache JS, CSS and image files in browser &lt;/b&gt;- Since SharePoint supports this natively, no additional work is required to cache the resource files. However, if the resource files are dynamic in nature (changes with releases) then these resources should be accessed using unique querystring to invalidate the browser cache.In our implementation, to ensure unique query string for JS &amp;amp; CSS files, a simple HTTP handler was implemented to render unique query string based on file checksum.  Files hosted in SharePoint layouts folder can use MakeBrowserCacheSafeLayoutsUrl() function to render unique url.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Avoid Minification of JS and CSS&lt;/b&gt; - Minification removes extra characters and spaces in the JS &amp;amp; CSS files to reduce the file size and to improve the download speed.  However, when the file is compressed, the minified file has little or no change in the download.  Also, a minified file is harder to troubleshoot than a regular file. So, Minification was avoided for better maintainability.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Include JS files and CSS files in the header&lt;/b&gt; - Since browser interpret HTML head content and body content differently, i.e., all script references in head tag are loaded after the page is loaded and references in body tag are loaded at the time page load, reducing the referenced content in body improves the page rendering experience. &lt;br /&gt;This is achieved - by referencing all required scripts at the time of page load in body tag and rest of them in the head tag.  CSS files are always referenced in head tag.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Content delivery network (CDN)&lt;/b&gt; - has unique advantages such as geographical distribution of data and parallel loading of resources in the web page.  This can be utilized to improve the SharePoint performance. Also,&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Since CDNs have higher percentage of availability and throughput, moving the branding elements to CDN can benefit the performance.  &lt;/li&gt;&lt;li&gt;When CDN files are accessed over multiple domain names, it enables Browser to download the files in parallel (applicable to IE6 or older browsers).&lt;/li&gt;&lt;li&gt;JS and CSS files compression - Natively supported for files hosted in SharePoint. For files hosted outside SharePoint, compression greatly improves the download speeds.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Use JQuery library or an equivalent library&lt;/b&gt; - There are number of reasons to use JQuery but based on our observation the performance benefits were clearly visible as the code grew larger.&amp;nbsp; Also, improved overall quality of code.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To be continued with &lt;b&gt;Caching, Webpart &amp;amp; other development guidelines&lt;/b&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-2733912160785062149?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/2733912160785062149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=2733912160785062149' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2733912160785062149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2733912160785062149'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2011/01/improving-sharepoint-performance.html' title='Improving SharePoint performance'/><author><name>Ramu Pulipati</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7670962580275459462</id><published>2010-12-17T08:40:00.007-05:00</published><updated>2010-12-17T08:49:21.269-05:00</updated><title type='text'>What’s This Destination Folder Field On My File Upload Page?</title><content type='html'>&lt;span xmlns=""&gt;&lt;div&gt;We recently performed a MOSS 2007 to SPS 2010 upgrade. From a SharePoint perspective, it was a pretty vanilla upgrade where we moved all the content (sites, webs, documents, lists, etc) from a 2007 farm to a 2010 farm. After we performed the migration we noticed some differences between the "migrated" and "newly created" versions of our document libraries. We were noticing on most "migrated" document libraries, when a user uploaded a file, they were now seeing a "Destination Folder" field in addition to the File Upload and Overwrite checkboxes.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 111px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5551647780521210162" border="0" alt="" src="http://1.bp.blogspot.com/_faKQOw930vs/TQtqPhQNcTI/AAAAAAAAADM/Yyhd5qK-tAc/s320/DestinationFolder.png" /&gt;&lt;br /&gt;&lt;div&gt;This new Destination Folder field input was showing regardless of whether there were sub folders or not. While this is not likely a major drawback for most sites, it was a difference, and our end users wanted answers. &lt;/div&gt;&lt;br /&gt;&lt;p&gt;I analyzed two sites, one migrated, one newly created. Both were created from the same site template (which did not need to change for upgrade to 2010). Each URL to the Upload page was the same for the equivalent document library in both sites:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;/_layouts/Upload.aspx?List={GUID}&amp;amp;RootFolder=&amp;amp;IsDlg=1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I pulled up the Upload.aspx page from the SharePoint Root (aka 14 hive) and looked for some insight, but to my surprise, there were no references to the Destination Folder input controls in either the markup. I checked the referenced javascript to see if maybe these were being built dynamically, but found nothing. Using the Page directive from the Upload.aspx, I located the assembly containing the base class: Microsoft.SharePoint.ApplicationPages.dll and loaded it up in my favorite disassembler. This assembly was not in the GAC as I expected, but rather in my web application's _app_bin directory.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:gray;"&gt;&lt;em&gt;A copy of the Microsoft.SharePoint.ApplicationPages.dll assembly is copied into the _app_bin folder for each web app. I haven't researched why this assembly is copied here, rather than installed to the GAC, but suspect it has something to do with CAS and running with least amount of permissions. For another day…&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;After looking in the obvious places and finding no references to these controls, I had one place left to look: OnPreInit(). Sure enough, I found some logic in here used the &lt;strong&gt;SPWeb.CustomUploadPage&lt;/strong&gt; and does a Server.Transfer to the page if one is specified.&lt;span style="color:gray;"&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;I put together a quick PowerShell script to help me compare my two webs:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;$newWeb = Get-SPWeb &lt;a href="http://newweb/"&gt;http://newweb/&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;$migratedWeb = Get-SPWeb http://migratedweb &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "New custom upload page: " $newWeb.CustomUploadPage &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "Migrated custom upload page: " $migratedWeb.CustomUploadPage&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Sure enough, the new web did not have a CustomUploadPage specified, but my migrated did. It was pointing to: &lt;strong&gt;/_layouts/UploadEx.aspx&lt;/strong&gt;. Sure enough in the markup for this page were references to target folder's input controls, however, they were surrounded with some conditional logic that was checking to see if the list "HasFolders" (i.e. does the list have SubFolders?). But my migrated web's document library doesn't have any SubFolders…What gives? Time to peek at the UploadEx base class in the disassembler (Microsoft.Office.Policy.Pages.dll, again in the _app_bin folder for each web application). &lt;/p&gt;&lt;br /&gt;&lt;p&gt;After some tracing through, I found that ultimately, the decision on whether a folder has subfolders, at least in the context of this particular page, is based on an entry in the Folder's property bag: folder.Properties["vti_foldersubfolderitemcount"] &lt;/p&gt;&lt;br /&gt;&lt;p&gt;I wrote some more PowerShell and sure enough, in the case of my migrated document library, this had a value of "1". Again, my migrated library has no sub folders, so why would this value be set to "1". &lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Disclaimer: the rest is theory as I did not invest the time to fully research this and by this point I already had the information needed to explain the situation to the end users and get a script written to clear the SPWeb.CustomUploadPage value in all places needing it which would be sufficient to eliminate the display of the "Destination Folder" input controls since the regular Upload.aspx page doesn't make use of these controls.&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;I suspect, that the 2007 to 2010 migration set the ["vti_foldersubfolderitemcount"] property to be "1" and/or this property was handled differently in 2007 as compared with 2010. You see, there is actually a SubFolder, but it's the "Forms" folder, which is generally hidden from view and not available for users to upload to. Perhaps during 2007 -&amp;gt; 2010 migration, the upgrade process wasn't checking for the "Forms" folder if it was resetting the "vti_foldersubfolderitemcount" property? Also, the migration must have been responsible for setting the SPWeb.CustomUploadPage property on each of the migrated webs because we had not explicitly made this change. Perhaps this is a change to how document libraries are provisioned between 2007 and 2010?&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;To test this theory out a bit, I created a brand &lt;em&gt;new&lt;/em&gt; document library in my &lt;em&gt;migrated&lt;/em&gt; web. I compared the newly created library to the migrated library with some PowerShell:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;$migratedWeb = Get-SPWeb http://migratedweb &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;$migratedDocLib = $migratedWeb.Lists["Migrated Doc Lib"]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;$migratedRootFolder = $migratedDocLib.RootFolder&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "RootFolderUrl" $migratedRootFolder.Url&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "folders count" $migratedRootFolder.SubFolders.Count&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "folder[0] url" $migratedRootFolder.SubFolders[0].Url&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "Prop value" $migratedRootFolder.Properties["vti_foldersubfolderitemcount"]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;write-host""&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;write-host""&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;$newDocLib = $migratedWeb.Lists["New Doc Lib"]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;$newRootFolder = $newDocLib.RootFolder&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "RootFolderUrl" $newRootFolder.Url&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "folders count" $newRootFolder.SubFolders.Count&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "folder[0] url" $newRootFolder.SubFolders[0].Url&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="BACKGROUND: #f2f2f2"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Write-Host "Prop value" $newRootFolder.Properties["vti_foldersubfolderitemcount"]&lt;/span&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;The results were as I expected: The newly created document library (in the migrated web) had a vti_foldersubfolderitemcount property value of 0, whereas my migrated document library had a value of "1" (presumably a reference to the "Forms" folder).&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7670962580275459462?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7670962580275459462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7670962580275459462' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7670962580275459462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7670962580275459462'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/12/whats-this-destination-folder-field-on.html' title='What’s This Destination Folder Field On My File Upload Page?'/><author><name>Brian McCullough</name><uri>http://www.blogger.com/profile/03631616681884901656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_faKQOw930vs/TQtqPhQNcTI/AAAAAAAAADM/Yyhd5qK-tAc/s72-c/DestinationFolder.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-5909954522011549880</id><published>2010-12-04T20:12:00.000-05:00</published><updated>2010-12-04T20:12:04.411-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='List Definition'/><category scheme='http://www.blogger.com/atom/ns#' term='Content Type'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='List Instance'/><title type='text'>SharePoint 2010: Using Visual Studio 2010 to Create a List Definition and List Instance (Based on a new Content Type)</title><content type='html'>I have expanded on the Content Type solution I posted &lt;a href="http://stevemannspath.blogspot.com/2010/11/sharepoint-2010-leveraging-visual.html"&gt;here&lt;/a&gt; to now include List Definitions and a List Instance. It is very easy to do with Visual Studio 2010. All of the details are in this &lt;a href="http://stevemannspath.blogspot.com/2010/12/sharepoint-2010-using-visual-studio.html"&gt;post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-5909954522011549880?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/5909954522011549880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=5909954522011549880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5909954522011549880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5909954522011549880'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/12/sharepoint-2010-using-visual-studio.html' title='SharePoint 2010: Using Visual Studio 2010 to Create a List Definition and List Instance (Based on a new Content Type)'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7410594751671432623</id><published>2010-11-26T10:12:00.001-05:00</published><updated>2010-12-04T21:38:41.259-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath with SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='infopath holiday poem'/><title type='text'>InfoPath Holiday Poem</title><content type='html'>Since the holiday season has officially started along with the upcoming release of my second book, I decided to create a holiday poem based on InfoPath with SharePoint 2010. The post is located &lt;a href="http://stevemannspath.blogspot.com/2010/11/infopath-holiday-poem.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7410594751671432623?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7410594751671432623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7410594751671432623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7410594751671432623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7410594751671432623'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/infopath-holiday-poem.html' title='InfoPath Holiday Poem'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-847540626790825513</id><published>2010-11-22T14:35:00.001-05:00</published><updated>2010-11-22T14:35:00.529-05:00</updated><title type='text'>Preupgradecheck Failure: Content database with modified database schemas</title><content type='html'>&lt;p&gt;While recently running a preupgradecheck on a MOSS 2007 farm, I received the following scary error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;Failed : Content database with modified database schemas&amp;#160; &lt;br /&gt;User modifications to the SharePoint content database, including but not limited to table schemas, index, stored procedures, are not supported and will cause upgrade to future versions of SharePoint to fail.The databases in the following list seem to have been modified from the original schema:        &lt;br /&gt;Data Source=SEVER;Initial Catalog=DB;Integrated Security=True;Enlist=False;Connect Timeout=15&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;My first thought was that someone must have been messing around with the database but I certainly don’t think any reasonable SharePoint developer or admin would make a change to the schema of a content database. After some hunting, I turned up &lt;a href="http://technet.microsoft.com/en-us/library/cc262967.aspx#Data" target="_blank"&gt;this page&lt;/a&gt;. Buried at the very end is the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If you did not make any manual schema changes to the database, you can ignore this error and continue with the ugprade [sic]. This is a residual error from the upgrade process from SharePoint Portal Server 2003 to Office SharePoint Server 2007.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So, if you upgraded from SPS 2003 to MOSS 2007, you should expect to see this complaint from preupgradecheck. The upgrade to 2010 will work just fine. Now if I can just figure out where all those missing features came from….&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-847540626790825513?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/847540626790825513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=847540626790825513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/847540626790825513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/847540626790825513'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/preupgradecheck-failure-content.html' title='Preupgradecheck Failure: Content database with modified database schemas'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7165596132246243134</id><published>2010-11-19T16:27:00.001-05:00</published><updated>2010-11-19T16:27:39.453-05:00</updated><title type='text'>Automate Search Site Customizations</title><content type='html'>&lt;p&gt;Managing a search sites and all their webpart settings can be a difficult process requiring many manual steps. Keeping the Fetched Properties and XSL of the Core Search Results webpart on the default search results page in sync between multiple environments can be time consuming and error prone. It’s bad enough to have to do this manually in a production environment, but add development, test, and stage environments to the mix and you end up with a lot of clicking and pasting; never a good way to arrive at a stable and repeatable process for your deployments. Luckily, PowerShell provides some relief to the copy, click, paste, repeat method of deploying search webpart customizations.&lt;/p&gt;  &lt;p&gt;The following PowerShell script can read the values from an external XML or XSL file (which can now be placed under source control), check out the appropriate page (results.apsx in this case), update the property values on the web parts, check the page back in, and publish it:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3" face="Cordia New"&gt;function LoadXmlData([string]$filePath)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return [System.IO.File]::ReadAllText($filePath)        &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;&lt;font size="3" face="Cordia New"&gt;$executingFolder = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent       &lt;br /&gt;$resultsPageUrl = &amp;quot;&lt;/font&gt;&lt;a href="http://localhost/sites/search/pages/results.aspx&amp;quot;"&gt;&lt;font size="3" face="Cordia New"&gt;http://localhost/sites/search/pages/results.aspx&amp;quot;&lt;/font&gt;&lt;/a&gt;      &lt;br /&gt;&lt;font size="3" face="Cordia New"&gt;$siteUrl = &amp;quot;&lt;/font&gt;&lt;a href="http://localhost/sites/search&amp;quot;"&gt;&lt;font size="3" face="Cordia New"&gt;http://localhost/sites/search&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3" face="Cordia New"&gt;$searchSite = new-object Microsoft.SharePoint.SPSite($siteUrl)       &lt;br /&gt;$searchWeb = $searchSite.OpenWeb()        &lt;br /&gt;$publishingWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($searchWeb)        &lt;br /&gt;$resultstpage = $publishingWeb.GetPublishingPage($resultsPageUrl)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3" face="Cordia New"&gt;$resultstpage.CheckOut()       &lt;br /&gt;$webpartManager = $searchWeb.GetLimitedWebPartManager($resultstpage.Url,&amp;#160; [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3" face="Cordia New"&gt;foreach($webpart in $webpartmanager.WebParts)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; switch ($webpart.Title)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&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; &amp;quot;Refinement Panel&amp;quot;        &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;&amp;#160;&amp;#160;&amp;#160;&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; write-host &amp;quot;Setting Filter Category Definition&amp;quot;        &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $webpart.FilterCategoriesDefinition = LoadXmlData(join-path $executingFolder &amp;quot;RefinerDefinition.xml&amp;quot;)        &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;&amp;#160;&amp;#160;&amp;#160;&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;Search Core Results&amp;quot;        &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;&amp;#160;&amp;#160;&amp;#160;&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; write-host &amp;quot;Setting Fetched Properties&amp;quot;        &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $webpart.PropertiesToRetrieve = LoadXmlData(join-path $executingFolder &amp;quot;FetchedProperties.xml&amp;quot;)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3" face="Cordia New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; write-host &amp;quot;Setting XSL&amp;quot;;       &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $webpart.Xsl = LoadXmlData(join-path $executingFolder &amp;quot;ResultView.xsl&amp;quot;)        &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;      &lt;br /&gt;&lt;font size="3" face="Cordia New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $webpartmanager.SaveChanges($webpart)       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3" face="Cordia New"&gt;$resultstpage.CheckIn(&amp;quot;Automated Update&amp;quot;);       &lt;br /&gt;$resultstpage.listItem.File.Publish(&amp;quot;Automated Update&amp;quot;)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3" face="Cordia New"&gt;$publishingWeb.Close()       &lt;br /&gt;$searchWeb.Close()        &lt;br /&gt;$searchSite.Close()&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;No more edit page, edit web part properties, save, check in, and publish in every environment. Simply copy the configuration files to the server and execute the script. Less chance for errors and less time spent deploying changes. The approach here can easily be expanded to manage much more than the three properties in the example. &lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7165596132246243134?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7165596132246243134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7165596132246243134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7165596132246243134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7165596132246243134'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/automate-search-site-customizations.html' title='Automate Search Site Customizations'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-6954649554074736722</id><published>2010-11-11T14:28:00.001-05:00</published><updated>2010-11-11T14:29:08.598-05:00</updated><title type='text'>SharePoint 2010: Leveraging Visual Studio  2010 to Deploy Custom Content Types</title><content type='html'>It's fairly easy to create content types right within SharePoint itself. However, when in a development scenario, you need an easy way to replicate custom content type creation without having to manually enter site columns and site content types by hand. Luckily Visual Studio 2010 has a project for that. Generating a Content Type project will easily package up site column and content type definitions into a re-distributable solution/feature allowing for seemless deployment between environments (e.g. dev, staging, uat, production, etc.).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have the steps and figures posted &lt;a href="http://stevemannspath.blogspot.com/2010/11/sharepoint-2010-leveraging-visual.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-6954649554074736722?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/6954649554074736722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=6954649554074736722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6954649554074736722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6954649554074736722'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/sharepoint-2010-leveraging-visual.html' title='SharePoint 2010: Leveraging Visual Studio  2010 to Deploy Custom Content Types'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-2218207159990624043</id><published>2010-11-10T16:08:00.000-05:00</published><updated>2010-11-10T16:08:48.934-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWA on Blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='Blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='BPOS'/><title type='text'>BPOS: Setting up Email on a Blackberry Device</title><content type='html'>After adding a domain name to BPOS and getting Outlook functioning, one may want to access this email on a mobile device such as a Blackberry. That's what my friend needed but it took some tries to get it to work. I have all of the details on my post &lt;a href="http://stevemannspath.blogspot.com/2010/11/bpos-setting-up-email-on-blackberry.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-2218207159990624043?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/2218207159990624043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=2218207159990624043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2218207159990624043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2218207159990624043'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/bpos-setting-up-email-on-blackberry.html' title='BPOS: Setting up Email on a Blackberry Device'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8833283879932598121</id><published>2010-11-10T16:00:00.000-05:00</published><updated>2010-11-10T16:00:32.147-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Configuring Exchange Online Services'/><category scheme='http://www.blogger.com/atom/ns#' term='BPOS'/><title type='text'>BPOS: Adding Your Own Domain</title><content type='html'>When signing up for MOS, you are required to enter a domain name. The resultant domain name becomes the name you entered along with the suffix of .microsoftonline.com. So therefore, when using the Exchange Online Services, the emails addresses will look like &lt;a href="mailto:name@mydomain.microsoftonline.com"&gt;name@mydomain.microsoftonline.com&lt;/a&gt;. It is probably more desirable to have emails like &lt;a href="mailto:name@mydomain.com"&gt;name@mydomain.com&lt;/a&gt; instead. If you have a domain name registered, you can easily add it to BPOS.&lt;br /&gt;&lt;br /&gt;After successfully subscribing to MOS and accessing the administration center, one of the first tasks listed is to add a domain:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/TNr91lZWEPI/AAAAAAAAAcw/mJoQMvoCLsw/s1600/bpos+post+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="379" px="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/TNr91lZWEPI/AAAAAAAAAcw/mJoQMvoCLsw/s640/bpos+post+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click on that task to initiate an easy-to-use wizard interface. The first step is actually enter the domain name:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/TNr-S0rMogI/AAAAAAAAAc0/tI-i8nwiH_U/s1600/bpos+post+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" px="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/TNr-S0rMogI/AAAAAAAAAc0/tI-i8nwiH_U/s400/bpos+post+2.png" width="370" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Enter the domain name and leave the Type as Autoritative if you want Exchange Online Services to manage all mail from the domain. Click Create. The system will add the domain to BPOS and present a confirmation message:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/TNr_cTHVUHI/AAAAAAAAAc4/M3hQX1T-rYo/s1600/bpos+post+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" px="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/TNr_cTHVUHI/AAAAAAAAAc4/M3hQX1T-rYo/s400/bpos+post+3.png" width="372" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Your domain needs to be verified. Leave the Start Verification checked and click Finish. The verification screen appears with specific instructions:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/TNsAHgIKS-I/AAAAAAAAAc8/XVItvUpqXY8/s1600/bpos+post+4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" px="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/TNsAHgIKS-I/AAAAAAAAAc8/XVItvUpqXY8/s400/bpos+post+4.png" width="368" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;﻿You must now open a new browser window and navigate to your domain administration page. This will vary depending on your domain provider. Within the DNS management of your domain administration, add a new CNAME entry using the host name provided on the Verification dialog which points to the specified Exchange mail address.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The dialog states to wait 15 minutes for the change to propagate but I believe I only waited a few minutes (so timing could vary). Once you figure it is enough time, click the Verify button. MOS will attempt to verify the domain and will present a confirmation if successful:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/TNsBmiMLX5I/AAAAAAAAAdA/7sue8ZIsaO4/s1600/bpos+post+5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" px="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/TNsBmiMLX5I/AAAAAAAAAdA/7sue8ZIsaO4/s400/bpos+post+5.png" width="366" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This only allows you to add the domain but does nothing with the email yet. Enabling the email handling requires an additional set of steps provided by the &lt;a href="http://www.microsoft.com/online/help/en-us/helphowto/d9214059-ca8c-4452-9ee8-d2e49c5ad515.htm"&gt;link&lt;/a&gt; in the confirmation screen. The steps are fairly easy.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Essentially you navigate to the Domains listing in the MOS Administration center which is located under teh Users tab. Select the added domain in the listing and click the Edit button. The domain properties dialog appears. Select the Inbound Messaging tab:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="640" px="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/TNsDPOlQhcI/AAAAAAAAAdE/UEv5OxwXjCM/s640/bpos+post+6.png" width="451" /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;﻿Click the Enable button to enable incoming email. Don't worry about the MX instructions yet as they will still be there upon confirmation. The confirmation appears after the incoming mail has been enabled:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gmYwAJepiK4/TNsEnb4ewNI/AAAAAAAAAdI/KyWiWDbhM80/s1600/bpos+post+7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" px="true" src="http://3.bp.blogspot.com/_gmYwAJepiK4/TNsEnb4ewNI/AAAAAAAAAdI/KyWiWDbhM80/s640/bpos+post+7.png" width="588" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;﻿Now you need to go back to your DNS management and change the MX entry as explained in the instructions. Once completed click Finish.&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;To test the emails you need to have the email account within Outlook. While this can be done manually, after downloading and installing the MOS Sign In Application, you will be able to select the Outlook Email option and configure it locally. The configuration will create a new mail box and profile accordingly.&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;So that's about it! Once you follow these steps your domain will be added to MOS/BPOS and you can use a normal email address accordingly - all without having to run an Exchange Server in yoiur basement.&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;The Admin account will still have the microsoftonline.com version of the domain -&amp;nbsp;&amp;nbsp;not that this makes a difference. However, to make signing in easier, you may want the Admin account to have the same domain. When looking at the Admin user properties, the domain selection is disabled. You need to create a real user and grant them Administrative rights. Then log in as that user and modify the Admin account. You will be able to change the domain of the Admin.&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&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/6587983161853073832-8833283879932598121?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8833283879932598121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8833283879932598121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8833283879932598121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8833283879932598121'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/bpos-adding-your-own-domain.html' title='BPOS: Adding Your Own Domain'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gmYwAJepiK4/TNr91lZWEPI/AAAAAAAAAcw/mJoQMvoCLsw/s72-c/bpos+post+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4182813422615823770</id><published>2010-11-09T23:07:00.001-05:00</published><updated>2010-11-10T15:07:30.080-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Hotfixes'/><category scheme='http://www.blogger.com/atom/ns#' term='Patch issues'/><title type='text'>SharePoint 2010: Run PSConfigUI After August 2010 Hotfixes</title><content type='html'>You may find some upgrade issues in your Central Admin Health Report if you do not run PSConfigUI after applying the hotifxes from August 2010. Example warnings and more information are on my post here: &lt;a href="http://bit.ly/9raneX"&gt;http://bit.ly/9raneX&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4182813422615823770?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4182813422615823770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4182813422615823770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4182813422615823770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4182813422615823770'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/sharepoint-2010-run-psconfigui-after.html' title='SharePoint 2010: Run PSConfigUI After August 2010 Hotfixes'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-1888031339329971895</id><published>2010-11-09T08:13:00.001-05:00</published><updated>2010-11-09T08:13:37.213-05:00</updated><title type='text'>Creating Web Templates From Publishing Enabled Sites in SharePoint 2010</title><content type='html'>&lt;p&gt;Creating web templates from sites using SharePoint 2010 and Visual Studio 2010 is a fairly straightforward process, so long as you don’t try to do it with a site that has publishing enabled. The basic steps are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Save your site as a template with content included (Site Actions –&amp;gt; Site Settings –&amp;gt; Save Site as Template) &lt;/li&gt;    &lt;li&gt;Download the saved template from the template gallery &lt;/li&gt;    &lt;li&gt;In Visual Studio 2010, create a new project of type “Import SharePoint Solution Package &lt;/li&gt;    &lt;li&gt;Run through the wizard, selecting your saved template as the wsp file when prompted. &lt;/li&gt;    &lt;li&gt;Right click / Deploy &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;By default, that will create a sandboxed solution that you can then use to create sites within the site collection where the solution was deployed. With two simple changes, you can make it a farm solution that can then be used to create new site collections as well:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Change the Visual Studio solution to a farm solution – either chose Farm solution when creating the project or set the project’s Sandboxed Solution property to False after the project has been created &lt;/li&gt;    &lt;li&gt;Change the scope of the Web Template Feature (Feature3 by default) to Farm. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now, your deployed web template will show up in the site template gallery when creating any site or site collection.&lt;/p&gt;  &lt;p&gt;Now, what if you want to perform this on a site with publishing enabled? You’ll hit several road blocks…&lt;/p&gt;  &lt;h4&gt;What do you mean publishing enabled?&lt;/h4&gt;  &lt;p&gt;First things first – to enable publishing on a site, you need to enable two features, one on the site collection, and one on the web. At the site collection scope (Site Actions –&amp;gt; Site Settings –&amp;gt; Site Collection Features), enable the SharePoint Server Publishing Infrastructure feature. At the web scope (Site Actions –&amp;gt; Site Settings –&amp;gt; Manage Site Features), enable the SharePoint Server Publishing feature.&lt;/p&gt;  &lt;p&gt;At this point, modify the site the way you would like it to be for new sites based on the web template. That can include a custom master page, custom page layouts, new publishing pages, web parts, custom content types – anything that you want will (in theory) be included in your web template project.&lt;/p&gt;  &lt;h4&gt;Roadblock 1: Where did Save site as template go?&lt;/h4&gt;  &lt;p&gt;The first thing you’ll notice when you go to save your template is that the option for saving the site as a template is no longer there – it gets removed when you enable publishing. There may be a good reason for this – in MOSS for example, you ran the risk of a template getting deployed in another site collection not necessarily having all the content types you would need for the template to work properly. With Web Templates, though, it appears all that content gets stored with the template, so I'm not sure why the feature has been removed.&lt;/p&gt;  &lt;p&gt;Before publishing is enabled:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI2UNdbRI/AAAAAAAAHbw/VWVx-Qznj9k/s1600-h/image5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI26mbJ5I/AAAAAAAAHb0/5q_Rm1faIFk/image_thumb1.png?imgmax=800" width="244" height="135" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;After publishing is enabled:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_mS4qXxTjZgc/TNlI3MLg02I/AAAAAAAAHb4/cYTwR0YnZ34/s1600-h/image2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_mS4qXxTjZgc/TNlI3pAHi0I/AAAAAAAAHb8/Q1Hb91YDqQc/image_thumb.png?imgmax=800" width="244" height="124" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There are several ways around this, including writing a feature to re-enable this option on the site settings page, but the easiest thing to do is just enter &amp;lt;site url&amp;gt;/_layouts/savetmpl.aspx in your browser’s address bar – that will take you right to the page that allows you to save your site.&lt;/p&gt;  &lt;p&gt;Be sure to click “include content” so everything gets loaded into your SharePoint solution, including content types.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_mS4qXxTjZgc/TNlI3vkLEyI/AAAAAAAAHcA/JtjlD-2b8jw/s1600-h/image8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI4AY2LBI/AAAAAAAAHcE/Mf1IszvpCX8/image_thumb2%5B1%5D.png?imgmax=800" width="244" height="118" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI4p7YROI/AAAAAAAAHcI/jMjvwyjC8is/s1600-h/image11.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_mS4qXxTjZgc/TNlI4hVF-5I/AAAAAAAAHcM/Oh3TpgkYzxY/image_thumb3%5B1%5D.png?imgmax=800" width="244" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once the template is created, click on the solution gallery link and save the template’s WSP file to your local disk.&lt;/p&gt;  &lt;p&gt;Now go to Visual Studio and create a new project. The type will be “Import SharePoint Solution Package”. Give it a name and click OK.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI5IkS4HI/AAAAAAAAHcQ/zpbOxIemkm0/s1600-h/image14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI5TClW_I/AAAAAAAAHcU/Sut2OMKh834/image_thumb4.png?imgmax=800" width="244" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When prompted for a deployment site, enter a site that you don’t care about. I would create a fresh site collection just for this purpose – the deployment will likely overwrite whatever is there.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI5wszfFI/AAAAAAAAHcY/S7ve6UN4Tmw/s1600-h/image17.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI6KGmFgI/AAAAAAAAHcc/pUUvEcSaHJA/image_thumb5.png?imgmax=800" width="244" height="176" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next, browse to your saved template file. Click Next.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_mS4qXxTjZgc/TNlI6YPcCtI/AAAAAAAAHcg/bLLC3UeFpkI/s1600-h/image20.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_mS4qXxTjZgc/TNlI6vPluqI/AAAAAAAAHck/WSHTJxrAdQM/image_thumb6.png?imgmax=800" width="244" height="174" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Visual studio will then show you all the things it is about to import from your WSP file. You may be tempted to de-select some of the content, but if you do you’re likely to create errors in your solution that will need to be resolved, and the likely resolution will be to add the content back. Just leave everything selected and click finish.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_mS4qXxTjZgc/TNlI66EhumI/AAAAAAAAHco/KUac8rPPBck/s1600-h/image23.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_mS4qXxTjZgc/TNlI7GO3ugI/AAAAAAAAHcs/k4Hsf17TxSU/image_thumb7.png?imgmax=800" width="244" height="174" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_mS4qXxTjZgc/TNlI7fMPotI/AAAAAAAAHcw/iRYHEwvYNKE/s1600-h/image26.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_mS4qXxTjZgc/TNlI77ymOuI/AAAAAAAAHc0/vwOi0tQr6pg/image_thumb8.png?imgmax=800" width="244" height="99" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Since we made this a Farm solution, we’ll need to modify the scope of the Web Template feature. For my publishing enabled team site, this is Feature 3:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_mS4qXxTjZgc/TNlI8fcIdrI/AAAAAAAAHc4/D2AKFQn9zkM/s1600-h/image29.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_mS4qXxTjZgc/TNlI8lUbN0I/AAAAAAAAHc8/tdHu49_fve4/image_thumb9.png?imgmax=800" width="244" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You now have a visual studio project that is ready to be deployed and used to create new sites. Or so it would seem…&lt;/p&gt;  &lt;h4&gt;Roadblock 2: deployment error.&lt;/h4&gt;  &lt;p&gt;Project –&amp;gt; Right Click –&amp;gt; Deploy. Visual studio will alert you to many deployment conflicts – just let it resolve them automatically. You’re deploying to a site you don’t care about, remember?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_mS4qXxTjZgc/TNlI9FuDVzI/AAAAAAAAHdA/JwDS2-hqdnI/s1600-h/image32.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_mS4qXxTjZgc/TNlI9kHpD_I/AAAAAAAAHdE/9gGnvdaiesI/image_thumb10.png?imgmax=800" width="244" height="170" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There will be a lot of errors where SharePoint was unable to delete items to resolve conflicts. Most likely, the definition in the web template is a match for what already exists in SharePoint, namely standard list instances and content types. Nothing to worry about.&lt;/p&gt;  &lt;p&gt;What you do need to worry about is the error message after the conflicts are “resolved”:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Error occurred in deployment step 'Add Solution': Dependency feature 'PublishingSite' (id: f6924d36-2fa8-4f0b-b16d-06b7250180fa) is not properly scoped for feature 'PublishingWebTemplate_Feature3' (id: 6fd24c8e-b684-42ab-9bbf-56759dfd5ea2). Its scope 'Site' must be equal to or higher than 'Farm'.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;For some reason, when the WSP file was imported and Feature3 was generated, Visual Studio decided to make the SharePoint publishing site a dependency. This really makes no sense because the onet.xml file that was created will activate this feature, so there’s no reason for it to be a dependency.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI9gFEqeI/AAAAAAAAHdI/fFObh2jQjNQ/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://lh5.ggpht.com/_mS4qXxTjZgc/TNlI-AuXLEI/AAAAAAAAHdM/apQx-_swXLU/image_thumb1%5B1%5D.png?imgmax=800" width="244" height="124" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To remove the dependency, double click Feature 3 to load the feature designer, scroll down to the bottom and expand “Feature Activation Dependencies, scroll down again, select the dependency and click “Remove”.&lt;/p&gt;  &lt;p&gt;Now that that’s out of the way, right click-deploy again, and you will run into…&lt;/p&gt;  &lt;h4&gt;Roadblock 3: Deployment Error HRESULT: 0x80070002&lt;/h4&gt;  &lt;p&gt;File not found. This one has to be a bug. When you deploy, your error list look like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_mS4qXxTjZgc/TNlI-DFkduI/AAAAAAAAHdQ/QR_tlmmJBBg/s1600-h/image15.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 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/_mS4qXxTjZgc/TNlI-Q60ZoI/AAAAAAAAHdU/gIgtKP8G0Bs/image_thumb5%5B1%5D.png?imgmax=800" width="244" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The warning was mentioned previously – Visual Studio couldn’t resolve all the conflicts. Again, no big deal. The problem is the error. Here, the output window offers no help.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160; Deployment conflict resolution for one or more items failed. See the Output Window for details.      &lt;br /&gt;&amp;#160; Adding solution 'PublishingWebTemplate.wsp'...       &lt;br /&gt;&amp;#160; Deploying solution 'PublishingWebTemplate.wsp'...       &lt;br /&gt;Activate Features:       &lt;br /&gt;&amp;#160; Activating feature 'Feature1' ...       &lt;br /&gt;Error occurred in deployment step 'Activate Features': The system cannot find the file specified. (Exception from HRESULT: 0x80070002)       &lt;br /&gt;========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========       &lt;br /&gt;========== Deploy: 0 succeeded, 1 failed, 0 skipped ==========       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It took me a while to figure out exactly what is causing this. The answer is included in the SharePoint ULS log files:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Cannot find doc C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Template\Features\PublishingWebTemplate_Feature1\Files\Variation Labels\AllItems.aspx&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Failed to add list view and form pages for list &amp;quot;Variation Labels&amp;quot; in web &amp;quot;&lt;a href="http://homedev/sites/test&amp;quot;"&gt;http://homedev/sites/test&amp;quot;&lt;/a&gt;. hr = 0x2ecf41d0&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Failed to create list &amp;quot;Variation Labels&amp;quot; in web &amp;quot;&lt;a href="http://homedev/sites/test&amp;quot;"&gt;http://homedev/sites/test&amp;quot;&lt;/a&gt;, HRESULT=0x2ecf41d0. List XML: &amp;quot;&amp;lt;List Title=&amp;quot;Variation Labels&amp;quot; Direction=&amp;quot;none&amp;quot; Url=&amp;quot;Variation Labels&amp;quot; BaseType=&amp;quot;0&amp;quot; Type=&amp;quot;100&amp;quot; AllowDeletion=&amp;quot;FALSE&amp;quot; NoCrawl=&amp;quot;TRUE&amp;quot; BrowserFileHandling=&amp;quot;Permissive&amp;quot; DisableDeployWithDependentList=&amp;quot;TRUE&amp;quot; HiddenList=&amp;quot;TRUE&amp;quot; FolderCreation=&amp;quot;FALSE&amp;quot; Catalog=&amp;quot;FALSE&amp;quot; SendToLocation=&amp;quot;|&amp;quot; ImageUrl=&amp;quot;/_layouts/images/itgen.png&amp;quot; xmlns:ows=&amp;quot;Microsoft SharePoint&amp;quot; xmlns:spctf=&amp;quot;&lt;a href="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms&amp;quot;"&gt;http://schemas.microsoft.com/sharepoint/v3/contenttype/forms&amp;quot;&lt;/a&gt; xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/sharepoint/&amp;quot;/"&gt;http://schemas.microsoft.com/sharepoint/&amp;quot;/&lt;/a&gt;&amp;gt;&amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Failed to instantiate list 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Template\Features\CustomList\custlist'&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Unknown SPRequest error occurred. More information: 0x80070002&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Leaving Monitored Scope (List Creation: Variation Labels). Execution Time=70.0444709826517&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;The element of type 'ListInstance' for feature 'PublishingWebTemplate_Feature1' (id: 14a09d46-89fb-4c97-bc3e-7797944b23d8) threw an exception during activation: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Feature Activation: Threw an exception, attempting to roll back.&amp;#160; Feature 'PublishingWebTemplate_Feature1' (ID: '14a09d46-89fb-4c97-bc3e-7797944b23d8').&amp;#160; Exception: System.IO.FileNotFoundException: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)&amp;#160;&amp;#160;&amp;#160;&amp;#160; at Microsoft.SharePoint.Administration.SPElementDefinitionCollection.ProvisionListInstances(SPFeaturePropertyCollection props, SPSite site, SPWeb web, Boolean fForce)&amp;#160;&amp;#160;&amp;#160;&amp;#160; at Microsoft.SharePoint.Administration.SPElementDefinitionCollection.ProvisionElements(SPFeaturePropertyCollection props, SPWebApplication webapp, SPSite site, SPWeb web, Boolean fForce)&amp;#160;&amp;#160;&amp;#160;&amp;#160; at Microsoft.SharePoint.SPFeature.Activate(SPSite siteParent, SPWeb webParent, SPFeaturePropertyCollection props, Boolean fForce)&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Even armed with this information, it isn’t clear what needs to be done to resolve the issue. &lt;/p&gt;  &lt;p&gt;Here’s what you need to do:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Expand “Other Imported Files\&amp;lt;templatename&amp;gt;\Files\Variation Labels” &lt;/li&gt;    &lt;li&gt;Copy “AllItems.aspx” to “List Instances\Variation_Labels” &lt;/li&gt;    &lt;li&gt;On the copied file, set the deployment type to “ElementFile” and Deployment Location path to “Files\Variation Labels” in the properties window (use the Schema.xml file in the same location as your guide). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Re-deploy. Now, at long last, it should deploy without an error. You can finally create a new site based on your new web template. Without further modification, it will be displayed on the “Custom” tab of templates:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_mS4qXxTjZgc/TNlI-rDqK4I/AAAAAAAAHdY/zeUKadPPqBM/s1600-h/image6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 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/_mS4qXxTjZgc/TNlI-yvzYWI/AAAAAAAAHdc/OXb-jzOxUj4/image_thumb2.png?imgmax=800" width="236" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Go ahead and create a site base on your new template – that should work now as well, but don’t celebrate yet…&lt;/p&gt;  &lt;h4&gt;Roadblock 4: Error Creating Publishing Pages&lt;/h4&gt;  &lt;p&gt;On your new site, try to create a publishing page. Select Site Actions –&amp;gt; More Options, select Page in the left hand column, click Publishing Page for the type, and then click Create. Boom:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_mS4qXxTjZgc/TNlI_TuDR_I/AAAAAAAAHdg/ofIUW-F06bI/s1600-h/image9.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 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/_mS4qXxTjZgc/TNlI_zBrRRI/AAAAAAAAHdk/nYcHWVXEX1Y/image_thumb3.png?imgmax=800" width="244" height="110" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Since one of the main reasons to have a web template for a publishing enabled site is to be able to, you know, create publishing pages, we’re going to need to figure this out too. &lt;/p&gt;  &lt;p&gt;Searching for the correlation id in the log files yields the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.&amp;#160; Parameter name: index&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Not very helpful, huh? While I can’t remember the exact steps I went through to troubleshoot this the first time, I can tell you that the answer lies in the way the content types are defined for the publishing pages. If you look at the elements.xml files for the master page gallery, you will find several instances where the PublishingAssociatedContentType property value is not set right. For example, Project Page reads like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;Project Page, 0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39004C1F8B46085B4d22B1CDC3DE08CFFB9C0055EF50AAFF2E4badA437E4BAE09A30F8&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It should be this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;;#Project Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39004C1F8B46085B4d22B1CDC3DE08CFFB9C0055EF50AAFF2E4badA437E4BAE09A30F8;#&amp;quot; Type=&amp;quot;string&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;At first glance, you may not even notice the difference, but you’ll note that in the correct string, you’ll find number signs as a delimiter. That’s what’s missing, and that’s what’s causing the crash when you try to create a new publishing page.&lt;/p&gt;  &lt;p&gt;I’m not sure what the best way is to provide this information in this format, but you’ll need to find these 5 property elements in your solution (one at a time):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;Project Page, 0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39004C1F8B46085B4d22B1CDC3DE08CFFB9C0055EF50AAFF2E4badA437E4BAE09A30F8&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;Enterprise Wiki Page, 0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39004C1F8B46085B4d22B1CDC3DE08CFFB9C&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;Redirect Page, 0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900FD0E870BA06948879DBD5F9813CD8799&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;Article Page, 0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;Welcome Page, 0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF390064DEA0F50FC8C147B0B6EA0636C4A7D4&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;and replace them with the correct values:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;;#Project Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39004C1F8B46085B4d22B1CDC3DE08CFFB9C0055EF50AAFF2E4badA437E4BAE09A30F8;#&amp;quot; Type=&amp;quot;string&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;;#Enterprise Wiki Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39004C1F8B46085B4d22B1CDC3DE08CFFB9C;#&amp;quot; Type=&amp;quot;string&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;;#Redirect Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900FD0E870BA06948879DBD5F9813CD8799;#&amp;quot; Type=&amp;quot;string&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;;#Article Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D;#&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;Property Name=&amp;quot;PublishingAssociatedContentType&amp;quot; Value=&amp;quot;;#Welcome Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF390064DEA0F50FC8C147B0B6EA0636C4A7D4;#&amp;quot; Type=&amp;quot;string&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Be sure to replace the correct corresponding Property Element (i.e. Project page for project page). Use the find and replace with a scope of entire solution – some of these appear more than once.&lt;/p&gt;  &lt;p&gt;Still with me? Didn’t think so, but I’ll plow on anyway, because that’s the last road block. Right click-deploy, create a new site, create a publishing page, everything should be working now.&lt;/p&gt;  &lt;h4&gt;Final steps: Customization&lt;/h4&gt;  &lt;p&gt;At this point, you should have a working web template solution, but there are a few other things you may want to clean up:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Edit the elements.xml file under the Web Templates folder to add a Display Category element. This puts your web template under a tab you name rather than the default “Custom” tab &lt;/li&gt;    &lt;li&gt;While editing the elements file, give your web template a more appropriate Name and Title &lt;/li&gt;    &lt;li&gt;Depending on your source web site, you may have path length issues. Visual Studio is pretty good about updating references when you rename folders, so you should be able to find folders that you can reduce (drastically in some cases) the length of the folder name to prevent path length issues. &lt;/li&gt;    &lt;li&gt;Rename your features. Check the contents of the features to see which feature is doing what and rename appropriately. &lt;/li&gt;    &lt;li&gt;Make your features hidden – there’s no reason for a user to interact with these features, they’re just used to help deploy content when you create sites based on your web template. Hide them to prevent confusion. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;NOTE: one other issue I encountered when writing this was an error during deployment from Visual Studio:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Error occurred in deployment step 'Activate Features': Specified data type does not match the current data type of the property.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This doesn’t seem to affect the web template itself, it’s more a case of the site I’m using as a deployment target is in a state that no longer allows for successful activation of the features. I didn’t bother trying to resolve the issue since it didn’t keep me from successfully creating a web template I could use to create new sites, and the site I was using as a deployment target was just a throwaway anyway.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-1888031339329971895?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/1888031339329971895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=1888031339329971895' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/1888031339329971895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/1888031339329971895'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/11/creating-web-templates-from-publishing.html' title='Creating Web Templates From Publishing Enabled Sites in SharePoint 2010'/><author><name>Andrew Moore</name><uri>http://www.blogger.com/profile/18218394590494591827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_mS4qXxTjZgc/TNlI26mbJ5I/AAAAAAAAHb0/5q_Rm1faIFk/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-544233386198192178</id><published>2010-10-19T19:29:00.001-04:00</published><updated>2010-10-19T19:29:10.610-04:00</updated><title type='text'>No Sorting Configuration in the Search Action Links Web Part</title><content type='html'>&lt;p&gt;I recently ran into an issue where none of the sortable managed properties were appearing in the Sorting Configuration Section of the Search Action Links web part. Normally, you would expect to see something like this…&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_R3fY2PR0dPY/TL4pvEMr0WI/AAAAAAAAAIY/fOpJss2eoEs/s1600-h/image%5B2%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://lh5.ggpht.com/_R3fY2PR0dPY/TL4pvcXB4WI/AAAAAAAAAIc/RVv0FwHxbjo/image_thumb.png?imgmax=800" width="244" height="137" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;…except with additional sort fields. Relevance and ProcessingTime were all that I could get to appear. This was part of a SharePoint 2010/FAST Search installation that was otherwise behaving as expected. Search results were appearing, refiners were refining, and everything seemed fine with the exception of a mysterious lack of sort options. A quick check of the log reveled the following error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Could not retrieve Sortable Fields from FAST AdminOM(SchemaOM)! Microsoft.SharePoint.Search.Extended.Administration.Common.AdminException: Failed to communicate with the WCF service. ---&amp;gt; System.ServiceModel.Security.SecurityAccessDeniedException: Access is denied.&amp;#160;&amp;#160;&amp;#160; Server stack trace:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc&amp;amp; rpc)&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.ServiceModel.Channels.ServiceChannelPro...&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Based on the suggestion from a co-worker (Andrew Crowder), that the user making the call might not be part of the FASTSearchAdministrators group, I decided to compare the group membership against all the Application Pool service accounts. It turns out the account being used for the Search Admin Service Web Pool was not present in the group. You can check for the identity of this account on the properties for the FAST Content SSA:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_R3fY2PR0dPY/TL4pwumtIrI/AAAAAAAAAIg/I-YyKDY9F5g/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: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_R3fY2PR0dPY/TL4pw0_6YTI/AAAAAAAAAIk/dYthXOmy05c/image_thumb%5B1%5D.png?imgmax=800" width="244" height="92" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Simply adding the indicated account into the FASTSearchAdministraotrs group fixed the problem. Yet another case where closely following the &lt;a href="http://technet.microsoft.com/en-us/library/ff381251.aspx" target="_blank"&gt;FAST installation instructions&lt;/a&gt; would have prevented problems. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-544233386198192178?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/544233386198192178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=544233386198192178' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/544233386198192178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/544233386198192178'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/10/no-sorting-configuration-in-search.html' title='No Sorting Configuration in the Search Action Links Web Part'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_R3fY2PR0dPY/TL4pvcXB4WI/AAAAAAAAAIc/RVv0FwHxbjo/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-5946298234312338214</id><published>2010-10-18T21:17:00.001-04:00</published><updated>2010-10-18T21:17:45.210-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FAST'/><title type='text'>Updating FAST Search Database Connector Configurations with PowerShell</title><content type='html'>&lt;p&gt;When using the FAST Search Database Connector, updating and moving configurations between environments can be challenging. The temptation is to simply do everything by hand.&amp;#160; This approach can be error prone and time consuming. In the interest of being as lazy (but pragmatic) as possible, an up-front investment in a good set of scripts is well worth the effort.&lt;/p&gt;  &lt;p&gt;One of the first challenges I ran across was setting the connection string in a FAST Search Database Connector configuration file. The first step was to determine which environment the deployment was being performed on:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;$computer = gc env:computername&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;write-host &amp;quot;HOST Computer is &amp;quot; $computer&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;switch ($computer.ToLower())        &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;dev-fast&amp;quot; { $connectionString = &amp;quot;jdbc:sqlserver://dev-db:1433;database=DB;integratedSecurity=true;encrypt=true;trustServerCertificate=true;&amp;quot;}         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;test-fast&amp;quot; { $connectionString = &amp;quot;jdbc:sqlserver://test-db:1433;database=DB;integratedSecurity=true;encrypt=true;trustServerCertificate=true;&amp;quot; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;prod-fast&amp;quot; { $connectionString = &amp;quot;jdbc:sqlserver://prod-db:1433;database=DB;integratedSecurity=true;encrypt=true;trustServerCertificate=true;&amp;quot; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; default {$connectionString = &amp;quot;jdbc:sqlserver://localhost:1433;database=DB;integratedSecurity=true;encrypt=true;trustServerCertificate=true;&amp;quot;}         &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;write-host &amp;quot;Connection string is &amp;quot; $connectionString&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Based on the machine the deployment script is being run on, the script will select the proper connection string. With the connection string selected, the database connector configuration file can be updated:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent&lt;/font&gt;&lt;/p&gt;   &lt;font face="Courier New"&gt;&lt;/font&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;$configFile = join-path $executingScriptDirectory &amp;quot;dbcrawl_jdbcConfig.xml&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;[xml]$file = get-content $configFile &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;$xpath = &amp;quot;//group[@name='Input']/parameter[@name='JDBCURL']/value&amp;quot;&lt;/font&gt;&lt;/p&gt;   &lt;font face="Courier New"&gt;     &lt;p&gt;$node = select-xml -Xml $file -xpath $xpath | select-object -expandProperty Node&lt;/p&gt;      &lt;p&gt;$node.FirstChild.InnerText = $connectstring&lt;/p&gt;      &lt;p&gt;&lt;font face="Courier New"&gt;$file.Save($configFile)&lt;/font&gt;&lt;/p&gt;   &lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;The above assumes the PowerShell script is being executed from the folder containing the target configuration file. It inserts the proper connection string into the JDBCURL element and saves the change. The same approach can be used to update other elements in the configuration file.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;While this function may not seem significant now, when your dealing with 10 different configuration files in 4 different environments, that’s a lot of Notepad editing to be done by hand. &lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-5946298234312338214?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/5946298234312338214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=5946298234312338214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5946298234312338214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5946298234312338214'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/10/updating-fast-search-database-connector.html' title='Updating FAST Search Database Connector Configurations with PowerShell'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4048996512891865374</id><published>2010-10-10T21:02:00.000-04:00</published><updated>2010-10-10T21:02:24.782-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft patches'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint updates'/><category scheme='http://www.blogger.com/atom/ns#' term='Patches'/><title type='text'>Major Microsoft Patches Coming - Including SharePoint - 10/12/2010</title><content type='html'>Based on a tweet from Joel Oleson, there seems to be major updates coming on Tuesday:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pcworld.com/article/207356/brace_for_major_microsoft_patches_tuesday.html?tk=hp_new"&gt;http://www.pcworld.com/article/207356/brace_for_major_microsoft_patches_tuesday.html?tk=hp_new&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4048996512891865374?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4048996512891865374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4048996512891865374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4048996512891865374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4048996512891865374'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/10/major-microsoft-patches-coming.html' title='Major Microsoft Patches Coming - Including SharePoint - 10/12/2010'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4535760422617567281</id><published>2010-09-25T00:30:00.002-04:00</published><updated>2010-09-25T10:06:28.897-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='Form Name'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath Form Name'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath'/><title type='text'>InfoPath 2010: The form name remains the same</title><content type='html'>The good ole form name issue is still the same in InfoPath 2010. I discuss this in my &lt;a href="http://www.amazon.com/InfoPath-SharePoint-2010-How-Steven/dp/0672333422?ie=UTF8&amp;amp;tag=stevemaspath-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;InfoPath Book&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stevemaspath-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0672333422" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; margin: 0px; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;" width="1" /&gt; &amp;nbsp;but also provide an alternative in my recent post:&lt;br /&gt;&lt;a href="http://stevemannspath.blogspot.com/2010/09/infopath-2010-infamous-form-name.html"&gt;http://stevemannspath.blogspot.com/2010/09/infopath-2010-infamous-form-name.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=stevemaspath-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0672333422" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4535760422617567281?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4535760422617567281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4535760422617567281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4535760422617567281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4535760422617567281'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/09/infopath-2010-form-name-remains-same.html' title='InfoPath 2010: The form name remains the same'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4246906830678451259</id><published>2010-09-02T14:30:00.000-04:00</published><updated>2010-09-02T14:30:37.468-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MOSS 2007 to SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Upgrade'/><title type='text'>Upgrade Strategies for SharePoint 2010</title><content type='html'>If you missed the Quest webcast on SharePoint 2010 migrations (featuring Joel Oleson) , I highly recommend viewing the recorded session which can be found&amp;nbsp;&lt;a href="http://www.quest.com/events/ListDetails.aspx?ContentID=12156"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;A few main points:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Testing, testing, testing! Even if you have gone through dozens of migrations from 2007 to 2010, each farm is different and you should&amp;nbsp;apply the proper due diligence to test the migrations prior to performing the actual upgrade.&lt;/li&gt;&lt;li&gt;The MOSS 2007 farm must be SP2 with the latest CU paks with the CU from December being recommended.&lt;/li&gt;&lt;li&gt;SP2+ on MOSS 2007 makes SharePoint aware of the database in read-only mode. Therefore, you can make the content databases of your MOSS 2007 farm read-only and SharePoint will automatically hide any Edit, Add, or Delete operations from its menus.&lt;/li&gt;&lt;li&gt;Making your databases read-only is a good way to migrate the data since users cannot change anything while you are upgrading. However, the content databases that are being migrated cannot be read-only so you will need to make a copy before attempting DB-Attach operations.&lt;/li&gt;&lt;li&gt;The migration check in MOSS 2007 is the preupgradecheck in stsadm.&lt;/li&gt;&lt;li&gt;The migration check for SharePoint 2010 is the PowerShell command TEST-SPContentDatabase&lt;/li&gt;&lt;li&gt;In-Place migration methods seem to handle most farms, however, it is not recommended as if anything goes wrong, there is no roll back. Your MOSS 2007 farm will be down until all issues can be resolved. &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/6587983161853073832-4246906830678451259?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4246906830678451259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4246906830678451259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4246906830678451259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4246906830678451259'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/09/upgrade-strategies-for-sharepoint-2010.html' title='Upgrade Strategies for SharePoint 2010'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4245522844746078683</id><published>2010-08-12T10:49:00.035-04:00</published><updated>2010-08-12T11:41:12.029-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FAST'/><title type='text'>How To Create A Search Front End For FAST ESP 5.3 Using the C# API</title><content type='html'>&lt;style type="text/css"&gt;.nobr br { display: none }&lt;/style&gt;&lt;br /&gt;This article will show you how to search against a FAST ESP 5.3 stand-alone installation.  This article assumes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A working installation of FAST ESP 5.3&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Collections are populated for searching (I will cover how to index content and populate collections in a later post)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The search API has been downloaded from Microsoft Connect&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Please note that there are both Java and C# implementation of the API.  This post includes code examples for only the C# implementation.&lt;br /&gt;&lt;br /&gt;Before we dive into the details of the steps, it is first worth discussing our approach.  For this particular client, FAST search was integrated into a set of existing application.  For this reason, we decided to create a search user control and a results user control that could be configured and styled for use in those applications.  For this reason, all of the FAST functionality needed to be self-contained and configurable for different content when the controls were integrated into different applications.&lt;br /&gt;&lt;br /&gt;The basic steps of searching against a FAST ESP 5.3 front-end are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Connect to FAST ESP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Obtain a search view&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create a query&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Submit the query&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Render the documents&lt;/li&gt;&lt;/ul&gt;Let’s take a look into the details of each step.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Connect to FST ESP&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The first step to searching against FAST ESP is to establish a connection to the Query/Results (QR) server by creating an instance of &lt;i&gt;ISearchFactory&lt;/i&gt;:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;ISearchFactory searchFactory = SearchFactory.NewInstance();&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;When instantiated without arguments, the search factory is initialized with the default connection parameters.  The default connection parameters are:&lt;br /&gt;&lt;br /&gt;&lt;div class="nobr"&gt;&lt;br /&gt;&lt;table border="1" cellpadding="2" cellspacing="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Parameter Name&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Default Value&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SearchFactory&lt;/td&gt;&lt;td&gt;Com.fastsearch.esp.search.http.HttpSearchFactory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;QRServers&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Localhost:15100&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RequestMethod&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GET&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CertificateFile&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Null&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MaxConnections&lt;br /&gt;&lt;/td&gt;&lt;td&gt;10&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Because the QR server usually resides on a different machine from where the code executes, the default parameters can be overridden in the web.config files as such:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;lt;section name="HttpSearchFactory" type="System.Configuration.NameValueSectionHandler,System,Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;br /&gt;…&lt;br /&gt;&amp;lt;HttpSearchFactory&amp;gt;&lt;br /&gt;&amp;lt;add key="Com.FastSearch.Esp.Search.Http.QRServers" value="mymachinename.server.network:15100"/&amp;gt;&lt;br /&gt;&amp;lt;/HttpSearchFactory&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;For our purposes we used the default values for everything except the QRServers configuration, which we set to the specific server name where FAST ESP was installed.  This is also helpful when you have separate development and production environment that need to be configured.&lt;br /&gt;&lt;br /&gt;Rather than create a new instance of &lt;i&gt;ISearchFactory&lt;/i&gt; each time it is needed, store it in the &lt;i&gt;HttpContent.Current.Application&lt;/i&gt; cache for reuse.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Search Views&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The second step is to obtain a search view.  Search views are configurations associated with search profiles that specify:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Which content to search&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How the search is run&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How the results are displayed.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Search profiles are created in the Search Business Center (SBC) and define different ways of searching content.  The content to be search is defined by the collection or collections configured for each search profile.&lt;br /&gt;&lt;br /&gt;As an example, assume collections are created containing information for a corporate web site, some PDF product documentation on a file server, financial information stored in Lotus Notes and employee information stored in SQL Server.  For the external users of your search application, a search profile is created allowing only searches to be run on the corporate website and product documentation.  Internal users would have a separate search profile that would permit searching over all of the collections.  Think of the search profiles as a logical grouping of your collections without having to physically duplicate the indexed content.  The screen shot below illustrates how the same collections are used in multiple search profiles.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_84bErnQFpnw/TGQO0TlJnHI/AAAAAAAAAEY/xFIAqxXgUlM/s1600/search+profiles+-+scrubbed.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 260px;" src="http://1.bp.blogspot.com/_84bErnQFpnw/TGQO0TlJnHI/AAAAAAAAAEY/xFIAqxXgUlM/s400/search+profiles+-+scrubbed.PNG" alt="" id="BLOGGER_PHOTO_ID_5504540936325667954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In addition to the collection(s) used, other search profile settings that can be configured are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Query handling – default query parameters&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Navigator output – which navigators should be included in the results&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Results view – which fields should be returned for results&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rank profile – fine tuning of relevancy factors for the search profile.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For the purposes of our implementation, the search profile name is specified in our search control during design time.  This prevents users from seeing the name of the search profile on a query string and exposing some of the details of our configuration.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Create the FQL statement&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The third step is to create a FAST Query Language (FQL) query.  FAST has in-depth documentation available that describes the nuances of FQL queries, the details of which are beyond the scope of this post.  An example of creating the FQL query looks like this:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;string queryString = query;&lt;br /&gt;string mode = string.Empty;&lt;br /&gt;&lt;br /&gt;// Choosing type and creating FQL.&lt;br /&gt;switch (type.Trim())&lt;br /&gt;{&lt;br /&gt;case "Any of the Words":&lt;br /&gt;mode = "simpleany";&lt;br /&gt;break;&lt;br /&gt;case "All of the Words":&lt;br /&gt;mode= "simpleall";&lt;br /&gt;break;&lt;br /&gt;case "Exact Phrase":&lt;br /&gt;mode = "phrase";&lt;br /&gt;break;&lt;br /&gt;default:&lt;br /&gt;mode = "simpleall";&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;queryString = string.Format("string(\"{0}\", mode=\"{1}\", annotation_class=\"user\")", query, mode);&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The query created at the end of the code block contains the query submitted by the user, the mode used to search (which is specified in a dropdown on the search screen) and some additional annotation that allows the queries to be picked up by the query log parser in the SBC.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Submit the query&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The fourth step is to submit the query to the FAST QR server.  However, before the query is submitted, it is typical to also set some additional query parameters that reflect some of the business rules as to how the query should be executed:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;// Create and initialize search engine parameters&lt;br /&gt;query.SetParameter(BaseParameter.HITS, NumberResults);&lt;br /&gt;query.SetParameter(BaseParameter.OFFSET, Offset);&lt;br /&gt;query.SetParameter(BaseParameter.LEMMATIZE, Lemmatize);&lt;br /&gt;query.SetParameter(BaseParameter.SPELL, "suggest");&lt;br /&gt;&lt;br /&gt;query.SetParameter(BaseParameter.COLLAPSING, true);&lt;br /&gt;query.SetParameter(new SearchParameter("collapseon", "batvigeneric1"));&lt;br /&gt;query.SetParameter(new SearchParameter("collapsenum", 1));&lt;br /&gt;&lt;br /&gt;// Add sorting to the query&lt;br /&gt;switch (Ranking)&lt;br /&gt;{&lt;br /&gt;case "1":&lt;br /&gt;query.SetParameter(BaseParameter.SORT_BY, "title");&lt;br /&gt;query.SetParameter(BaseParameter.SORT_DIRECTION, BaseParameter.ASCENDING);&lt;br /&gt;break;&lt;br /&gt;case "2":&lt;br /&gt;query.SetParameter(BaseParameter.SORT_BY, "title");&lt;br /&gt;query.SetParameter(BaseParameter.SORT_DIRECTION, BaseParameter.DESCENDING);&lt;br /&gt;break;   &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The following table describes some of the parameters being set:&lt;br /&gt;&lt;br /&gt;&lt;div class="nobr"&gt;&lt;br /&gt;&lt;table border="1" cellpadding="2" cellspacing="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Parameter&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BaseParameter.HITS&lt;/td&gt;&lt;td&gt;The number of results to return.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BaseParameter.OFFSET&lt;/td&gt;&lt;td&gt;The offset in results (used for paging).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BaseParameter.LEMMATIZE&lt;/td&gt;&lt;td&gt;Alternative word forms (go, goes, gone).  Values are ‘true’ for modification mode and ‘false’ for suggested mode.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BaseParameter.SPELL&lt;/td&gt;&lt;td&gt;Spell checking.  Can be set to ‘on’ which auto-corrects the query, ‘off’ which turns spell checking off and ‘suggest’ which returns suggestions for the query.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BaseParameter.COLLAPSING&lt;/td&gt;&lt;td&gt;Specifies that field collapsing is turned on.  This allows results with the same value for a specific field (as defined in the index profile; more on this below) to be rolled up into a single result.  The additional ‘collapson’ parameter specifies which field to collapse on and the ‘collapsenum’ parameter specifies how many result to show.  &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BaseParameter.SORT_BY&lt;/td&gt;&lt;td&gt;Indicates the field on which results should be sorted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BaseParameter.SORT_DIRECTION&lt;/td&gt;&lt;td&gt;Indicates the sort direction for the results.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;The settings for these parameters will depend on the business rules defined for the search application.  These parameters can either be exposed to the end user through the search interface or they can be configured in a web.config file.  Additional details and additional parameters can be found in the FAST documentation.&lt;br /&gt;&lt;br /&gt;After the parameters are set, the query is run.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;ISearchView view = null;&lt;br /&gt;IQueryResult qr = null;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// Executes the search&lt;br /&gt;view = searchFactory.GetSearchView(searchProfile);&lt;br /&gt;qr = view.Search(query);&lt;br /&gt;}&lt;br /&gt;catch (System.Exception ex)&lt;br /&gt;{&lt;br /&gt;qr = null;&lt;br /&gt;errorMessage = "There was an error executing the query: " + ex.Message;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return qr;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;This code retrieves the corresponding search view for the specified search profile and calls the Search() method, passing in the query created in the step three.  The &lt;i&gt;IQueryResult&lt;/i&gt; object holds the results returned from FAST QR server.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Render the Results&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Finally, the documents are rendered using the &lt;i&gt;IQueryResult&lt;/i&gt; object.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;String fieldValue = string.Empty;&lt;br /&gt;IDocumentSummary summary = null;&lt;br /&gt;&lt;br /&gt;for (int i = offset + 1; i &amp;lt;= resultsToPresent + offset; i++)&lt;br /&gt;{&lt;br /&gt;summary = qr.GetDocument(i);&lt;br /&gt;if (summary.GetSummaryField(fieldName) != null)&lt;br /&gt;{&lt;br /&gt;fieldValue = summary.GetSummaryField(fieldName).StringValue;&lt;br /&gt;}&lt;br /&gt;// Do something with the field value&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;In the above code snippet, and &lt;i&gt;IDocumentSummary&lt;/i&gt; object is obtained by looping through the &lt;i&gt;IQueryResult&lt;/i&gt; using the offset and number of results to display values (indicated from paging controls).  The &lt;i&gt;IDocumentSummary GetSummaryField&lt;/i&gt; method is called to get values for the various indexed fields.  The field names are defined in the index profile.  The index profile in an XML document that defines the layout of the searchable index and specifies how fields are treated by query and results processing for a search cluster.  An example of some fields in the index profile is shown below.  The details of the index profile are beyond the scope of this article.  The field names used in the above code snippet are those in the ‘name’ attribute.&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;…&lt;br /&gt;&amp;lt;field name="title" fullsort="yes" tokenize="auto" result="dynamic" fallback-ref="title" lemmatize="yes"&amp;gt;&lt;br /&gt;&amp;lt;vectorize default="10:0"/&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;lt;field name="body" tokenize="auto"  max-index-size="8192" max-result-size="1024" fallback-ref="teaser" result="dynamic" index="no" lemmatize="yes"&amp;gt;&lt;br /&gt;&amp;lt;vectorize default="5:5" alternative="{ko,zh,szh,tzh}:5:0"/&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;lt;field name="teaser" index="no"/&amp;gt;&lt;br /&gt;&amp;lt;field name="description" element-name="meta_description" tokenize="auto" result="no"/&amp;gt;&lt;br /&gt;&amp;lt;field name="headings" tokenize="auto" lemmatize="yes"/&amp;gt;&lt;br /&gt;&amp;lt;field name="anchortext" tokenize="auto" result="no"/&amp;gt;&lt;br /&gt;&amp;lt;field name="keywords" element-name="meta_keywords" tokenize="auto" result="no"/&amp;gt;&lt;br /&gt;&amp;lt;field name="contenttype" element-name="mime"/&amp;gt;&lt;br /&gt;&amp;lt;field name="format" boundary-match="yes"/&amp;gt;&lt;br /&gt;&amp;lt;field name="language"/&amp;gt;&lt;br /&gt;&amp;lt;field name="languages" separator=";"/&amp;gt;&lt;br /&gt;&amp;lt;field name="charset"/&amp;gt;&lt;br /&gt;&amp;lt;field name="urls"/&amp;gt;&lt;br /&gt;&amp;lt;field name="url" index="no"/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;From the &lt;i&gt;IQueryObject&lt;/i&gt;, you can also obtain information about spell checking suggestions:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;IQueryTransformations queryTransforms = qr.GetQueryTransformations(false);&lt;br /&gt;ICollection suggestions = queryTransforms.Suggestions;&lt;br /&gt;string spellSuggestions = string.Empty;&lt;br /&gt;&lt;br /&gt;foreach (IQueryTransformation transform in suggestions)&lt;br /&gt;{&lt;br /&gt;if (transform.Custom != null &amp;amp;&amp;amp;&lt;br /&gt;  transform.Custom != string.Empty &amp;amp;&amp;amp;&lt;br /&gt;  transform.Query != string.Empty)&lt;br /&gt;{&lt;br /&gt;  spellSuggestions = transform.Query;&lt;br /&gt;     //display the spelling suggestions in a control on the screen&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Finally, here are some screenshots that show what the example search and results screen look like.  The user controls used in these pages were delivered to the client for integration in their existing web applications.  Please note that the recent searches, saved searches and popular functionality on the search page are user controls we developed for our client.  This functionality is not available out of the box from FAST.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_84bErnQFpnw/TGQV_38GIeI/AAAAAAAAAEw/z38Z9dRIkZc/s1600/AskUs+search+-+scrubbed.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 241px;" src="http://4.bp.blogspot.com/_84bErnQFpnw/TGQV_38GIeI/AAAAAAAAAEw/z38Z9dRIkZc/s400/AskUs+search+-+scrubbed.PNG" alt="" id="BLOGGER_PHOTO_ID_5504548831645540834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following results screenshot contains navigator information on the left side, which I will cover in a later blog post.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_84bErnQFpnw/TGQTpCYTEqI/AAAAAAAAAEo/xs9LD7E7n_I/s1600/AskUs+results2+-+scrubbed.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 241px;" src="http://2.bp.blogspot.com/_84bErnQFpnw/TGQTpCYTEqI/AAAAAAAAAEo/xs9LD7E7n_I/s400/AskUs+results2+-+scrubbed.PNG" alt="" id="BLOGGER_PHOTO_ID_5504546240287937186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Conclusion&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This article demonstrated the five basic steps to creating a search application front end searching against a FAST ESP 5.3 installation.   I will cover additional and more advanced concepts in future posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4245522844746078683?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4245522844746078683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4245522844746078683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4245522844746078683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4245522844746078683'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/08/how-to-create-search-front-end-for-fast.html' title='How To Create A Search Front End For FAST ESP 5.3 Using the C# API'/><author><name>Greg Robinson</name><uri>http://www.blogger.com/profile/07685929782181398673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_84bErnQFpnw/TGQO0TlJnHI/AAAAAAAAAEY/xFIAqxXgUlM/s72-c/search+profiles+-+scrubbed.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3166768075493992987</id><published>2010-08-11T15:30:00.001-04:00</published><updated>2010-08-11T15:30:00.816-04:00</updated><title type='text'>What’s My Correlation ID</title><content type='html'>&lt;p&gt;In SharePoint 2010, every request has a Correlation ID assigned to it. This makes it very easy to &lt;a href="http://sharepoint.microsoft.com/Blogs/GetThePoint/Lists/Posts/Post.aspx?List=8d9e2a99-f288-47c2-916b-2f32864f7b82&amp;amp;ID=353&amp;amp;RootFolder=*&amp;amp;Web=5e4647a0-e7d0-4626-b71c-b1ff06402465" target="_blank"&gt;coordinate usage of the Developer Dashboard and the SharePoint logs while troubleshooting issues&lt;/a&gt;. But what if you want to find the Correlation ID of a request in code? A good example would be a universal error handler on the master page that writes information to the event log or a database. Unfortunately, there is no native API call to retrieve the Correlation ID. After much searching I ran across the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spdiagnosticsservice.aspx" target="_blank"&gt;MSDN entry for SPDiagnosticsService&lt;/a&gt; which is very useful in many circumstances, but not this one. Interestingly enough, buried deep in the code example on that page is a class named Activity:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;// This class provides a simple API to configure the correlation guid.&lt;br /&gt;// The SPDiagnosticsServiceBase doesn't provide API's to manipulate the corelation guid.&lt;br /&gt;// Use this class with care, if used arbitrarily, it can make the logs harder to understand.&lt;br /&gt;// Always dispose the object from the same thread as soon as possible.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;public class Activity : IDisposable&lt;br /&gt;{&lt;br /&gt;    class NativeMethods&lt;br /&gt;    {&lt;br /&gt;        [DllImport(&amp;quot;advapi32.dll&amp;quot;)]&lt;br /&gt;        public static extern uint EventActivityIdControl(uint controlCode, ref Guid activityId);&lt;br /&gt;        public const uint EVENT_ACTIVITY_CTRL_GET_ID = 1;&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;and finally, later in the class:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;pre&gt;static public Guid CurrentId&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            Guid g = Guid.Empty;&lt;br /&gt;            NativeMethods.EventActivityIdControl(NativeMethods.EVENT_ACTIVITY_CTRL_GET_ID, ref g);&lt;br /&gt;            return g;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;pre&gt;&lt;font face="Verdana"&gt;So if you need to get the Correlation ID, that’s the (less than satisfying) solution.&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3166768075493992987?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3166768075493992987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3166768075493992987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3166768075493992987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3166768075493992987'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/08/whats-my-correlation-id.html' title='What’s My Correlation ID'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8002127609084383783</id><published>2010-07-06T23:06:00.004-04:00</published><updated>2010-07-07T13:02:24.902-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 Development Environment and Labs</title><content type='html'>Whether you are experienced or not with SharePoint 2010, the best way to learn SharePoint is to install it and do good hands on labs that will teach you it. What I have written is geared for SharePoint professionals to quickly spin up instead of having to sit through boring videos of developers rambling - even though I do that a lot.&lt;br /&gt;&lt;br /&gt;First read my blog on how to build a local SharePoint 2010 Development Environment -&lt;br /&gt;&lt;a href="http://www.astaticstate.com/2010/07/how-to-create-local-sharepoint-2010.html"&gt;http://www.astaticstate.com/2010/07/how-to-create-local-sharepoint-2010.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second read my blog referencing 16 free hands on labs for SharePoint 2010 that I found - &lt;a href="http://www.astaticstate.com/2010/07/sharepoint-2010-free-development-hands.html"&gt;http://www.astaticstate.com/2010/07/sharepoint-2010-free-development-hands.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you complete both of these tasks, you will be ready to roll onto a SharePoint 2010 project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-8002127609084383783?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8002127609084383783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8002127609084383783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8002127609084383783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8002127609084383783'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/07/sharepoint-2010-development-environment.html' title='SharePoint 2010 Development Environment and Labs'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8781766839223639551</id><published>2010-07-02T00:01:00.003-04:00</published><updated>2010-07-02T00:13:06.084-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 Architecture and Planning</title><content type='html'>&lt;p&gt;I have been working on a series of blogs for SharePoint 2010 that help you get an understanding of the new architecture. This should help you get started with planning and architecting for SharePoint 2010.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.k2distillery.com/2010/01/sharepoint-2010-service-architecture.html"&gt;SharePoint 2010 Service Architecture&lt;/a&gt; - I wrote this back in Jan 2010 on the new service architecture of SharePoint 2010.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.k2distillery.com/2010/03/sharepoint-2o10-logical-architecture.html"&gt;SharePoint 2010 Logical Architecture&lt;/a&gt; - I wrote this in March 2010 and broke out the new logical architecture for SharePoint 2010 using the new service architecture.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-architecture-and-design.html"&gt;SharePoint 2010 Architecture and Design Models&lt;/a&gt; - This is a new blog that references the updated design models for SharePoint 2010.  I highly recommend become familiar with all these models.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-performance-and.html"&gt;SharePoint 2010 Performance and Capacity Case Studies&lt;/a&gt; - Good white papers on SharePoint 2010 performance.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-capacity-planning.html"&gt;SharePoint 2010 Capacity Planning&lt;/a&gt; - These are my personal notes based on reading all the performance and capacity planning white papers from Microsoft on SharePoint 2010.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-cache.html"&gt;SharePoint 2010 Cache Strategies&lt;/a&gt; - I found a white paper on the topic of SharePoint 2010 Cache and capture my notes.  I would recommend reading the white paper.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-databases.html"&gt;SharePoint 2010 Databases&lt;/a&gt; - These are my notes after reading the Microsoft's model for all the new SharePoint 2010 databases.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/07/sharepoint-2010-physical-topology.html"&gt;SharePoint 2010 Physical Topology&lt;/a&gt; - This is a high-level approach that will show you how to transition your logical architecture into a phyiscal architecture.&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/6587983161853073832-8781766839223639551?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8781766839223639551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8781766839223639551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8781766839223639551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8781766839223639551'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/07/sharepoint-2010-architecture-and.html' title='SharePoint 2010 Architecture and Planning'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4670926500205189060</id><published>2010-06-30T00:33:00.000-04:00</published><updated>2010-06-30T00:33:58.387-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Customization'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='CQWP'/><title type='text'>Using the Content Query Web Part to Aggregate Blog Postings in SharePoint 2010</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_TgWOrIhd5jo/TCrD4LJxAAI/AAAAAAAAAA8/lmefVctI5Es/s1600-h/image%5B27%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD4sVRbFI/AAAAAAAAABA/JZpn67qW3mI/image_thumb%5B19%5D.png?imgmax=800" width="244" height="151" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Recently I had a requirement to aggregate recent blog postings from a number of blog subsites in a SharePoint 2010 web application. Since we were dealing with sites within a single site collection, the content query web part seemed like an obvious candidate to solve the problem. After a bit of work, I was able to get it to display blog postings with a similar look and feel to postings as they are displayed within the blog sites (pictured to the left).&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;The Challenge&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_TgWOrIhd5jo/TCrD42iHypI/AAAAAAAAACM/kpvN6Jhjtoc/s1600-h/image%5B30%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD5IazFKI/AAAAAAAAABI/0W3cozsfUSg/image_thumb%5B22%5D.png?imgmax=800" width="244" height="108" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD5bG-ztI/AAAAAAAAABM/d4BeFvk3iH4/s1600-h/image%5B28%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD5kU1UVI/AAAAAAAAABQ/beQJuhjQETk/image_thumb%5B20%5D.png?imgmax=800" width="244" height="229" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Without any special configuration (other than specifying which type of list to roll up), the CQWP can be easily made to display blog titles (left). For my needs however, this isn’t sufficient. I want to provide a preview of the blog post and also closely match the look and feel of the posts in a SharePoint 2010 blog site (right).&lt;/p&gt;&lt;p&gt;The first challenge is making the CQWP return the various pieces of specialized information that I need to display. For this example, I am only concerned with pulling back the post title, url, published date, author, and the body. The second challenge is creating the XSL required to transform those fields to match the look and feel of a blog post.&lt;/p&gt;&lt;p&gt;I did a bit of research and was able to find an &lt;a href="http://blog.henryong.com/2008/06/15/how-to-customize-the-content-query-web-part-xsl-to-aggregate-blog-posts/" target="_blank"&gt;excellent post&lt;/a&gt; by Henry Ong which helped with the first problem. It’s a good read and definitely sent me down the right track. Henry’s post is targeted towards SharePoint 2007 and many of the steps are no longer necessary in SharePoint 2010. Additionally, from reading the comments several people had issues getting the steps to work and also had issues when the blog posts contained formatting. The steps found here should hopefully address both of those problems. &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;Step 1: Adding the CQWP and configuring it via the GUI&lt;a href="http://lh5.ggpht.com/_TgWOrIhd5jo/TCrD5_hfpVI/AAAAAAAAABU/3fACZYxKIbM/s1600-h/image%5B35%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://lh4.ggpht.com/_TgWOrIhd5jo/TCrD6bZcllI/AAAAAAAAABY/DX2s5II_RfI/image_thumb%5B25%5D.png?imgmax=800" width="204" height="173" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;The first step is simply to add the content query web part to a page and target the query to lists of type “Posts.” This makes the content query web part only pull in blog posts. Since I was already in the settings I also went ahead and made a few other configuration changes like changing the title and the number of items the query returns.&lt;/p&gt;&lt;p&gt;Click Ok to exit out of the settings.&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;Step 2: Export the CQWP&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD6u8BmSI/AAAAAAAAABc/daKS25kkReU/s1600-h/image%5B39%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh5.ggpht.com/_TgWOrIhd5jo/TCrD65BffnI/AAAAAAAAABg/rF8YETtYfj4/image_thumb%5B27%5D.png?imgmax=800" width="244" height="121" /&gt;&lt;/a&gt;Unfortunately, the GUI doesn’t provide a means to specify additional fields for the CQWP to return, so in order to specify those I have to export the CQWP and modify the file directly. To export the CQWP, I click on the down arrow in the title of the web part and select Export. After the file has downloaded, it can be opened up with notepad (any text editor will do).&lt;/p&gt;&lt;p&gt;As discussed earlier, I need to edit the fields that get returned by the CQWP so that I can display them. To do this, I need to edit the CommonViewFields element within the .webpart file.&lt;/p&gt;&lt;p&gt;Find the line:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;#160; &lt;font size="1"&gt;&amp;lt;property name=&amp;quot;CommonViewFields&amp;quot; type=&amp;quot;string&amp;quot;/&amp;gt;&lt;/font&gt;       &lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;And change it to:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;#160; &lt;font size="1"&gt;&amp;lt;property name=&amp;quot;CommonViewFields&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ExternalUrl,URL;PublishingPageImage,Image;Body,Description;PublishingPageContent,RichHTML;PublishedDate,&amp;#160;&amp;#160; DateTime;Author, User;         &lt;br /&gt;&amp;#160; &amp;lt;/property&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This specifies the fields and their types that the CQWP should to return. I saved the .webpart file back to the desktop and upload it to the site’s web part gallery. &lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;Step 3: Add a Custom Template to ItemStyles.xsl&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;ItemStyles.xsl is located in the Style Library document library and can be edited with SharePoint designer. This file contains the various item style templates used by the CQWP and I need to add a new style template to display the blog postings.&lt;/p&gt;&lt;p&gt;At the very top of the ItemStyles.xsl file, I added a new namespace entry (shown in red) because the templates require access to some date manipulation functions.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font size="1"&gt;&amp;lt;xsl:stylesheet        &lt;br /&gt;&amp;#160; version=&amp;quot;1.0&amp;quot;         &lt;br /&gt;&amp;#160; exclude-result-prefixes=&amp;quot;x d xsl msxsl cmswrt&amp;quot;         &lt;br /&gt;&amp;#160; xmlns:x=&amp;quot;&lt;/font&gt;&lt;a href="http://www.w3.org/2001/XMLSchema&amp;quot;"&gt;&lt;font size="1"&gt;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;        &lt;br /&gt;&amp;#160; xmlns:d=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/sharepoint/dsp&amp;quot;"&gt;&lt;font size="1"&gt;http://schemas.microsoft.com/sharepoint/dsp&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;        &lt;br /&gt;&amp;#160; xmlns:cmswrt=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime&amp;quot;"&gt;&lt;font size="1"&gt;http://schemas.microsoft.com/WebParts/v3/Publishing/runtime&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;        &lt;br /&gt;&amp;#160; &lt;font color="#ff0000"&gt;xmlns:ddwrt=&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/WebParts/v2/DataView/runtime&amp;quot;"&gt;&lt;font color="#ff0000" size="1"&gt;http://schemas.microsoft.com/WebParts/v2/DataView/runtime&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;        &lt;br /&gt;&amp;#160; xmlns:xsl=&amp;quot;&lt;/font&gt;&lt;a href="http://www.w3.org/1999/XSL/Transform&amp;quot;"&gt;&lt;font size="1"&gt;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot;&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Next I need to add two templates to the .xsl file. The primary template is called BlogPostings which is loosely based off of the template provided in &lt;a href="http://blog.henryong.com/2008/06/15/how-to-customize-the-content-query-web-part-xsl-to-aggregate-blog-posts/" target="_blank"&gt;Henry’s post&lt;/a&gt; while a &lt;a href="http://blog.thekid.me.uk/archive/2007/05/17/stripping-html-tags-when-using-xslt.aspx" target="_blank"&gt;secondary template&lt;/a&gt; is used in order to strip out html tags from the body of the blogs. This is necessary because I am only showing a short preview of the blog body in the rollup which can lead to malformed HTML if tags end up getting chopped off in the process of creating the preview. &lt;/p&gt;&lt;p&gt;Find the first template entry and paste in this text right before it (approx line 15):&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font size="1"&gt;&amp;lt;xsl:template name=&amp;quot;removeHtmlTags&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:param name=&amp;quot;html&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:choose&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($html, '&amp;amp;lt;')&amp;quot;&amp;gt;         &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; &amp;lt;xsl:value-of select=&amp;quot;substring-before($html, '&amp;amp;lt;')&amp;quot;/&amp;gt;         &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; &amp;lt;!-- Recurse through HTML --&amp;gt;         &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; &amp;lt;xsl:call-template name=&amp;quot;removeHtmlTags&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;html&amp;quot; select=&amp;quot;substring-after($html, '&amp;amp;gt;')&amp;quot;/&amp;gt;         &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; &amp;lt;/xsl:call-template&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:otherwise&amp;gt;         &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; &amp;lt;xsl:value-of select=&amp;quot;$html&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:otherwise&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:choose&amp;gt;         &lt;br /&gt;&amp;lt;/xsl:template&amp;gt;         &lt;br /&gt;&amp;lt;xsl:template name=&amp;quot;BlogPostings&amp;quot; match=&amp;quot;Row[@Style='BlogPostings']&amp;quot; mode=&amp;quot;itemstyle&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;SafeLinkUrl&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;OuterTemplate.GetSafeLink&amp;quot;&amp;gt;         &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; &amp;lt;xsl:with-param name=&amp;quot;UrlColumnName&amp;quot; select=&amp;quot;'LinkUrl'&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;SafeImageUrl&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;OuterTemplate.GetSafeStaticUrl&amp;quot;&amp;gt;         &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; &amp;lt;xsl:with-param name=&amp;quot;UrlColumnName&amp;quot; select=&amp;quot;'ImageUrl'&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;DisplayTitle&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;OuterTemplate.GetTitle&amp;quot;&amp;gt;         &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; &amp;lt;xsl:with-param name=&amp;quot;Title&amp;quot; select=&amp;quot;@Title&amp;quot;/&amp;gt;         &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; &amp;lt;xsl:with-param name=&amp;quot;UrlColumnName&amp;quot; select=&amp;quot;'LinkUrl'&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;LinkTarget&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:if test=&amp;quot;@OpenInNewWindow = 'True'&amp;quot; &amp;gt;_blank&amp;lt;/xsl:if&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;PublishedMonthDay&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;ddwrt:FormatDateTime(string(@PublishedDate) ,1033 ,'MMMM dd')&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;PublishedLong&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;ddwrt:FormatDateTime(string(@PublishedDate) ,1033 ,'MM-dd-yyyy hh:mm tt')&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;Author&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;OuterTemplate.GetGroupName&amp;quot;&amp;gt;         &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; &amp;lt;xsl:with-param name=&amp;quot;GroupName&amp;quot; select=&amp;quot;@Author&amp;quot;/&amp;gt;         &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; &amp;lt;xsl:with-param name=&amp;quot;GroupType&amp;quot; select=&amp;quot;'Name'&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;pureText&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;removeHtmlTags&amp;quot;&amp;gt;         &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; &amp;lt;xsl:with-param name=&amp;quot;html&amp;quot; select=&amp;quot;@Body&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:if test=&amp;quot;string-length($SafeImageUrl) != 0&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div class=&amp;quot;image-area-left&amp;quot;&amp;gt;         &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; &amp;lt;a href=&amp;quot;{$SafeLinkUrl}&amp;quot; target=&amp;quot;{$LinkTarget}&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img class=&amp;quot;image&amp;quot; src=&amp;quot;{$SafeImageUrl}&amp;quot; alt=&amp;quot;{@ImageUrlAltText}&amp;quot; /&amp;gt;         &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; &amp;lt;/a&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:if&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:if test=&amp;quot;position()=1&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;STYLE&amp;gt;         &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; .ms-postcalendardateboxtop         &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; {         &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; border-bottom: #003d66 1px solid;         &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; border-left: #00558d 1px solid;         &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; margin-top: 5px;         &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; width: 75px;         &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; background: url(/_layouts/images/calTopBkgd.png) #0072bc repeat-x left bottom;         &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; height: 13px;         &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; border-top: #00558d 1px solid;         &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; margin-right: 7px;         &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; border-right: #004572 1px solid;         &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; }         &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; .ms-postcalendardateboxbottom         &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; {         &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; border-bottom: #91959a 1px solid;         &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; text-align: center;         &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; border-left: #c1c7cd 1px solid;         &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; padding-bottom: 2px;         &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; min-height: 38px;         &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; padding-left: 0px;         &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; width: 75px;         &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; padding-right: 0px;         &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; display: table;         &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; font: 1.1em/1.3em verdana;         &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; max-width: 75px;         &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; word-wrap: break-word;         &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; background: url(/_layouts/images/calMainBkgd.png) #f1f1f1 repeat-x left bottom;         &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; table-layout: fixed;         &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; color: #65686b;         &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; border-top: #c1c7cd 1px hidden;         &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; margin-right: 7px;         &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; border-right: #9ea3a8 1px solid;         &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; word-spacing: 10em;         &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; padding-top: 4px;         &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; } &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ms-leftblogdate        &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; {         &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; width: 75px;         &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; padding-right: 10px;         &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; }         &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; .ms-blogpostdatecol         &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; {         &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; vertical-align: top;         &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; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/STYLE&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:if&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;table xmlns:x=&amp;quot;&lt;/font&gt;&lt;a href="http://www.w3.org/2001/XMLSchema&amp;quot;"&gt;&lt;font size="1"&gt;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; xmlns:d=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/sharepoint/dsp&amp;quot;"&gt;&lt;font size="1"&gt;http://schemas.microsoft.com/sharepoint/dsp&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; xmlns:asp=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/ASPNET/20&amp;quot;"&gt;&lt;font size="1"&gt;http://schemas.microsoft.com/ASPNET/20&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; xmlns:__designer=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/WebParts/v2/DataView/designer&amp;quot;"&gt;&lt;font size="1"&gt;http://schemas.microsoft.com/WebParts/v2/DataView/designer&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; xmlns:SharePoint=&amp;quot;Microsoft.SharePoint.WebControls&amp;quot; xmlns:ddwrt2=&amp;quot;urn:frontpage:internal&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;tr class=&amp;quot;ms-blogpostdatecol&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;         &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; &amp;lt;td class=&amp;quot;ms-leftblogdate&amp;quot; style=&amp;quot;margin-top:15px;&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div id=&amp;quot;PostDateTopBox&amp;quot; class=&amp;quot;ms-postcalendardateboxtop&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div id=&amp;quot;PostDateBottomBox&amp;quot; class=&amp;quot;ms-postcalendardateboxbottom&amp;quot; style=&amp;quot;overflow-x:hidden;position:relative;top:14px;left:-1px;&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;$PublishedMonthDay&amp;quot; /&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &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; &amp;lt;/td&amp;gt;         &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; &amp;lt;td class=&amp;quot;ms-rightblogpost&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;table dir=&amp;quot;None&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;tbody&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;tr&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;td class=&amp;quot;ms-PostTitle&amp;quot; style=&amp;quot;FONT-SIZE: 16pt;&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;a href=&amp;quot;{$SafeLinkUrl}&amp;quot; target=&amp;quot;{$LinkTarget}&amp;quot; title=&amp;quot;{@LinkToolTip}&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;$DisplayTitle&amp;quot;/&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/a&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/td&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/tr&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/tbody&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/table&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div class=&amp;quot;ms-PostFooter&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;span class=&amp;quot;ms-postfootercolor&amp;quot;&amp;gt;by &amp;lt;/span&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;nobr&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;span&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;$Author&amp;quot; /&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img border=&amp;quot;0&amp;quot; height=&amp;quot;1&amp;quot; width=&amp;quot;3&amp;quot; src=&amp;quot;/_layouts/images/blank.gif&amp;quot;/&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img border='0' height='12' width='12' class='ms-imnImg' src='/_layouts/images/blank.gif' alt='' /&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/span&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/nobr&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;span class=&amp;quot;ms-postfootercolor&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; on &amp;lt;xsl:value-of select=&amp;quot;$PublishedLong&amp;quot;/&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/span&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div class=&amp;quot;ms-PostBody&amp;quot; style=&amp;quot;margin-top:5px;&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div class=&amp;quot;description&amp;quot; style=&amp;quot;padding-left:5px; color:#333333;&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;substring($pureText, 0, 350)&amp;quot; disable-output-escaping=&amp;quot;yes&amp;quot;/&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;a href=&amp;quot;{$SafeLinkUrl}&amp;quot; target=&amp;quot;{$LinkTarget}&amp;quot; title=&amp;quot;Read More&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div class=&amp;quot;ms-PostFooter&amp;quot; style=&amp;quot;height:10px;&amp;quot;&amp;gt;         &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;         &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; &amp;lt;/td&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/tr&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/table&amp;gt;         &lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_TgWOrIhd5jo/TCrD42iHypI/AAAAAAAAACU/0W-6CHsA8hc/s1600-h/image%5B29%5D.png"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Save ItemStyles.xsl and be sure to check it back in.&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;Step 4: Putting the CQWP on the Page and Setting the Item Style&lt;a href="http://lh4.ggpht.com/_TgWOrIhd5jo/TCrD7WRstII/AAAAAAAAABo/_XDWeb4nQeA/s1600-h/image%5B43%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD7754f7I/AAAAAAAAABs/yaZUUQyY4TQ/image_thumb%5B29%5D.png?imgmax=800" width="124" height="244" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;The final step is deleting the CQWP added to the page in step one and replacing it with the modified CQWP I uploaded to the web part gallery in step 2. Once the new web part has been added to the page, the item style must be specified to use the BlogPosting style. Edit the web part and expand the Presentation section. In the Item Style dropdown, there is a BlogPosting style. Select it and click OK to save the changes to the CQWP and then check in the page.&lt;/p&gt;&lt;p&gt;The CQWP should now look something like this:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD8LavZBI/AAAAAAAAABw/mEHQfxmfYx0/s1600-h/image%5B47%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD8T8yhzI/AAAAAAAAAB0/-vmS2ufwJ7A/image_thumb%5B31%5D.png?imgmax=800" width="644" height="456" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_TgWOrIhd5jo/TCrD42iHypI/AAAAAAAAACU/0W-6CHsA8hc/s1600-h/image%5B29%5D.png"&gt;&amp;#160;&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/6587983161853073832-4670926500205189060?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4670926500205189060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4670926500205189060' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4670926500205189060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4670926500205189060'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/06/using-content-query-web-part-to.html' title='Using the Content Query Web Part to Aggregate Blog Postings in SharePoint 2010'/><author><name>Colin Murphy</name><uri>http://www.blogger.com/profile/00890675779222390815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_TgWOrIhd5jo/TCrD4sVRbFI/AAAAAAAAABA/JZpn67qW3mI/s72-c/image_thumb%5B19%5D.png?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7490459386588646411</id><published>2010-06-18T11:39:00.000-04:00</published><updated>2010-06-18T11:39:36.926-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow Visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='workflow'/><title type='text'>Workflow Visualization for Visual Studio workflows</title><content type='html'>This is extension to the previous workflow visualization post and looks into visualization for workflows created in Visual Studio.&lt;br /&gt;&lt;br /&gt;Visual Studio based workflows do not have the same visualization capabilities as OOB, Visio or SharePOint Designer (SPD) unless they are imported from SharePoint designer. Also, for the workflows imported from SPD, the changes made in Visual Studio would not be reflected in the visualization. So, VS has very limited support when compared to other methods.&lt;br /&gt;&lt;br /&gt;After some research, I came up with following steps to enable/update visualization for VS workflows. It requires these manual steps everytime the workflow activities are modified and I hope there is a simpler way or a way to automate these steps.&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp; Visio diagram:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a Visio diagram similar to Windows Workflow using Microsoft SharePoint Workflow template.&amp;nbsp; Save as Visio Web diagram.&lt;/li&gt;&lt;li&gt;From Ribbon -&amp;gt; Process -&amp;gt; SharePoint Workflow, Export a Visio exchange file to a temp folder.&lt;/li&gt;&lt;li&gt;Save the Visio diagram (it is important to save after exporting the exchange file)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp; In Visual Studio solution, &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add Module element (name: VisioChartModule) &lt;/li&gt;&lt;li&gt;Add above created Visio web diagram file&lt;/li&gt;&lt;/ul&gt;The module xml should look like:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_bD6J5Tohy5k/TBuSYw0luiI/AAAAAAAAAYQ/SA5Ko6mkP9k/s1600/wf_module.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="92" src="http://2.bp.blogspot.com/_bD6J5Tohy5k/TBuSYw0luiI/AAAAAAAAAYQ/SA5Ko6mkP9k/s400/wf_module.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp; In the Windows workflow registration xml, add metadata to show visualization is status page&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_bD6J5Tohy5k/TBuSaFBvnaI/AAAAAAAAAYY/ZIRLXM3vg7c/s1600/wf_elements.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="95" src="http://1.bp.blogspot.com/_bD6J5Tohy5k/TBuSaFBvnaI/AAAAAAAAAYY/ZIRLXM3vg7c/s400/wf_elements.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp; Map Visio activities to Windows Workflow activities, to show the state of the workflow.&amp;nbsp; This is done in two steps.&amp;nbsp; Retrieve the Visio diagram activities description and save it to the Windows Workflow activities.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To get the activities description, rename the above exported Visio Exchange File to .zip file and extract the workflow.xml file.&amp;nbsp; Workflow.xml contains activity description elements in the format:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;i&gt;&lt;b&gt;ShapeGuid={6A21CA78-97E3-41D3-8DF8-E59C8C8A90D5};PageId=0;ShapeId=20;ShapeText=Manager review&lt;/b&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;For the corresponding Windows workflow activity, update the description property.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp; Build and deploy the Windows Workflow solution.&lt;br /&gt;&lt;br /&gt;Sample Windows Workflow visualization screenshot that shows the Visio web diagram and the state of the workflow:&lt;br /&gt;&lt;span id="goog_1438012253"&gt;&lt;/span&gt;&lt;span id="goog_1438012254"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_bD6J5Tohy5k/TBuK_qpjuII/AAAAAAAAAYI/-0U8b08J9xo/s1600/vs_wf.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="357" src="http://3.bp.blogspot.com/_bD6J5Tohy5k/TBuK_qpjuII/AAAAAAAAAYI/-0U8b08J9xo/s400/vs_wf.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7490459386588646411?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7490459386588646411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7490459386588646411' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7490459386588646411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7490459386588646411'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/06/workflow-visualization-for-visual.html' title='Workflow Visualization for Visual Studio workflows'/><author><name>Ramu Pulipati</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_bD6J5Tohy5k/TBuSYw0luiI/AAAAAAAAAYQ/SA5Ko6mkP9k/s72-c/wf_module.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3829864472432767829</id><published>2010-06-18T11:00:00.000-04:00</published><updated>2010-06-18T11:00:00.897-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow Visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='workflow'/><title type='text'>Workflow Visualization</title><content type='html'>One of the features Microsoft introduced with SharePoint 2010 is workflow visualization. The visualization provides visual representation and the current state of the workflow based on how it was authored.&amp;nbsp; In order for visualization to work correctly, Visio Graphics service application should be setup and associated with the web application.&lt;br /&gt;&lt;br /&gt;For OOB SharePoint server workflows (approval workflow, feedback workflow, etc.), visualization is enabled by default.&amp;nbsp; The visualization displays the list of workflow participants and the number of remaining tasks for workflow to complete.&lt;br /&gt;&lt;br /&gt;Workflows that are authored in Visio 2010 or SharePoint Designer 2010 have a simple option to enable workflow visualization.&amp;nbsp; Just check the “Show workflow visualization on status page” in SharePoint designer and the status page renders visualization diagram with current state of the workflow.&lt;br /&gt;&lt;br /&gt;When the visualization option is checked, SharePoint designer creates a Visio diagram in workflow folder which can be modified for branding or to add comments.&lt;br /&gt;&lt;br /&gt;SharePoint Designer workflow settings screen:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_bD6J5Tohy5k/TBuILzy-jfI/AAAAAAAAAX4/32EtG9UCQA8/s1600/spd_settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://3.bp.blogspot.com/_bD6J5Tohy5k/TBuILzy-jfI/AAAAAAAAAX4/32EtG9UCQA8/s400/spd_settings.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sample visualization screen shot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_bD6J5Tohy5k/TBuITePbkqI/AAAAAAAAAYA/1fNiK_FE8BA/s1600/spd_visualization.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://2.bp.blogspot.com/_bD6J5Tohy5k/TBuITePbkqI/AAAAAAAAAYA/1fNiK_FE8BA/s640/spd_visualization.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I'll write a follow up Workflow Visualization post for workflows created in Visual Studio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3829864472432767829?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3829864472432767829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3829864472432767829' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3829864472432767829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3829864472432767829'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/06/workflow-visualization.html' title='Workflow Visualization'/><author><name>Ramu Pulipati</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_bD6J5Tohy5k/TBuILzy-jfI/AAAAAAAAAX4/32EtG9UCQA8/s72-c/spd_settings.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-817059888006603615</id><published>2010-06-10T13:52:00.001-04:00</published><updated>2010-06-10T13:52:02.910-04:00</updated><title type='text'>CustomErrors and SharePoint 2010</title><content type='html'>&lt;p&gt;I recently wanted to turn custom errors off in my development environment so that I could see all the pertinent details directly in the browser (rather than hunting through the logs). I opened up the web.config in the virtualdirectories folder and changed:&lt;/p&gt;  &lt;p&gt;&amp;lt;customErrors mode=&amp;quot;Off&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p&gt;and&lt;/p&gt;  &lt;p&gt;&amp;lt;SafeMode MaxControls=&amp;quot;200&amp;quot; CallStack=&amp;quot;true&amp;quot; DirectFileDependencies=&amp;quot;10&amp;quot; TotalFileDependencies=&amp;quot;50&amp;quot; AllowPageLevelTrace=&amp;quot;false&amp;quot;&amp;gt;&lt;/p&gt;  &lt;p&gt;I figured that was it. Unfortunately the next time there was an error I got a screen stating that if I wanted to see the details, I should set customErrors to “Off”. Strange, I thought I just did that. After much hunting, I discovered that there was a second web.config in the Layouts folder with customErrors set to “On.” I changed that one to “Off” and error details started appearing in the browser. So, to make a long story short, if you want to turn custom errors off, check the web.config in virtualdirectories and in templates\layouts. Hope this helps. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-817059888006603615?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/817059888006603615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=817059888006603615' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/817059888006603615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/817059888006603615'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/06/customerrors-and-sharepoint-2010.html' title='CustomErrors and SharePoint 2010'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8729157942816929443</id><published>2010-06-06T16:55:00.002-04:00</published><updated>2010-06-06T17:00:21.833-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Getting Started on SharePoint 2010 Migrations</title><content type='html'>&lt;p&gt;I have written a short five part series on getting started on updating to SharePoint 2010.  Hopefully this will assist you with planning and getting ready to start you SharePoint 2010 upgrade initiatives.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-migration-getting.html"&gt;SharePoint 2010 Migration Getting Started&lt;/a&gt; - Discusses how to get started and creating a roadmap for the upgrade.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-upgrade-scenarios.html"&gt;SharePoint 2010 Upgrade Scenarios&lt;/a&gt; - Discusses what are the possible upgrade paths and considerations for them.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-upgrade-preparation.html"&gt;SharePoint 2010 Upgrade Preparation&lt;/a&gt; - Discusses how to get prepared for your SharePoint 2010 upgrade.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-upgrade-testing.html"&gt;SharePoint 2010 Upgrade Testing&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/06/sharepoint-2010-upgrade-validation-and.html"&gt;SharePoint 2010 Upgrade, Validation and References&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-8729157942816929443?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8729157942816929443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8729157942816929443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8729157942816929443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8729157942816929443'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/06/getting-started-on-sharepoint-2010.html' title='Getting Started on SharePoint 2010 Migrations'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7341066851786823311</id><published>2010-05-27T11:48:00.007-04:00</published><updated>2010-05-28T14:17:08.914-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='Search Scopes'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><title type='text'>Search a BCS Entry using SharePoint 2010 Enterprise Search</title><content type='html'>This blog post will walk through the process of creating a BCS entry that connects to the AdventureWorks database, then setting up SharePoint 2010 Enterprise Search to search the contents of the Products table in the AW database. This post assumes the following:&lt;br /&gt;&lt;br /&gt;1. You have SharePoint 2010 installed.&lt;br /&gt;2. You have SQL Server 2008 installed.&lt;br /&gt;3. You have installed the AW database (go &lt;a href="http://msftdbprodsamples.codeplex.com/"&gt;here &lt;/a&gt;to for the installation process)&lt;br /&gt;4. You have a basic understanding of the BCS and Search functionality in SharePoint 2010. This post is not meant to be a tutorial, though I'll try to explain some things where I can...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 1: Setting the stage.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;During the process of getting this sample to work, I stumbled around a few times with things that needed to be configured under the covers. So let's list out these "gotchas":&lt;br /&gt;&lt;br /&gt;1. Ensure that you are logging on to the SharePoint 2010 server as the Administrator user.&lt;br /&gt;&lt;br /&gt;2. In your root site collection, go to Site Settings &gt; Site Collection Administration &gt; Site Collections Features. Activate the SharePoint Server Publishing Infrastructure feature. This will allow us to create an Enterprise Search Center site later on.&lt;br /&gt;&lt;br /&gt;3. In Central Administration, go to Application Management &gt; Manage Service Applications. Click the Business Data Connectiviy Service to open the admin page for that service. Click the Configure button in the Ribbon and click the Enable Profile Page Creation checkbox, then put in the root URL for your site as the Host SharePoint site URL.&lt;br /&gt;&lt;br /&gt;4. Click the Set Metadata Store Permissions and add your adminstrator user.&lt;br /&gt;&lt;br /&gt;5. Return to the Manage Service Applications page and click the Search Service Application. Under the System Status section, locate the "Default Content Access Account" entry. Change the user to your administrator user.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 2: Creating the BCS Entry.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Open SharePoint Designer 2010. Open your site and log in as the administrator.&lt;br /&gt;&lt;br /&gt;2. In the left hand menu, click on "External Content Types". External Content Types are used to define external business objects, read more about them &lt;a href="http://technet.microsoft.com/en-us/library/ee524076.aspx"&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;2. In the ribbon, click the "External Content Type" button.&lt;br /&gt;&lt;br /&gt;3. Specify the name as "Products".&lt;br /&gt;&lt;br /&gt;4. Click the "Click here to discover external data sources and define operations" below. Here&lt;br /&gt;is where we will specify the AdventureWorks database.&lt;br /&gt;&lt;br /&gt;5. Click the Add Connection button. Choose "SQL Server" as your Data Source Type and click OK.&lt;br /&gt;&lt;br /&gt;6. Enter the following:&lt;br /&gt;&lt;br /&gt;Database Server: &lt;name&gt;&lt;br /&gt;Database Name: AdventureWorks&lt;br /&gt;Name: AdventureWorks&lt;br /&gt;&lt;br /&gt;Leave the "Connect with User's Identity" radio button selected. Note that we are assuming that the administrator user has the proper permissions to the AdventureWorks database in SQL Server.&lt;br /&gt;&lt;br /&gt;7. Click OK. You should now see the AW database in the Data Source Explorer window.&lt;br /&gt;&lt;br /&gt;8. Expand the Database and expand the Tables entry. Locate the Product table and select it.&lt;br /&gt;&lt;br /&gt;9. Right mouse click on the Products table and select the "Create all Operations" menu item. This will create the Create, Read Item, Update, Delete and Read List operations that SharePoint will use to allow users to perform CRUD operations on this table. The All Operations wizard window will display.&lt;br /&gt;&lt;br /&gt;10. Click Next to display the Parameters Configuration screen. Select the Name field and then click the Show in Picker checkbox, which specifies that the Name field will be displayed in the external item picker control.&lt;br /&gt;&lt;br /&gt;11. Click Finish and you should see the operations in the External Content Type Operations section on the right side of the screen.&lt;br /&gt;&lt;br /&gt;12. Now click on the Summary View button on the ribbon.&lt;br /&gt;&lt;br /&gt;13. In the Fields section, Click on the Name field, then click on the Set as Title button on the ribbon. This tells SharePoint to use the Name field as the Title field when displaying this Content Type as a list.&lt;br /&gt;&lt;br /&gt;14. Now click on the Create Profile Page button in the Ribbon. Select Yes to save the Content Type, and then SharePoint will create the profile page.&lt;br /&gt;&lt;br /&gt;You have now created your Products External Content Type. The next step will be to set up SharePoint Enterprise Search to crawl and index this content type.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 3: Create the Search Entry.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Return to Central Administration, and go to Manage Service Applications &gt; Search Service Application.&lt;br /&gt;&lt;br /&gt;2. Click on Crawling &gt; Content Sources.&lt;br /&gt;&lt;br /&gt;3. Click on New Content Source. Enter the name as Products. Then click on the "Line of Business Data" Radio Button. In the External Data Source section, select the "Crawl selected external datasource radio button" and select the Adventure Works database.&lt;br /&gt;&lt;br /&gt;4. Select the "Start Full Crawl of this content source" check box and click OK. Now wait for the crawl to complete.&lt;br /&gt;&lt;br /&gt;5. After the crawl is complete, click on the Scopes link under Queries and Results. Click on New Scope.&lt;br /&gt;&lt;br /&gt;6. Enter "Products" as the Title. Click OK.&lt;br /&gt;&lt;br /&gt;7. You should now see the new Scope as an entry, and you'll see a link that says "Add Rules". Click this link.&lt;br /&gt;&lt;br /&gt;8. Click the Content Source radio button, then select your Content Source in the dropdown. Choose the "Include" radio button and click OK.&lt;br /&gt;&lt;br /&gt;9. You'll be returned to the Scope list, and your scope status should be "New scope - Ready after next update" By default, the updates are scheduled for every 30 minutes. The next few steps will show you how to force the update so you don't have to wait.&lt;br /&gt;&lt;br /&gt;10. Click the Search Administration link on the left hand menu. In the System Status section, you should see that the Scopes Update schedule is "Automatically scheduled". Click that link and change it to "On Demand Updates Only".&lt;br /&gt;&lt;br /&gt;11. When you return to System Status, you should see that there is now a link underneath that says "Start Update Now". Click that link and wait for the update to complete.&lt;br /&gt;&lt;br /&gt;12. Return to your SharePoint site and click on Site Settings. Click on Site Collection Administration &gt; Search Scopes. Click on Display Groups.&lt;br /&gt;&lt;br /&gt;13. For both the "Search Dropdown" and "Advanced Search" links, click on the link and include your new scope.&lt;br /&gt;&lt;br /&gt;14. Click on Site Actions &gt; New Site.&lt;br /&gt;&lt;br /&gt;15. Click on the Search category, and select the Enterprise Search Center site template. Enter bdctest as the name and the URL.&lt;br /&gt;&lt;br /&gt;16. On your newly created Search site, enter "helmet" as your search term and hit enter.&lt;br /&gt;&lt;br /&gt;17. You should see results that are coming from AdventureWorks. Note that you can display details about each result by clicking the link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7341066851786823311?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7341066851786823311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7341066851786823311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7341066851786823311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7341066851786823311'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/search-bdc-entry-using-sharepoint-2010.html' title='Search a BCS Entry using SharePoint 2010 Enterprise Search'/><author><name>Jay Horan</name><uri>http://www.blogger.com/profile/01289378033115524686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8635448400999787471</id><published>2010-05-27T11:25:00.001-04:00</published><updated>2010-05-27T11:25:29.997-04:00</updated><title type='text'>Visual Studio 2010 Deployment Error</title><content type='html'>&lt;p&gt;I recently started receiving the following error while deploying my SharePoint 2010 solution from Visual Studio:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Error&amp;#160;&amp;#160;&amp;#160; 11&amp;#160;&amp;#160;&amp;#160; Error occurred in deployment step 'Add Solution': Failed to load receiver assembly…&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;After spending some time searching through my project, I finally decided to enable &lt;a href="http://msdn.microsoft.com/en-us/library/e74a18c4(VS.80).aspx" target="_blank"&gt;Assembly Bind Logging&lt;/a&gt;. Looking at the logs revealed this:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;LOG: DisplayName = XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXX (Fully-specified)     &lt;br /&gt;LOG: Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/Extensions/Microsoft/SharePoint/      &lt;br /&gt;LOG: Initial PrivatePath = C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\SharePoint\VstspCache2584      &lt;br /&gt;Calling assembly : (Unknown).      &lt;br /&gt;===      &lt;br /&gt;LOG: This bind starts in default load context.      &lt;br /&gt;LOG: Using application configuration file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\SharePoint\vssphost4.exe.Config      &lt;br /&gt;LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config.      &lt;br /&gt;LOG: Post-policy reference: XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXX      &lt;br /&gt;LOG: The same bind was seen before, and was failed with hr = 0x80070002.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The key piece of information turned out to be the PrivatePath. It pointed me to vssphost4.exe which is the process that actually executes SharePoint commands. The commands are not executed directly from Visual Studio but rather this other 64-bit process. Vssphost4.exe was the source of the error. The solution? Kill that process and let Visual Studio spin up a new instance. My problem disappeared. Hopefully this will save someone else some head-scratching.&lt;/p&gt;  &lt;p&gt;Incidentally, while searching for a solution, I came across &lt;a href="http://msdn.microsoft.com/en-us/library/ee471440.aspx" target="_blank"&gt;this MSDN article&lt;/a&gt; on debugging extensions for SharePoint tools and vssphost4.exe. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-8635448400999787471?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8635448400999787471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8635448400999787471' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8635448400999787471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8635448400999787471'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/visual-studio-2010-deployment-error.html' title='Visual Studio 2010 Deployment Error'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-289088424621172132</id><published>2010-05-21T15:57:00.001-04:00</published><updated>2010-05-21T15:57:34.089-04:00</updated><title type='text'>Silverlight to Page Communication</title><content type='html'>&lt;p&gt;In my &lt;a href="http://rdacollab.blogspot.com/2010/05/hosting-silverlight-apps-in-sharepoint.html" target="_blank"&gt;last entry&lt;/a&gt;, I covered how to host a Silverlight application in SharePoint. This time, I want to discuss how that Silverlight application can call script functions on the hosting page and how those scripts can call functions within the Silverlight application. Enabling this two-way communication actually turns out to be fairly simple. &lt;/p&gt;  &lt;p&gt;Lets start with the Silverlight application. To enable a method in Silverlight to be called from script, add the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.scriptablememberattribute(VS.95).aspx" target="_blank"&gt;ScriptableMember&lt;/a&gt; attribute. The code (in your MainPage.xaml.cs for example) would look something like this:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;[ScriptableMember]     &lt;br /&gt;public void DoSomeWork()      &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Work goes here;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font face="Courier New"&gt;return;     &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You also need to register the Silverlight application as scriptable in the Loaded event of the Silverlight application:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;void MainPage_Loaded(object sender, RoutedEventArgs e)     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; HtmlPage.RegisterScriptableObject(&amp;quot;MySilverlight&amp;quot;, this);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The above statement is registering a scriptable object on the host page with an ID of “MySilverlight”. The second parameter is the .Net object being registered. This will enable scripts to call any method on that object that have been decorated with the ScriptableMember attribute.&lt;/p&gt;  &lt;p&gt;To call this method from JavaScript on the hosting page:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;var plugin = document.getElementById(‘&amp;lt;%= silverlightApp.ClientID %&amp;gt;’);     &lt;br /&gt;plugin.content.MySilverlight.DoSomeWork();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The code is getting a reference to the Silverlight host control on the page and then calling into the MySilverlight object we previously registered as scriptable. The example assumes that the Silverlight application has been added to the page with an ID of “silverlightApp”:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;WebPartPages:SilverlightWebPart runat=&amp;quot;server&amp;quot; Height=&amp;quot;250px&amp;quot; Url=&amp;quot;/SiteAssets/SilverlightApplication1.xap&amp;quot; ApplicationXml=&amp;quot;&amp;quot; HelpMode=&amp;quot;Modal&amp;quot; Description=&amp;quot;A web part to display a Silverlight application.&amp;quot; ID=&amp;quot;silverlightApp&amp;quot; Width=&amp;quot;400px&amp;quot; Title=&amp;quot;Silverlight Web Part&amp;quot; WebPart=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/WebPartPages:SilverlightWebPart&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The examples so far give us host page to Silverlight communication. Now let’s go the other direction. We want to have Silverlight call a script function defined on the host page. Here is our host page JavaScript function:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;function WorkFailed(message) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; alert(message);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;To call this function from the Silverlight application, all we need to do is this:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;HtmlPage.Window.Invoke(&amp;quot;WorkFailed&amp;quot;, “I am too tired”);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The first argument indicates the script function to be called. The second is the parameter (or parameters) that function expects. &lt;/p&gt;  &lt;p&gt;The possibilities here are endless. One interesting scenario would be to combine this technique with &lt;a href="http://rdacollab.blogspot.com/2010/05/sharepoint-2010-dialog-framework.html" target="_blank"&gt;the dialog framework&lt;/a&gt; and have a purely Silverlight driven popup.&amp;#160; I should mention that while these examples were done in the context of a SharePoint, the general technique is not specific to SharePoint.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-289088424621172132?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/289088424621172132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=289088424621172132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/289088424621172132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/289088424621172132'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/silverlight-to-page-communication.html' title='Silverlight to Page Communication'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7967860186685009563</id><published>2010-05-18T11:29:00.001-04:00</published><updated>2010-05-18T11:29:06.298-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Hosting Silverlight Apps in SharePoint</title><content type='html'>&lt;p&gt;The Silverlight Web Part in SharePoint 2010 makes it simple to add a Silverlight application to any of your pages, enabling a much richer UI experience than is possible on a web page. The trick is that you first need to get your XAP file into SharePoint. One easy way to accomplish this is to use a module inside of a SharePoint project. Assuming you already have a Silverlight project in Visual Studio, just add an Empty SharePoint Project to the same solution and add a new Module to the project:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_R3fY2PR0dPY/S_KyOff6nrI/AAAAAAAAAHk/z3AB9I1tQAY/s1600-h/image3.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_R3fY2PR0dPY/S_KyOjgxiLI/AAAAAAAAAHo/aUxGxwjq4XU/image_thumb1.png?imgmax=800" width="368" height="261" /&gt;&lt;/a&gt; Select the new module in the Solution Explorer and click on “Project Output References” in the Properties window. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_R3fY2PR0dPY/S_KyPKeIQhI/AAAAAAAAAHs/T9NKgTsGE6c/s1600-h/image6.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_R3fY2PR0dPY/S_KyPdpohBI/AAAAAAAAAHw/pjllHjya-3g/image_thumb2.png?imgmax=800" width="244" height="179" /&gt;&lt;/a&gt; Click “Add” and in the properties window, change the Deployment Type to “ElementFile” and the Project Name to your Silverlight project:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_R3fY2PR0dPY/S_KyPrYV1jI/AAAAAAAAAH0/WFecFou-xwI/s1600-h/image9.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_R3fY2PR0dPY/S_KyPwbbZaI/AAAAAAAAAH4/LGjJkFSgSxc/image_thumb3.png?imgmax=800" width="244" height="172" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Next, open the Elements.xml file under the SilverlightDeploymentModule you created in the first step. We need to edit this file to tell SharePoint that we want the XAP file to be placed into a library. For this example, we will place it into SiteAssets. Change the elements.xml file to this:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;      &lt;br /&gt;&amp;lt;Elements xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/sharepoint/&amp;quot;"&gt;&lt;font face="Courier New"&gt;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;Module Name=&amp;quot;SharePointDeploymentModule&amp;quot; Url=&amp;quot;SiteAssets&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;File Path=&amp;quot;SharePointDeploymentModule\SilverlightApplication1.xap&amp;quot; Url=&amp;quot;SilverlightApplication1.xap&amp;quot; Type=&amp;quot;GhostableInLibrary&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;lt;/Module&amp;gt;       &lt;br /&gt;&amp;lt;/Elements&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The addition of the URL attribute to the &lt;a href="http://msdn.microsoft.com/en-us/library/ms434127.aspx" target="_blank"&gt;Module&lt;/a&gt; element identifies the virtual path of the library in which files should be placed. We also removed the folder from the URL on the File element, leaving just the file name. Build and Deploy the SharePoint project. The XAP file will now appear in the SiteAssets library. You can now add a Silverlight Web Part to a page and set the URL to “/SiteAssets/SilverlightApplication1.xap”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_R3fY2PR0dPY/S_KyQHsPVvI/AAAAAAAAAH8/cv_afqGZRgk/s1600-h/image12.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_R3fY2PR0dPY/S_KyQX7rYcI/AAAAAAAAAIA/o4tuTG4ZBC8/image_thumb4.png?imgmax=800" width="244" height="112" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;With the basics out of the way, you can now add whatever functionality is needed to the Silverlight project. Next time we’ll look at how your hosting page and Silverlight application can communicate with one another. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7967860186685009563?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7967860186685009563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7967860186685009563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7967860186685009563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7967860186685009563'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/hosting-silverlight-apps-in-sharepoint.html' title='Hosting Silverlight Apps in SharePoint'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_R3fY2PR0dPY/S_KyOjgxiLI/AAAAAAAAAHo/aUxGxwjq4XU/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3996555104053624634</id><published>2010-05-17T16:04:00.001-04:00</published><updated>2010-05-17T16:04:51.826-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 Dialog Framework</title><content type='html'>&lt;p&gt;One of the really cool additions to SharePoint 2010 is a client side JavaScript framework for displaying popup windows. It is fairly simple to display a custom application page in a popup from some other page. A good out of the box example of this is the “Upload Document” popup available on document libraries:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_R3fY2PR0dPY/S_GhVEQWavI/AAAAAAAAAG0/11-LJ21BBHk/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_R3fY2PR0dPY/S_GhVu2zcwI/AAAAAAAAAG4/L7b6XEPIL54/image_thumb%5B1%5D.png?imgmax=800" width="304" height="148" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can use this same method in your own code. We’ll look at a simple example of a web part that calls into a popup to collect some information from the user. The popup content itself will actually be deployed as an application page. &lt;/p&gt;  &lt;p&gt;Start with an Empty SharePoint Project (PopupDemo) in Visual Studio 2010 and add a new Application Page (MyPopup.aspx). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_R3fY2PR0dPY/S_GhV8SZfyI/AAAAAAAAAG8/P9ii9bOHn8M/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_R3fY2PR0dPY/S_GhWRads-I/AAAAAAAAAHA/u79g2mJOk5s/image_thumb%5B3%5D.png?imgmax=800" width="315" height="222" /&gt;&lt;/a&gt; The Application Page will appear under the Layouts/PopupDemo mapped folder. Next add a Visual Web Part (PopupButton).&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/_R3fY2PR0dPY/S_GhWzXsUgI/AAAAAAAAAHE/vxZ1wU2iw8w/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_R3fY2PR0dPY/S_GhXUL3KjI/AAAAAAAAAHI/4K4_AS7C9sI/image_thumb%5B5%5D.png?imgmax=800" width="331" height="233" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;SharePoint will create a new User Control (PopupDemoUserControl) under the PopupButton web part. Open that file in the editor and add the following code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;SharePoint:ScriptLink ID=&amp;quot;showDailog&amp;quot; runat=&amp;quot;server&amp;quot; Name=&amp;quot;sp.js&amp;quot; Localizable=&amp;quot;false&amp;quot; LoadAfterUI=&amp;quot;true&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; function ShowPopup() { &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var options = {     &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; url: '/_layouts/PopupDemo/MyPopup.aspx’,      &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; tite: 'My Popup',      &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; allowMaximize: true,      &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; showClose: true,      &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; width: 300,      &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; height: 200,      &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; dialogReturnValueCallback: PopupCallback      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SP.UI.ModalDialog.showModalDialog(options);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; function PopupCallback(dialogResult, returnValue) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (dialogResult == SP.UI.DialogResult.OK) {      &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; addNotification(‘Hello ‘ + returnValue);      &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; alert(‘Hello ‘ + returnValue);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;      &lt;br /&gt;&amp;lt;button type=&amp;quot;button&amp;quot; onclick=&amp;quot;ShowPopup()&amp;quot; id=&amp;quot;popupButton&amp;quot;&amp;gt;Ask me&amp;lt;/button&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The new code does three things. First it adds a script reference to sp.js which contains the necessary JavaScript for the dialog framework. Second it defines two new client side functions, ShowPopup and PopupCallback. ShowPopup runs when the button is clicked. Notice that we create an instance of &lt;a href="http://msdn.microsoft.com/en-us/library/ff410058(v=office.14).aspx" target="_blank"&gt;Options&lt;/a&gt;, setting the URL (to the previously created Application page), title, size, and lastly, a callback function to be executed when the popup dialog is closed. PopupCallback is the callback function. The callback function displays the return value from the dialog using a JavaScript Alert. An alternative to using an alert is shown with the call to addNotification which utilizes the notification area on the page (it is at the bottom right hand corner of the ribbon). Visually, it is nicer than an alert window. Finally the code adds a button which, when clicked, will open the popup by calling ShowPopup.&lt;/p&gt;  &lt;p&gt;Now that the web part is complete, some code needs to be added to the actual popup page. Open MyPopup.aspx in the designer and add the following code to the PageHead Content area:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;SharePoint:ScriptLink ID=&amp;quot;showDailog&amp;quot; runat=&amp;quot;server&amp;quot; Name=&amp;quot;sp.js&amp;quot; Localizable=&amp;quot;false&amp;quot; LoadAfterUI=&amp;quot;true&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; function CancelDialog() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.cancel, 'Cancel Clicked');      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; function AcceptDialog() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, document.getElementById('&amp;lt;%= txtName.ClientID %&amp;gt;').value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Once again the fist line is a reference to sp.js. The next two functions are responsible for closing the dialog, one with a &lt;a href="http://msdn.microsoft.com/en-us/library/ff409060(v=office.14).aspx" target="_blank"&gt;dialog result&lt;/a&gt; of “cancel” and the other “OK”. The second argument passed to &lt;a href="http://msdn.microsoft.com/en-us/library/ff409682(v=office.14).aspx" target="_blank"&gt;commonModelDialogClose&lt;/a&gt; is the actual return value being passed back from the dialog. This is optional but in this case, we want to pass a value back to the calling page. To accomplish this, in Accept Dialog, we will build a return value based on the data the user has entered into a text box on the page. The text box and the buttons need to be added to the Main content area on the page:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;What is your name:&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txtName&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;button type=&amp;quot;button&amp;quot; onclick=&amp;quot;CancelDialog()&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button type=&amp;quot;button&amp;quot; onclick=&amp;quot;AcceptDialog()&amp;quot;&amp;gt;OK&amp;lt;/button&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This is simply a text input and two buttons. The Cancel button calls the CancelDialog JavaScript function and the OK button calls AcceptDialog. &lt;/p&gt;  &lt;p&gt;Compile and deploy the project into SharePoint and add the PopupButton web part to a page:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_R3fY2PR0dPY/S_GhXhmgQbI/AAAAAAAAAHM/eqBaYXyZt6s/s1600-h/image%5B14%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_R3fY2PR0dPY/S_GhXskzGPI/AAAAAAAAAHQ/nOimmXXtqsM/image_thumb%5B6%5D.png?imgmax=800" width="192" height="98" /&gt;&lt;/a&gt;Clicking the button should load our dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_R3fY2PR0dPY/S_GhYDqTlpI/AAAAAAAAAHU/IKwoGxv08YE/s1600-h/image%5B18%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_R3fY2PR0dPY/S_GhYdigi1I/AAAAAAAAAHY/Z_JukTp4CdY/image_thumb%5B8%5D.png?imgmax=800" width="297" height="215" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Enter something in the text box and click the “OK” button. You should then see the value correctly returned to the calling page. If you watch closely, you will also see the same message&amp;#160; appear in the notification area with a yellow background.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_R3fY2PR0dPY/S_GhYoI0F7I/AAAAAAAAAHc/aNqBD64FKlw/s1600-h/image%5B22%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_R3fY2PR0dPY/S_GhY8Fqw_I/AAAAAAAAAHg/-JMDy_Bv3gI/image_thumb%5B10%5D.png?imgmax=800" width="308" height="209" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Through this simple example I’ve shown you how you can improve the user experience in SharePoint dramatically by using a popup dialog rather than forcing the user to navigate to a separate page. The possibilities go far beyond collecting simple input. We could uploaded a file, deleted a list, logged some information, or done just about anything else you can accomplish with the SharePoint object model. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3996555104053624634?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3996555104053624634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3996555104053624634' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3996555104053624634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3996555104053624634'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/sharepoint-2010-dialog-framework.html' title='SharePoint 2010 Dialog Framework'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R3fY2PR0dPY/S_GhVu2zcwI/AAAAAAAAAG4/L7b6XEPIL54/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3143843694234870902</id><published>2010-05-15T15:04:00.003-04:00</published><updated>2010-05-15T15:07:08.560-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Introduction to New Features of SharePoint 2010</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;&lt;strong&gt;Introduction&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It can be daunting to put your arms around all the new features and functionality of SharePoint 2010. SharePoint 2010 is much deeper and richer than the previous releases.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The goal of this blog series to provide insight to all the new features of SharePoint 2010 to people who are experienced on SharePoint 2007. I am not going to rehash existing functionality as I am going to be focusing on understanding the new features.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I unfortunately did not get to go to the SharePoint 2010 conference to get a SharePoint 2010 introduction. I really do not have the time to really listen to tons of recorded video to get an initial understanding of the breath of changes that have been made for SharePoint 2010. I really just needed something that summarized all the changes between SharePoint 2007 and 2010 in one sitting.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I actually found what I was looking for on &lt;a href="http://msdn.microsoft.com/en-us/library/dd776256.aspx"&gt;SharePoint 2010 MSDN&lt;/a&gt;. There are two good articles called:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee539826(office.14).aspx"&gt;What's New in SharePoint Foundation 2010&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee557323(office.14).aspx"&gt;What's New in SharePoint Server 2010&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I was able to read through these articles to get an understanding of the breath of SharePoint 2010 and its new features. The following are my notes and thoughts while going through and reading each article.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I have organized my thoughts into the following feature sets:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/05/new-sharepoint-2010-features-part-2.html"&gt;Enterprise Data Access and Management Features&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/05/new-sharepoint-2010-features-part-3.html"&gt;Development Features&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/05/new-sharepoint-2010-features-part-4.html"&gt;Enterprise Content Management Features&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/05/new-sharepoint-2010-features-part-5.html"&gt;SharePoint Office and BI Features&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.astaticstate.com/2010/05/new-sharepoint-2010-features-part-6.html"&gt;Administration Features&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This blog series was originally written by RDAer Jason Apergis as &lt;a href="http://www.astaticstate.com/"&gt;A Static State&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3143843694234870902?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3143843694234870902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3143843694234870902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3143843694234870902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3143843694234870902'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/introduction-to-new-features-of.html' title='Introduction to New Features of SharePoint 2010'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-2559979066258515022</id><published>2010-05-06T12:10:00.000-04:00</published><updated>2010-05-06T12:10:38.448-04:00</updated><title type='text'>SharePoint 2010 Property Bag cmdlet</title><content type='html'>Powershell cmdlet to access SharePoint 2010 property bag is now uploaded to &lt;a href="http://rdacollaboration.codeplex.com/"&gt;RDA Codeplex site&lt;/a&gt; (&lt;a href="http://rdacollaboration.codeplex.com/releases/view/44859"&gt;Property Bag Cmdlet&lt;/a&gt;) &lt;br /&gt;&lt;br /&gt;This cmdlet allows to  retrieve, insert and update property bag values at farm, web app, site  and web scope.  The same operations can be done in code using Server OM. This  is provided for administrators to add/view property information  into a site without a code change.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Download RDA.PowerShell.PropertyBag.zip and Extract (say  c:\sp2010)&lt;/li&gt;&lt;li&gt;Using SharePoint 2010 Management Shell, deploy the solution &lt;/li&gt;&lt;/ul&gt;&lt;i&gt;Add-SPSolution c:\sp2010\RDA.PowerShell.PropertyBag.wsp&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Install-SPSolution  RDA.PowerShell.PropertyBag.wsp -GACDeployment&lt;/i&gt; &lt;ul&gt;&lt;li&gt;Re-open the SharePoint 2010 Management Shell and execute the  below powershell cmdlets&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;u&gt;Verbs&lt;/u&gt;&lt;br /&gt;RDA-Get&lt;br /&gt;RDA-Set&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Noun&lt;/u&gt;&lt;br /&gt;PropertyBag&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Help&lt;/u&gt;&lt;br /&gt;&lt;i&gt;get-help  RDA-Get-PropertyBag -full&lt;/i&gt;&lt;br /&gt;&lt;i&gt;get-help RDA-Get-PropertyBag -full&lt;/i&gt;&lt;br /&gt;or&lt;br /&gt;&lt;i&gt;RDA-Get-PropertyBag  -?&lt;/i&gt;&lt;br /&gt;&lt;i&gt;RDA-Set-PropertyBag -?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Examples&lt;/u&gt;&lt;br /&gt;&lt;i&gt;  get-help RDA-Get-PropertyBag -examples &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;OUTPUTS&lt;br /&gt;Returns all farm properties hashtable:&lt;br /&gt;&lt;i&gt;     C:\PS&amp;gt;RDA-Get-PropertyBag -Scope Farm -AllProperties $true&lt;/i&gt;&lt;br /&gt;Returns a farm property value:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Get-PropertyBag  -Scope Farm -Pn Test&lt;/i&gt;Property&lt;i&gt;Name&lt;/i&gt;&lt;br /&gt;Returns all web  application properties hashtable:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Get-PropertyBag  -Scope WebApplication -AllProperties $true&lt;/i&gt;&lt;br /&gt;Returns a web  application  property value:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Get-PropertyBag  -Scope WebApplication -Pn Test&lt;/i&gt;Property&lt;i&gt;Name&lt;/i&gt;&lt;br /&gt;Returns all  site properties hashtable:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Get-PropertyBag  -Scope Site -AllProperties $true&lt;/i&gt;&lt;br /&gt;Returns a site property  value:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Get-PropertyBag -Scope Farm -Pn Test&lt;/i&gt;Property&lt;i&gt;Name&lt;/i&gt;&lt;br /&gt;Returns all web properties hashtable:&lt;br /&gt;&lt;i&gt;     C:\PS&amp;gt;RDA-Get-PropertyBag -Scope Web -AllProperties $true&lt;/i&gt;&lt;br /&gt;Returns a site property value:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Get-PropertyBag  -Scope Web -Pn Test&lt;/i&gt;Property&lt;i&gt;Name&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;get-help  RDA-Set-PropertyBag -examples&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;OUTPUTS&lt;br /&gt;Sets farm  property value:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Set-PropertyBag -Scope Farm -Pn  Test&lt;/i&gt;Property&lt;i&gt;Name -Pv Test&lt;/i&gt;Property&lt;i&gt;Value&lt;/i&gt;&lt;br /&gt;Sets web  application property value:&lt;br /&gt;&lt;i&gt;   C:\PS&amp;gt;RDA-Set-PropertyBag  -Scope WebApplication -Pn Test&lt;/i&gt;Property&lt;i&gt;Name -Pv Test&lt;/i&gt;Property&lt;i&gt;Value&lt;/i&gt;&lt;br /&gt;Sets site property value:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Set-PropertyBag  -Scope Site -Pn Test&lt;/i&gt;Property&lt;i&gt;Name -Pv Test&lt;/i&gt;Property&lt;i&gt;Value&lt;/i&gt;&lt;br /&gt;Sets web property value:&lt;br /&gt;&lt;i&gt;    C:\PS&amp;gt;RDA-Set-PropertyBag  -Scope Web -Pn Test&lt;/i&gt;Property&lt;i&gt;Name -Pv Test&lt;/i&gt;Property&lt;i&gt;Value&lt;/i&gt;&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-2559979066258515022?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/2559979066258515022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=2559979066258515022' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2559979066258515022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2559979066258515022'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/sharepoint-2010-property-bag-cmdlet.html' title='SharePoint 2010 Property Bag cmdlet'/><author><name>Ramu Pulipati</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8609486463813286646</id><published>2010-05-06T09:01:00.001-04:00</published><updated>2010-05-06T09:01:45.574-04:00</updated><title type='text'>Dude, Where’s My List?</title><content type='html'>&lt;p&gt;One of the problems you can run into when deploying a List Definition as a Feature in SharePoint is that any lists based on the definition stop working when the feature is deactivated. You’re stuck with all these useless lists that you can’t get rid of. I found many posts suggesting that a feature receiver should be used to simply delete the lists based on the template. I’m not a big fan of this solution because it has side effects the user may not have been expecting. Imagine the poor administrator who just inadvertently deleted an important list. Rather than simply deleting the lists, I prefer to let the user know that the list template is in use. The following code sample demonstrates this approach for a web scoped feature that contains a list definition:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public override void FeatureDeactivating(SPFeatureReceiverProperties properties)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPWeb featureWeb = properties.Feature.Parent as SPWeb;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var lists = from SPList matchingList in featureWeb.Lists where matchingList.TemplateFeatureId == properties.Definition.Id select matchingList.Title; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (lists.Count&amp;lt;string&amp;gt;() &amp;gt; 0)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //We have lists that use this template, stop the deactivation to avoid loss of data       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Gather up the names.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string listNames = string.Join(&amp;quot;, &amp;quot;, lists.ToArray&amp;lt;string&amp;gt;()); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new SPException(&amp;quot;This feature can not be deactivated because the following lists depend on the definition: &amp;quot; + listNames.ToString());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="ver"&gt;A simple LINQ statement allows us to bring back the titles of all the lists that are using the template by querying on the TemplateFeatureId. From there it’s a simple matter of using string.Join to build a list of those names and display some useful information to the user. Now the user can either remove those lists (after exporting any important data) or leave the feature activated. It’s their choice.&lt;/font&gt;&lt;font face="Courier New"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-8609486463813286646?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8609486463813286646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8609486463813286646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8609486463813286646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8609486463813286646'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/dude-wheres-my-list.html' title='Dude, Where’s My List?'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7441724471873682692</id><published>2010-05-05T12:42:00.001-04:00</published><updated>2010-05-05T12:42:29.449-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 Fields not Redeploying</title><content type='html'>&lt;p&gt;I ran into any issue with a custom field definition in Visual Studio 2010 where my feature would deploy just fine but the field would not appear&amp;#160; in the Site Columns list. In addition, if I attempted to redeploy the feature via VS, I would get the following error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The field with ID XYZ defined in feature XYZ was found in the current site collection or in a sub site.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The field element looked fine and there were no errors during the initial deployment:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Elements xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/sharepoint/&amp;quot;"&gt;&lt;font face="Courier New"&gt;http://schemas.microsoft.com/sharepoint/&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;Field Group=&amp;quot;My Group&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ID=&amp;quot;abfd9f68-47d6-4ffc-a4c5-0fa5daeaf080&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Name=&amp;quot;TestField&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Type=&amp;quot;Boolean&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DisplayName=&amp;quot;Test Field&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowInDisplayForm=&amp;quot;TRUE&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowInEditForm=&amp;quot;TRUE&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowInNewForm=&amp;quot;TRUE&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowInListSettings=&amp;quot;TRUE&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AllowDeletion=&amp;quot;TRUE&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;lt;/Elements&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I finally resorted to deleting the site collection and starting over. While this worked for a while, the problem once again reared its ugly head. &lt;/p&gt;  &lt;p&gt;After much searching and head scratching, I came across this &lt;a href="http://support.microsoft.com/kb/2022443" target="_blank"&gt;KB Article&lt;/a&gt;.&amp;#160; The problem? The GUID value in the ID attribute of the Field element needs to be enclosed in braces. A simple change to this:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;ID=&amp;quot;{abfd9f68-47d6-4ffc-a4c5-0fa5daeaf080}&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;and the issue seems to have been solved. In the process of searching, I also came across &lt;a href="http://msdn.microsoft.com/en-us/library/ee231594.aspx" target="_blank"&gt;this article on troubleshooting SharePoint solutions&lt;/a&gt; that I’m sure will come in handy at some point. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7441724471873682692?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7441724471873682692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7441724471873682692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7441724471873682692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7441724471873682692'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/sharepoint-2010-fields-not-redeploying.html' title='SharePoint 2010 Fields not Redeploying'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-2833194282518662732</id><published>2010-05-04T12:45:00.001-04:00</published><updated>2010-05-04T12:46:27.135-04:00</updated><title type='text'>LINQ to SharePoint and Document Sets</title><content type='html'>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee535491(office.14).aspx" target="_blank"&gt;LINQ to SharePoint&lt;/a&gt; offers a great alternative to working directly with CAML queries in your SharePoint applications. Documents Sets are a convenient way to allow users to group a set of files together.&amp;#160; One of the challenges I recently had was figuring out how to deal with Document Sets within my LINQ queries. To follow these samples, you’ll want to start by creating a new document library (mine is called Resources) and enabling the Document Set content type on the library. &lt;/p&gt;  &lt;p&gt;The first step is to ensure that the “Document Sets” feature is enabled on the Site Collection:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_R3fY2PR0dPY/S-BPDT2VWQI/AAAAAAAAAGM/Vhu7YPn3RtA/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_R3fY2PR0dPY/S-BPDg50mvI/AAAAAAAAAGQ/6fZ8uMwGmSc/image_thumb%5B5%5D.png?imgmax=800" width="493" height="49" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next, create the library (or choose an existing one) and go to the advanced settings. From the advanced settings, set “Allow management of content types?” to “Yes”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_R3fY2PR0dPY/S-BPD5OVEoI/AAAAAAAAAGU/Y5_fr0X-IzE/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_R3fY2PR0dPY/S-BPEbiHugI/AAAAAAAAAGY/cgW6kuw_QdU/image_thumb%5B1%5D.png?imgmax=800" width="488" height="70" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Clicking OK will bring you back to the library settings where you can select “Add from existing site content types” in the Content Types section. Add the “Document Set” content type and click “OK.”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_R3fY2PR0dPY/S-BPEj12XqI/AAAAAAAAAGc/27GLn4rzCng/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_R3fY2PR0dPY/S-BPE2xlp9I/AAAAAAAAAGg/vW_aTebSIMs/image_thumb%5B3%5D.png?imgmax=800" width="297" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;With the document library setup, we’re ready to run &lt;a href="http://msdn.microsoft.com/en-us/library/ee538255(office.14).aspx" target="_blank"&gt;SPMetal&lt;/a&gt; to generate the entity classes that will be used by LINQ. SPMetal is run from the command line and is located in the {SharePoint Root}\bin folder:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_R3fY2PR0dPY/S-BPFlo88BI/AAAAAAAAAGk/exEur2NWPgA/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_R3fY2PR0dPY/S-BPGP29mJI/AAAAAAAAAGo/_ht-_ndgBlc/image_thumb%5B7%5D.png?imgmax=800" width="484" height="107" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;If you;re following along, you should now have a Content.cs file that can be brought into a Visual Studio project. &lt;/p&gt;  &lt;p&gt;With all the plumbing done, it’s time to write some code. Let’s start by retrieving a document set based on the title:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public ResourcesDocumentSet GetDocumentSet(string title)     &lt;br /&gt; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (Microsoft.SharePoint.Linq.DataContext ctx = new Microsoft.SharePoint.Linq.DataContext(_webUrl))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EntityList&amp;lt;ResourcesDocumentSet&amp;gt; resources = ctx.GetList&amp;lt;ResourcesDocumentSet&amp;gt;(&amp;quot;Resources&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ResourcesDocumentSet docSet = (from documentset in resources where documentset.Name == title select documentset).First&amp;lt;ResourcesDocumentSet&amp;gt;();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return docSet;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The first step is to create a DataContext and pass in the URL of the site we want to query. ResourceDocumentSet is an entity class that was generated by SPMetal. Remember that Resource was the name of the document library, thus ResourceDocumentSet is one of the entity classes generated. If you look into the generated code, the inheritance chain looks like this: ResourceDocumentSet –&amp;gt; DocumentSet –&amp;gt; DocumentCollectionFolder –&amp;gt; Folder –&amp;gt; Item. It is worth mentioning that in production, you would want to use FirstOrDefault instead of just first but the code demonstrates the concept. &lt;/p&gt;  &lt;p&gt;If you examine the ResourceDocumentSet class, you’ll see that it exposes all the properties we would expect on a list item:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_R3fY2PR0dPY/S-BPGTWYz-I/AAAAAAAAAGs/hnnW2ynL3m8/s1600-h/image%5B18%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_R3fY2PR0dPY/S-BPGv9OgZI/AAAAAAAAAGw/msCAAV-yFro/image_thumb%5B8%5D.png?imgmax=800" width="244" height="157" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;What it does not expose is any way to get at the documents inside of the Document Set. The trick here is that a Document Set is really just a wrapper around a Folder and a List Item. What we’re looking at above is basically the list item. In order to retrieve the contents of the Document Set, it is necessary to use the ScopeToFolder method:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public IQueryable&amp;lt;ResourcesDocument&amp;gt; GetDocumentsInSet(string setName)     &lt;br /&gt; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (DataContext ctx = new DataContext(_webUrl))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DocumentSet docSet = GetDocumentSet(setName); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EntityList&amp;lt;ResourcesDocument&amp;gt; documentList = ctx.GetList&amp;lt;ResourcesDocument&amp;gt;(&amp;quot;Resources&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var docSetItems = from documents in documentList.ScopeToFolder(docSet.Path + &amp;quot;/&amp;quot; + docSet.Name, true) select documents; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return docSetItems;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Building on the GetDocumentSet method we can then retrieve the contents (an EntityList of ResourceDocument) of the folder represented by the Document Set by limiting our scope to the URL of the document set (aka the folder). As you would expect, each ResourceDocument then exposes Title, Path, ID and other properties. &lt;/p&gt;  &lt;p&gt;Hopefully, these examples will save you a little time in dealing with Document Sets and LINQ to SharePoint. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-2833194282518662732?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/2833194282518662732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=2833194282518662732' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2833194282518662732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2833194282518662732'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/linq-to-sharepoint-and-document-sets.html' title='LINQ to SharePoint and Document Sets'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R3fY2PR0dPY/S-BPDg50mvI/AAAAAAAAAGQ/6fZ8uMwGmSc/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4600118205427227723</id><published>2010-05-03T13:32:00.001-04:00</published><updated>2010-05-03T13:32:26.034-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio SharePoint Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Debugging SharePoint Solutions – Given Key not Present in the Dictionary</title><content type='html'>&lt;p&gt;There is a good article on debugging SharePoint 2010 solutions &lt;a href="http://msdn.microsoft.com/en-us/library/ee231550.aspx" target="_blank"&gt;available on MSDN&lt;/a&gt;. One issue the guide does not mention is that the debugger may fail to start and complain that the Web.config could not be loaded because “The given key was not present in the dictionary.” If you come across this problem, the solution is to make sure the URL assigned to the Default zone for the Web Application’s Alternate Access Mappings matches the Site URL of the SharePoint project in Visual Studio. Using one of the other zones (like Intranet) for the URL will not work. The Default Zone and the project’s Site URL need to match. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4600118205427227723?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4600118205427227723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4600118205427227723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4600118205427227723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4600118205427227723'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/05/debugging-sharepoint-solutions-given.html' title='Debugging SharePoint Solutions – Given Key not Present in the Dictionary'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4285115815945894182</id><published>2010-04-18T19:35:00.002-04:00</published><updated>2010-04-18T20:41:29.030-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Remote Blob Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Remote Blob Storage</title><content type='html'>In MOSS 2007, many a times I came across scenarios, where I wanted to store large number of documents in a single site collection but had to split across multiple site collections due to the recommended size of site collection content database (100GB ideal for backup/restore).&lt;br /&gt;&lt;br /&gt;To address this issue, Microsoft added Remote Blob Storage(RBS) to SQL Server 2008 by allowing blob column data to store as File System files.  Though, it was theoretically possible in 2007, there was no RBS implementation.  In SPS 2010, Microsoft supports RBS OOB and has provided good documentation on the implementation (&lt;a href="http://technet.microsoft.com/en-us/library/ee748638%28office.14%29.aspx"&gt;http://technet.microsoft.com/en-us/library/ee748638%28office.14%29.aspx&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Personally, I’m very excited with this feature as it would enable to develop applications with large number of documents and high storage requirements in a single site collection.&lt;br /&gt;&lt;br /&gt;To understand the limits, I created a single server environment consisting of two web applications, one enabled for RBS and the other to store all documents in content database (NoRBS).  To avoid the task of manual document uploading, I created a document generation and uploading app. Displayed below are results taken after each upload of document (all documents were generated with 633K size):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_bD6J5Tohy5k/S8uWjjr6_lI/AAAAAAAAAWw/XVJydeBDJfM/s1600/rbs_data.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="84" src="http://2.bp.blogspot.com/_bD6J5Tohy5k/S8uWjjr6_lI/AAAAAAAAAWw/XVJydeBDJfM/s640/rbs_data.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Charting the same:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_bD6J5Tohy5k/S8uWqoOWUrI/AAAAAAAAAXA/TFGwmH58RyE/s1600/rbs_chart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_bD6J5Tohy5k/S8uWqoOWUrI/AAAAAAAAAXA/TFGwmH58RyE/s400/rbs_chart.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;With above I can approach at the conclusion that by enabling RBS, there is a potential gain of 99% of SQL Server storage (and nearly 30% in total storage).&amp;nbsp; Since documents tend to take a lot of space, this will certainly help to keep a single site collection for many SharePoint based applications.&lt;br /&gt;&lt;br /&gt;By any means these are NOT official numbers as I produced the numbers on my local system with simple settings (such as text file upload, disabled versioning, etc) to get rough estimates.  So please use them at your own risk and stress test your system to be more confident.&lt;br /&gt;&lt;br /&gt;While RBS has upside of better using SQL Server resources, it has a downside of additional maintenance (backup/restore), filesystem performance, document size, etc.  These have to be taken into consideration before designing a solution using RBS.&lt;br /&gt;&lt;br /&gt;Links to other bloggers who share their opinion on RBS:&lt;br /&gt;&lt;a href="http://www.andrewconnell.com/blog/archive/2010/03/10/sharepoint-2010-sql-server-2008-r2-amp-rbs-just-because.aspx"&gt;http://www.andrewconnell.com/blog/archive/2010/03/10/sharepoint-2010-sql-server-2008-r2-amp-rbs-just-because.aspx&lt;/a&gt; &lt;br /&gt;&lt;a href="http://blogs.msdn.com/opal/archive/2009/12/07/sharepoint-2010-beta-with-filestream-rbs-provider.aspx"&gt;http://blogs.msdn.com/opal/archive/2009/12/07/sharepoint-2010-beta-with-filestream-rbs-provider.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4285115815945894182?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4285115815945894182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4285115815945894182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4285115815945894182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4285115815945894182'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/04/remote-blob-storage.html' title='Remote Blob Storage'/><author><name>Ramu Pulipati</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_bD6J5Tohy5k/S8uWjjr6_lI/AAAAAAAAAWw/XVJydeBDJfM/s72-c/rbs_data.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3313190500221759566</id><published>2010-04-13T13:55:00.002-04:00</published><updated>2010-04-13T14:13:41.272-04:00</updated><title type='text'>BPOS SharePoint Logging Solution Available</title><content type='html'>One of the issues encountered when writing solutions for Microsoft's BPOS SharePoint offering is that access to the event log and ULS logs is not available once your application is in production.  One way around this is to write your events to a SharePoint list.  The problem, however, is that MSO still prefers that you utilize the Windows Event Log so that they can track your events using monitoring software.  So to get the best of both worlds, I have just posted a lightweight logging framework for SharePoint that logs to both seamlessly.&lt;br /&gt;&lt;br /&gt;Available today on CodePlex, the solution specifically designed for use with SharePoint on BPOS (SharePoint in the Microsoft-hosted Cloud).  The framework simply logs events to the windows event log AND to sharepoint lists.  When an event is logged, it will be written to a list in the current web (if it exists), a list in the root web of the current web application (if it exists), and the windows "Application" event log.&lt;br /&gt;&lt;br /&gt;A feature ("RDA Site Event Log") is included which creates the event log list for a particular site (Called "SharePoint Event Log").  By activating the feature at the root site of a web application, you can centrally view all events for the entire web applicaiton.  By activating the feature in any other web, event log entries local to that web will be available.&lt;br /&gt;&lt;br /&gt;If you do not activate the feature in at least the root web of your web application, you will see error messages in the event log indicating that the feature should be enabled.&lt;br /&gt;&lt;br /&gt;To view the project details and download the source code, &lt;a href="http://rdacollaboration.codeplex.com/releases/view/43518"&gt;visit our codeplex site.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3313190500221759566?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3313190500221759566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3313190500221759566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3313190500221759566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3313190500221759566'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/04/bpos-sharepoint-logging-solution.html' title='BPOS SharePoint Logging Solution Available'/><author><name>Pablo Gazmuri</name><uri>http://www.blogger.com/profile/13816131376453723760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4006039037324369474</id><published>2010-04-11T15:29:00.005-04:00</published><updated>2010-04-11T17:00:05.043-04:00</updated><title type='text'>Implementing Kerberos in Windows Server 2008</title><content type='html'>Windows Server 2008 brings significant enhancements to IIS that makes implementing Kerberos much easier than Windows Server 2003. This is particularly important for servers running SharePoint because Kerberos allows SharePoint to integrate with other services such as SQL Server Reporting Services 2005/2008, K2, etc. In this blog, I'll show you the steps for configuring and verifying Kerberos on SharePoint sites.&lt;br /&gt;&lt;br /&gt;1. Turn on "Trust for Delegation" for all SharePoint Servers using Active Directory Users and Computers. This can be done by right-clicking on the "Computer" account, clicking on "Properties", going to the "Delegation" tab and clicking on "Trust this computer for delegation to any service (Kerberos only)". You will need Domain Administrator permissions to do this.&lt;br /&gt;&lt;br /&gt;2. Turn on Kerberos for your SharePoint 3.0/2007 sites using Central Administration -&gt; Application Management -&gt; Authentication Providers. Click on the 'Default' zone, then click on 'Negotiate' and click OK.&lt;br /&gt;&lt;br /&gt;3. A new thing that needs to be taken care of is editing the config file C:\windows\system32\inetsrv\config\ApplicationHost.config on the SharePoint servers. Search and replace &lt;strong&gt;&amp;lt;windowsAuthentication enabled="false"&amp;gt;&lt;/strong&gt; with &lt;strong&gt;&amp;lt;windowsAuthentication enabled="true" useAppPoolCredentials="true"&amp;gt;&lt;/strong&gt;. This tag is found under &lt;strong&gt;system.webServer/security/authentication&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;That should be it! Your SharePoint sites are Kerberos enabled.&lt;br /&gt;&lt;br /&gt;Question: What about creating the SPNs for the Application Pool Service Accounts?&lt;br /&gt;Answer: It turns out that beginning IIS 7.0, the authentication is done by HTTP.sys which runs under the LocalSystem account regardless of which account is running the Application Pool. This takes away the need to configure SPNs.&lt;br /&gt;&lt;br /&gt;Question: How do I know whether my SharePoint site is using Kerberos rather than NTLM?&lt;br /&gt;Answer: Open a browser from another machine and connect to your SharePoint site. Then open the Security event log on your SharePoint server (NOTE: if you have more than 1 WFE in a Farm, then you'll have to check each one of them to find the one that serviced your request). Find the the newest entries with Event ID 4624 and read its contents. You should see something like the following:&lt;br /&gt;&lt;br /&gt;Log Name: Security&lt;br /&gt;Source: Microsoft-Windows-Security-Auditing&lt;br /&gt;Date: 4/8/2010 9:51:40 PM&lt;br /&gt;Event ID: 4624&lt;br /&gt;Task Category: Logon&lt;br /&gt;Level: Information&lt;br /&gt;Keywords: Audit Success&lt;br /&gt;User: N/A&lt;br /&gt;Computer: SHAREPOINTWFE1.acme.local&lt;br /&gt;Description:&lt;br /&gt;An account was successfully logged on.&lt;br /&gt;&lt;br /&gt;Subject:&lt;br /&gt;Security ID: NULL SID&lt;br /&gt;Account Name: -&lt;br /&gt;Account Domain: -&lt;br /&gt;Logon ID: 0x0&lt;br /&gt;&lt;br /&gt;Logon Type: 3&lt;br /&gt;&lt;br /&gt;New Logon:&lt;br /&gt;Security ID: &lt;strong&gt;ACME\UserID&lt;/strong&gt;&lt;br /&gt;Account Name: &lt;strong&gt;UserID&lt;/strong&gt;&lt;br /&gt;Account Domain: ACME&lt;br /&gt;Logon ID: 0xea7fe&lt;br /&gt;Logon GUID: {5079b0ba-7e5a-02a7-e153-d5fa958949bb}&lt;br /&gt;&lt;br /&gt;Process Information:&lt;br /&gt;Process ID: 0x0&lt;br /&gt;Process Name: -&lt;br /&gt;&lt;br /&gt;Network Information:&lt;br /&gt;Workstation Name:&lt;br /&gt;Source Network Address: &lt;strong&gt;192.168.117.130&lt;/strong&gt;&lt;br /&gt;Source Port: 49251&lt;br /&gt;&lt;br /&gt;Detailed Authentication Information:&lt;br /&gt;Logon Process: &lt;strong&gt;Kerberos&lt;/strong&gt;&lt;br /&gt;Authentication Package: &lt;strong&gt;Kerberos&lt;/strong&gt;&lt;br /&gt;Transited Services: -&lt;br /&gt;Package Name (NTLM only): -&lt;br /&gt;Key Length: 0&lt;br /&gt;&lt;br /&gt;This event is generated when a logon session is created. It is generated on the computer that was accessed.&lt;br /&gt;&lt;br /&gt;The subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.&lt;br /&gt;&lt;br /&gt;The logon type field indicates the kind of logon that occurred. The most common types are 2 (interactive) and 3 (network).&lt;br /&gt;&lt;br /&gt;The New Logon fields indicate the account for whom the new logon was created, i.e. the account that was logged on.&lt;br /&gt;&lt;br /&gt;The network fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.&lt;br /&gt;&lt;br /&gt;The authentication information fields provide detailed information about this specific logon request.&lt;br /&gt;- Logon GUID is a unique identifier that can be used to correlate this event with a KDC event.&lt;br /&gt;- Transited services indicate which intermediate services have participated in this logon request.&lt;br /&gt;- Package name indicates which sub-protocol was used among the NTLM protocols.&lt;br /&gt;- Key length indicates the length of the generated session key. This will be 0 if no session key was requested.&lt;br /&gt;&lt;br /&gt;Question: Under what circumstances will Kerberos won't work?&lt;br /&gt;Answer: The most obvious one that I've seen is when a user accesses a site using IE 6.0. There are lots of issues and workarounds posted on the Microsoft site. But I've never gotten a machine with IE 6.0 working successfully using Kerberos. I highly recommend upgrading everyone to IE 7.0 or IE 8.0.&lt;br /&gt;&lt;br /&gt;Hope this helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4006039037324369474?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4006039037324369474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4006039037324369474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4006039037324369474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4006039037324369474'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/04/implementing-kerberos-in-windows-server.html' title='Implementing Kerberos in Windows Server 2008'/><author><name>Deepak Gupta</name><uri>http://www.blogger.com/profile/07751973084135910957</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7683980683794802674</id><published>2010-04-09T15:15:00.002-04:00</published><updated>2010-04-09T18:43:34.165-04:00</updated><title type='text'>Step by step to setup SharePoint 2010 beta for development use</title><content type='html'>Before starting the setup, make sure to review Microsoft documentation (MS has comprehensive list) at &lt;a href="http://technet.microsoft.com/en-us/library/cc262485%28office.14%29.aspx"&gt;http://technet.microsoft.com/en-us/library/cc262485%28office.14%29.aspx&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here are the steps I followed to setup a Windows 2008 R2 system from scratch.&lt;br /&gt;&lt;br /&gt;• Install Windows 2008 R2 x64&lt;br /&gt;&lt;br /&gt;• Activate desired roles on Windows 2008 such as web server, application server, &lt;br /&gt;DNS Server (needed if you want to enable AD domain controller),  etc&lt;br /&gt;&lt;br /&gt;• Activate features desktop experience,  XPS Viewer, WLAN Service to use wireless card, PowerShell ISE, etc &lt;br /&gt;&lt;br /&gt;• Change Computer name to your desired name&lt;br /&gt;&lt;br /&gt;• If your system is a standalone system or VPC, I would setup AD domain controller to import and test user profiles from AD.  You can set AD domain using adpromo.exe&lt;br /&gt;&lt;br /&gt;• Ensure .NET 3.5 SP1 installed and do Windows Update&lt;br /&gt;&lt;br /&gt;• Hot fix for WCF authentication token update:  &lt;a href="http://go.microsoft.com/fwlink/?LinkID=166231"&gt;http://go.microsoft.com/fwlink/?LinkID=166231&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;• Hot fix for BCS.  Install:  &lt;a href="http://code.msdn.microsoft.com/KB976462/Release/ProjectReleases.aspx?ReleaseId=3571"&gt;http://code.msdn.microsoft.com/KB976462/Release/ProjectReleases.aspx?ReleaseId=3571&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;• Install SQL Server 2008 R2  Beta (or SQL Server 2008 + SP2 + Cumulative Update 2)&lt;br /&gt;&lt;br /&gt;• Hot fix for REST. Install &lt;a href="http://go.microsoft.com/fwlink/?LinkId=159780"&gt;http://go.microsoft.com/fwlink/?LinkId=159780&lt;/a&gt; (more info  &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2010/01/21/introduction-to-querying-lists-with-rest-and-listdata-svc-in-sharepoint-2010.aspx"&gt;http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2010/01/21/introduction-to-querying-lists-with-rest-and-listdata-svc-in-sharepoint-2010.aspx&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;• Install SharePoint 2010 Beta Prerequisites&lt;br /&gt;&lt;br /&gt;• Install SharePoint 2010 Beta (select complete installation)&lt;br /&gt;&lt;br /&gt;• Configure using central admin config wizard (its ok if the wizard does not succeed setting up all service applications - you can fix them later).&lt;br /&gt;&lt;br /&gt;• Install VS2010 (make sure to select custom option and remove SQL Server express), SharePoint designer 2010, Office 2010 Beta, Visio 2010&lt;br /&gt;&lt;br /&gt;• If you are using other windows account than built-in windows administrator  account, mark your application shortcuts to always "Run as administrator" for  Windows Explorer, Internet Explorer 8, FireFox, PowerShell, PowerShell ISE, SharePoint designer and Visual studio.  Otherwise you may see some functionality loss (I noticed it on Internet Explorer).  To mark "Run as Administrator", click application shortcut properties, advanced button and check "Run as administrator" and click OK.&lt;br /&gt;&lt;br /&gt;• Load SharePoint 2010 modules in PowerShell by default: &lt;a href="http://www.shillier.com/archive/2010/01/18/setting-up-powershell-ise-for-sharepoint-2010.aspx"&gt;http://www.shillier.com/archive/2010/01/18/setting-up-powershell-ise-for-sharepoint-2010.aspx&lt;/a&gt; (or alternatively use from Start menu -&gt; Microsoft SharePoint 2010 Products -&gt; SharePoint 2010 Management Shell)&lt;br /&gt;&lt;br /&gt;• Enable Sandbox solutions on a domain controller: &lt;a href="http://blogs.objectsharp.com/CS/blogs/max/archive/2010/01/15/running-sharepoint-2010-on-a-domain-controller.aspx"&gt;http://blogs.objectsharp.com/CS/blogs/max/archive/2010/01/15/running-sharepoint-2010-on-a-domain-controller.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;• Ensure all desired windows services are started - Start "Microsoft SharePoint Foundation User Code Service" service if not already started&lt;br /&gt;&lt;br /&gt;• Ensure all Service Applications are running and associated with web applications - Attach User Profile web application if not already associated&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7683980683794802674?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7683980683794802674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7683980683794802674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7683980683794802674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7683980683794802674'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/04/step-by-step-to-setup-sharepoint-2010.html' title='Step by step to setup SharePoint 2010 beta for development use'/><author><name>Ramu Pulipati</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-4040838400793971385</id><published>2010-04-06T22:24:00.000-04:00</published><updated>2010-04-06T22:24:48.877-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Publications'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>Mike Walsh's new SharePoint 2010 Book - Scheduled for Release</title><content type='html'>Looks like Mike Walsh's book has been listed on Amazon:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Teach-Yourself-SharePoint-Foundation-Hours/dp/0672333163/ref=sr_1_4?ie=UTF8&amp;amp;s=books&amp;amp;qid=1270606756&amp;amp;sr=8-4"&gt;http://www.amazon.com/Teach-Yourself-SharePoint-Foundation-Hours/dp/0672333163/ref=sr_1_4?ie=UTF8&amp;amp;s=books&amp;amp;qid=1270606756&amp;amp;sr=8-4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It will be released on July 12, 2010.&lt;br /&gt;&lt;br /&gt;I had the pleasure of being the Technical Editor for this publication!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-4040838400793971385?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/4040838400793971385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=4040838400793971385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4040838400793971385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/4040838400793971385'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/04/mike-walshs-new-sharepoint-2010-book.html' title='Mike Walsh&apos;s new SharePoint 2010 Book - Scheduled for Release'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-6404202454135667423</id><published>2010-03-25T08:18:00.037-04:00</published><updated>2010-03-29T21:38:52.914-04:00</updated><title type='text'>Read a file from a SharePoint document library using HttpHandler</title><content type='html'>&lt;span style="FONT-WEIGHT: bold;font-family:arial;" &gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I recently worked on a project to read a file from SharePoint document libraries securely using a custom page. While working on the project, I developed a reusable module to retrieve a file securely from SharePoint server. In this blog, I will explain how efficiently and effectively one can implement such logic using HTTPHandler. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-family:arial;" &gt;Scenario&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;First of all, let’s understand why we need to create a custom page to retrieve a document. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Can’t we go to a document library and open a document needed? Yes, we can if we have relatively small numbers of documents in a library. If a library has thousands of documents, then we will spend more time finding a right one. Additionally, to open a document from a document library, a user must have read permission on a document. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;For an instance, Human Resources (HR) department requests IT to create a document library to store employees’ year-end reviews. HR suggests an employee must not be able to read another employee’s reviews from the library. At the same token, a manager may have rights to view their employees’ reviews. Additionally, the reviews will be stored in a separate document library for each year.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;In the above scenario, maintaining permission for thousands of employee reviews would be nightmare. Alternatively, we can provide a custom page with a list of documents for a specific employee using a custom query. This custom page will be more users friendly because users will see only related documents and will save time finding them. Next, we will understand why we should create HttpHandler.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-family:arial;" &gt;Why implement HttpHandler?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Initially, I decided to use a DataGrid item command event (occurs when a button in a DataGrid is clicked) to return a file through the HTTP response stream. The approach is most common in ASP.NET development to return a file from a server. I encountered two issues here: 1) integration with SharePoint response stream and 2) tightly coupled code for a specific SharePoint document library. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;While I was figuring out an alternate solution, my colleague Ted Calhoon suggested using HttpHandler to return a file instead of using the response stream. Guess what, using HTTP handler, I was not only able to decouple my logic, but I was able to create a reusable logic to return any document from any document library on any SharePoint site. One more benefit, we can use HTTPHandler in any non-SharePoint website. So, let’s start dig in to it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;Step 1: Create a HTTP Handler.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;In this step, we will create a HTTP handler demo.ashx file with no code behind. The handler takes three query string parameters, a list GUID, an item GUID, and a site URL. Since query string does not accept “http://” in query parameters, we will remove “http://” before passing a site URL parameter to the http handler. Additionally, we will use ‘Shared Documents’ library for demonstration purpose. Finally, key steps building Http Handler are shown as follow:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Step 1a:&lt;/span&gt; Create a Demo.ashx with no code behind file.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Step 1b:&lt;/span&gt; Add SharePoint assembly reference &lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral,&lt;br /&gt;PublicKeyToken=71e9bce111e9429c"%&amp;gt;&lt;/span&gt;&lt;/pre&gt;before &lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ WebHandler Language="C#" Class="YourClassName”%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Step 1c:&lt;/span&gt; In ProcessRequest function, write code to accept query strings values, and get SPFile object from a document library.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;- Get query string parameters, listguid, itemguid, and url without “http://”.&lt;/span&gt;&lt;br /&gt;For ex. &lt;span class="kwrd"&gt;string&lt;/span&gt; listguid = context.Request.QueryString[&lt;span class="str"&gt;"listguid"&lt;/span&gt;];&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;- Get file from a document library using listguid and itemguid.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul  style="font-family:arial;"&gt;&lt;li&gt;&lt;pre class="csharpcode"&gt;SPFile tempFile = site.Lists[&lt;span class="kwrd"&gt;new&lt;/span&gt; Guid(listguid)].Items[&lt;span class="kwrd"&gt;new&lt;/span&gt; Guid(itemguid)].File;&lt;/pre&gt;&lt;li&gt;NOTE: You need to get a valid SPWeb object. You may need to run the code above with &lt;span style="FONT-STYLE: italic; FONT-WEIGHT: bold"&gt;elevated privileges.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Step 1d:&lt;/span&gt; Write file to response stream. Please note, the example shown here will only return word files successfully. If a document library has different types of documents, word, excel, and pdf, then you need to set context.Response.ContentType based on a document type.&lt;/span&gt; &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;context.Response.ClearContent();&lt;br /&gt;context.Response.ClearHeaders();&lt;br /&gt;context.Response.AppendHeader(&lt;span class="str"&gt;"Content-Disposition"&lt;/span&gt;, &lt;span class="str"&gt;"attachment; filename= "&lt;/span&gt; + sFileName);&lt;br /&gt;context.Response.ContentType = &lt;span class="str"&gt;"application/msword"&lt;/span&gt;;&lt;br /&gt;context.Response.BinaryWrite(obj);&lt;br /&gt;context.Response.Flush();&lt;br /&gt;&lt;/pre&gt;&lt;span style="FONT-STYLE: italic"&gt;Step 2: Build a user control (ASCX) file.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;In this part, we create a user control, demo.ascx, with no code behind. We add a DataGrid and a label controls in the user control file to display documents in the library. Additionally, we create a custom class, DocListItem, to store documents’ details as follow: &lt;/span&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DocLibItem&lt;br /&gt;{&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FileName { get; set; }&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ModifiedBy { get; set; }&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DateModified { get; set; }&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ListGuid { get; set; }&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ItemGuid { get; set; }&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; SiteUrl { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-family:arial;"&gt;Next, we read items from the ‘Shared Documents’ library and stores in a list of DocLibItem class. Alternatively, we may use SPQuery or SPSiteDataQuery object to read specific documents from one or multiple libraries, if needed. Moreover, we store list GUID, item GUID, and site URL (excluding ‘http://’) in a list of DocLibItem. The subsequent code will go in the page load event handler of the user control.&lt;/span&gt; &lt;pre class="csharpcode"&gt;SPDocumentLibrary list = web.Lists[&lt;span class="str"&gt;"Shared Documents"&lt;/span&gt;] &lt;span class="kwrd"&gt;as&lt;/span&gt; SPDocumentLibrary;             &lt;br /&gt;List&amp;lt;DocLibItem&amp;gt; docLibItems= &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;DocLibItem&amp;gt;();&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPListItem row &lt;span class="kwrd"&gt;in&lt;/span&gt; list.Items)&lt;br /&gt;{&lt;br /&gt;    DocLibItem docLibItem  = &lt;span class="kwrd"&gt;new&lt;/span&gt; DocLibItem();&lt;br /&gt;&lt;br /&gt;    docLibItem.FileName = row[&lt;span class="str"&gt;"Name"&lt;/span&gt;].ToString();&lt;br /&gt;    docLibItem.ModifiedBy = row[&lt;span class="str"&gt;"Modified By"&lt;/span&gt;].ToString();&lt;br /&gt;    docLibItem.DateModified =.ToDateTime(row[&lt;span class="str"&gt;"Modified"&lt;/span&gt;]).ToString(&lt;span class="str"&gt;"MM/dd/yyyy"&lt;/span&gt;);&lt;br /&gt;    docLibItem.ListGuid = list.ID.ToString();&lt;br /&gt;    docLibItem.ItemGuid = row.UniqueId.ToString();&lt;br /&gt;    docLibItem.SiteUrl = sSite.Replace(&lt;span class="str"&gt;"http://"&lt;/span&gt;,String.Empty);&lt;br /&gt;    docLibItems.Add(docLibItem);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Finally, we bind docLibItems list collection to a datagrid.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;HTML code to call demo.ashx module (we will place a hyperlink in the datagrid): &lt;/p&gt;&lt;/span&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:HyperLink&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="HyperLink1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;NavigateUrl&lt;/span&gt;&lt;span class="kwrd"&gt;='&amp;lt;%# "../../_layouts/demo/demo.ashx?listguid=" + DataBinder.Eval(Container, "DataItem.ListGuid") + "&amp;amp;itemguid=" + DataBinder.Eval(Container, "DataItem.ItemGuid") + "&amp;amp;siteurl=" + DataBinder.Eval(Container, "DataItem.SiteUrl")%&amp;gt;'&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="View"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:HyperLink&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="FONT-STYLE: italic"&gt;Step 3: Deploy files to SharePoint server.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Copy demo.ascx file to C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\demo folder.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;Copy demo.ashx file to C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\demo folder.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="FONT-STYLE: italic"&gt;Step4: Integrate the user control with your SharePoint site.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;In this final section, we modify a SharePoint page using SharePoint designer. We need to add two lines in the page where we want to deploy new user control. &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;Line 1: add at top of the page&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;. &lt;/div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register tagprefix="demo" tagname="GetFilesDemo" src="~/_controltemplates/blogdemos/demo.ascx" %&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;Line 2: add in the HTML section of the page&lt;/span&gt;&lt;span style="font-family:arial;"&gt;. &lt;/span&gt;&lt;/div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;demo:GetFilesDemo&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="demoGetFiles"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;demo:GetFilesDemo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;At the end, when we click on a hyperlink, we should see file a download dialog box (Image 1). &lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Image 1: A file receiver dialog pops up when you click ‘View Document’ &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Ur0p4yjdZqk/S7CjBPw_SFI/AAAAAAAAAAc/M_jMPUyjmQM/s1600/New+Bitmap+Image.bmp"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 210px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5454038390552873042" border="0" alt="" src="http://2.bp.blogspot.com/_Ur0p4yjdZqk/S7CjBPw_SFI/AAAAAAAAAAc/M_jMPUyjmQM/s320/New+Bitmap+Image.bmp" /&gt;&lt;/a&gt; In conclusion, HttpHandler allows us to create reusable module to retrieve a file from SharePoint document library. Furthermore, the handler can be integrated with different client interface such as a Silverlight application or other web technology very easily. Finally, a custom page can improve a usability and accessibility of document library if the library contains thousands of documents.&lt;br /&gt;&lt;p&gt;Technologies: SharePoint 2007/2010, ASP.NET &lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-6404202454135667423?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/6404202454135667423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=6404202454135667423' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6404202454135667423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6404202454135667423'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/03/read-file-from-sharepoint-document.html' title='Read a file from a SharePoint document library using HttpHandler'/><author><name>Samir Patel</name><uri>http://www.blogger.com/profile/00927462561333894437</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Ur0p4yjdZqk/S7CjBPw_SFI/AAAAAAAAAAc/M_jMPUyjmQM/s72-c/New+Bitmap+Image.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-5684452720550311454</id><published>2010-03-20T22:02:00.001-04:00</published><updated>2010-03-20T22:08:10.578-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 Logical Architecture</title><content type='html'>&lt;p&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In the &lt;a href="http://rdacollab.blogspot.com/2010/01/sharepoint-2010-service-architecture.html"&gt;previous blog in this series&lt;/a&gt; I introduced the new service architecture of SharePoint 2010. There are several changes and understanding these changes will drive both the logical and physical topologies of SharePoint 2010. When I refer to the logical topology, this means the logical organization of SharePoint services that will be used to satisfy the business needs. The physical topology is the installation and configuration of those services. The goal of both topologies it to provide a solution that is:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Scalable&lt;/li&gt;&lt;li&gt;Secure&lt;/li&gt;&lt;li&gt;Maintainable&lt;/li&gt;&lt;li&gt;Has high performance &lt;/li&gt;&lt;li&gt;Fault tolerant&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;In this blog I will take these themes and apply them to various way in which SharePoint 2010 can be configured to support the logical topology. I will go into the physical topology in the next part.&lt;/p&gt;&lt;p&gt;&lt;b&gt;SharePoint 2010 Changes&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The biggest change in SharePoint 2010 is the flexibility you now have with the configuration and re-use of services. In the &lt;a href="http://rdacollab.blogspot.com/2010/01/sharepoint-2010-service-architecture.html"&gt;initial blog about services&lt;/a&gt;, I identified several rules that you should know which will directly apply to how the logical architecture of SharePoint 2010 would be done. Here they are again:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Multiple instances of the same Service Applications can be initiated within a farm.&lt;/li&gt;&lt;li&gt;Service Applications are shared across Web Applications within a farm by Service Group.&lt;/li&gt;&lt;li&gt;Some Service Applications can be shared across multiple farms while others cannot.&lt;/li&gt;&lt;li&gt;Service Groups can logically contain Service Applications that reside in other farms.&lt;/li&gt;&lt;li&gt;Web Applications have the flexibility to use multiple instances of the same type of Service Application (regardless of which farm hosts that service).&lt;/li&gt;&lt;li&gt;Service Applications can have its data partitioned and only accessible to specific subscribers.&lt;/li&gt;&lt;li&gt;Service Groups can be used to logically scale for performance, security and scalability.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;In the following sections I have indentified some common scenarios for configuration of SharePoint 2010 logical topology based on these rules. It will not be possible in this blog to go over every permutation these rules.&lt;/p&gt;&lt;p&gt;As well best practices for the configuration of these services is still not very well known other than the information is being provided to us by Microsoft and our experiences with SharePoint 2007. However you should be able to take these examples and use them as a way to start doing some early planning for implementation SharePoint 2010. &lt;/p&gt;&lt;p&gt;&lt;i&gt;Side Note – If you are familiar with some of the logical topology diagrams that are provided by Microsoft they usually include Application Pools in those diagrams. I have decided to exclude that from these diagrams to make understanding the logical topology simple. Albeit understanding how the Applications Pools are incorporated into the topology is extremely important (security and fault tolerance). Usually when architecting a SharePoint topology I start with understanding how I want to organize service to achieve the best possible performance, security and redundancy. Once I have that organized, I will then use Application Pools to help attain those tenants.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Single Farm Single Service Group&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This first topology depicts a standard SharePoint farm that has a single service group that is shared across all types of sites. Any time new sites are added within this farm, they will have access to all of the services that are available in the Default Application Group.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_vc1OGKotMCU/S6V94jiFGHI/AAAAAAAAAa8/gdcjqhw3X2U/s1600-h/Untitled%201%5B4%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Untitled 1" border="0" alt="Untitled 1" src="http://lh3.ggpht.com/_vc1OGKotMCU/S6V94xOSxII/AAAAAAAAAbA/R1tuTLDmHFQ/Untitled%201_thumb%5B2%5D.png?imgmax=800" width="678" height="344" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Advantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Most simple architecture to implement.&lt;/li&gt;&lt;li&gt;All web applications added into the farm have immediate access to all the available services.&lt;/li&gt;&lt;li&gt;All services are grouped together and can be managed centrally.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Does not allow for isolation of data used within the services. This means that all websites have access to each other’s data.&lt;/li&gt;&lt;li&gt;Cannot create dedicate services for specific web applications.&lt;/li&gt;&lt;li&gt;Will not scale well because publishing and collaboration would be occurring in the same farm.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Recommendations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;This is an initial place to start as your configuration for SharePoint 2010. It can always be scaled or reconfigured to support more demand.&lt;/li&gt;&lt;li&gt;It would be recommended to make sure that each service that can be partitioned be made partitioned. Service partition is introduced in the &lt;a href="http://rdacollab.blogspot.com/2010/01/sharepoint-2010-service-architecture.html"&gt;first part of this series&lt;/a&gt;. This is important because it not possible to partition a service after has been created. If services are partitioned from the beginning you have the ability to create some isolation of data between site collections.&lt;/li&gt;&lt;li&gt;These sites could all be installed on a single web application but that is not recommended. It is better to created dedication Web Applications for each running within their own application pool. This provides long-term scalability.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Single Farm Multiple Service Groups&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This second example is a reconfiguration of the previous farm; the difference is that multiple Application groups have been created. There is a Default Application Group which has some of the core Service Applications that can be used by all the sites. Some sites, however, will have dedicated services. You will want to have dedicated services for scalability, performance and security reasons and this will be covered later on from a physical perspective.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_vc1OGKotMCU/S6V95IXlNzI/AAAAAAAAAbE/Ecy9NH0DQPM/s1600-h/Untitled%202%5B4%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Untitled 2" border="0" alt="Untitled 2" src="http://lh4.ggpht.com/_vc1OGKotMCU/S6V95p8YBgI/AAAAAAAAAbI/LNFaa1DhDXE/Untitled%202_thumb%5B2%5D.png?imgmax=800" width="716" height="566" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Observations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;First thing that is interesting about this configuration is you see the Managed Metadata Service is configured into each application group. One interesting thing we will see with SharePoint 2010 is better ability to manage the Information Architecture, a key ingredient for Governance. We now have the ability to create reusable Information Architectures across sites and farms as well as created dedicated ones. &lt;/li&gt;&lt;li&gt;Second you will notice that Search has been centralized as part of the default application group and has been made a resource to all the sites. This is because it is a resource intensive process and it is not likely you will be creating dedicated search farms for a specific site. Note that FAST search cannot be used in this manner. FAST can either be used behind the firewall or outside but the same servers cannot be used for both.&lt;/li&gt;&lt;li&gt;Third application services have been distributed and dedicated. For instance Excel Services, BCS, Access Service, etc. are broken out.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Advantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Supports the ability for multiple goals to be met in the same farm.&lt;/li&gt;&lt;li&gt;Provides the ability to have better isolation of services. This provides the ability to have a granular implementation that better support scalability, performance and security.&lt;/li&gt;&lt;li&gt;Allows for divisional, department, or program administration.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Complex configuration to manage.&lt;/li&gt;&lt;li&gt;Requires more Governance and administration.&lt;/li&gt;&lt;li&gt;Will require more hardware/virtual resources to host.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Recommendations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;This configuration is good for a small SharePoint implementation within a department, division or business unit.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Multi-Farm&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In this farm configuration we have broken it out and created several independent SharePoint farms that still use central services farm.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_vc1OGKotMCU/S6V954CyQpI/AAAAAAAAAbM/XOxeWLyIpX4/s1600-h/Untitled%203%5B3%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Untitled 3" border="0" alt="Untitled 3" src="http://lh4.ggpht.com/_vc1OGKotMCU/S6V96Ati6YI/AAAAAAAAAbQ/oPRLLfKJYmA/Untitled%203_thumb%5B1%5D.png?imgmax=800" width="804" height="394" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Observations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Sites have been separated into dedicated farms based on usage such as public internet, extranet, internet and intranet.&lt;/li&gt;&lt;li&gt;Each farm has dedicated application groups of services that specific to their use.&lt;/li&gt;&lt;li&gt;All the farms have access to shared services in central services farm.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Advantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;There is a clear separation between the sites by placing them in dedicated farms. This is very important because publishing farms and collaboration farms have been separated.&lt;/li&gt;&lt;li&gt;Organizations can be segregated from each other and prevents the initiatives of one from interfering with the initiatives of another.&lt;/li&gt;&lt;li&gt;Farms can be configured with service groups that are specific to their needs.&lt;/li&gt;&lt;li&gt;Central services can still be shared across farms where it makes sense.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A more complex configuration that requires more considerable time to administer and govern.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Recommendations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;This is an enterprise farm configuration.&lt;/li&gt;&lt;li&gt;This configuration should be implemented when a company has the need to optimize administration and hosting at the enterprise level.&lt;/li&gt;&lt;li&gt;This configuration is needed when data and services need to be isolated but there is still opportunity for reuse.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Multi-Farm with Application Service Partitioning&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This farm configuration introduces service partitioning into the pervious diagram. Service partition is introduced in the &lt;a href="http://rdacollab.blogspot.com/2010/01/sharepoint-2010-service-architecture.html"&gt;first part of this series&lt;/a&gt;. It is recommended that all services be partitioned when they are initially set up, even if one partitioned is only used. It is not possible to change a service to allow for partitioning after it has been started in an un-partitioned state.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_vc1OGKotMCU/S6V96lO71VI/AAAAAAAAAbU/d91wntl74rw/s1600-h/Untitled%204%5B3%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Untitled 4" border="0" alt="Untitled 4" src="http://lh6.ggpht.com/_vc1OGKotMCU/S6V97AhcWfI/AAAAAAAAAbY/JJ_mPvi_V0U/Untitled%204_thumb%5B1%5D.png?imgmax=800" width="787" height="383" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Observations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;In this diagram you will see in Farm A both the Managed Metadata and Business Connectivity Services have been partitioned. Others could have but just selected these for discussion. Now Farms B through E and utilize partitions that are just for them and they will have isolation.&lt;/li&gt;&lt;li&gt;Notice in Farm D we were able to remove those services from the configuration. This makes the management of that farm less complex.&lt;/li&gt;&lt;li&gt;Notice in Farm E we kept the Managed Metadata service. There is nothing from stopping that and can still be considered completely legitimate. For instance the administrator in Farm C does not have access to Farm A, and all they are using from Farm A is a partition of Managed Metadata that all the farms are using. If that is the case, they may want to still have a Managed Metadata service in Farm C so that they can make tactical additions to the Information Architecture.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Advantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Provides even more granularity and isolation of data management within SharePoint 2010.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Again an even more complex scenario for managing services for an enterprise farm.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Recommendations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Using service partitioning must be a strategy considered when setting up an enterprise SharePoint 2010 farm.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Hosted Partitioned Farm&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The last farm configuration I will introduce to you is the concept of a completely hosted farm. This is a very interesting scenario because you were not empowered to do this very well with SharePoint 2007. Some SharePoint service companies provided SharePoint hosted solutions but given what was available in SharePoint 2007. Now with SharePoint 2010 and Microsoft Azure those limitations have been removed.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_vc1OGKotMCU/S6V97ZgB3YI/AAAAAAAAAbc/W7jEnWr9FSM/s1600-h/Untitled%205%5B3%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Untitled 5" border="0" alt="Untitled 5" src="http://lh6.ggpht.com/_vc1OGKotMCU/S6V97o7qjcI/AAAAAAAAAbg/x9uubve7fRk/Untitled%205_thumb%5B1%5D.png?imgmax=800" width="829" height="383" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Observations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;This scenario should not just be considered for providing SharePoint 2010 hosted solutions by a services company. A company itself can consider creating a solution like this for creating on demand solutions for provisioning full farms in a rapid fashion.&lt;/li&gt;&lt;li&gt;This scenario would also make sense for a parent company that has many subsidiary companies that they want to service in an economical fashion.&lt;/li&gt;&lt;li&gt;As you will notice this approach heavily uses service partitioning. The goal is to make the farms as lightweight as possible.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Advantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Utilizes many of the enterprise best practices discussed so far.&lt;/li&gt;&lt;li&gt;Since partitioning is utilized, there is isolation of data between farms.&lt;/li&gt;&lt;li&gt;Governance and administration is centralized into a single location and is not spread across farms.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Because all services are centralized, it is not possible to create customizations at the farm level. This means that if a farm has a special functional, performance or security requirement it may be hard to support that requirement.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Recommendations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If you are creating a hosted solution and the expectations can be set ahead of time this is a good approach. However this is very hard to do and more often than not there will be requirements that will require dedicated services within the farms. It is ok to set out with this in mind but you must remain flexible to support an architecture like the one in the previous section.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;What’s Next&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In the next part of this series we will continue this line of discussion but for the physical topology of SharePoint 2010. We will focus on what is a small, medium and large farms.&lt;/p&gt;&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Topologies for SharePoint Server 2010 - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FD686CBB-8401-4F25-B65E-3CE7AA7DBEAB&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=FD686CBB-8401-4F25-B65E-3CE7AA7DBEAB&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Services in SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=B9CA7745-FFA4-43CA-A638-E1AD868187CE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=B9CA7745-FFA4-43CA-A638-E1AD868187CE&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Cross-farm Services in SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5141C91C-0922-44FC-AAF4-64C5156209EF&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=5141C91C-0922-44FC-AAF4-64C5156209EF&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Hosting Environments for SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=326845D1-95DB-4E55-B65A-21850S9DEBE24&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=326845D1-95DB-4E55-B65A-21850S9DEBE24&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Post orginially written by RDAer Jason Apergis at &lt;a href="http://www.k2distillery.com/"&gt;MOSS &amp;amp; K2 Distillery&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-5684452720550311454?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/5684452720550311454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=5684452720550311454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5684452720550311454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5684452720550311454'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/03/sharepoint-2010-logical-architecture.html' title='SharePoint 2010 Logical Architecture'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_vc1OGKotMCU/S6V94xOSxII/AAAAAAAAAbA/R1tuTLDmHFQ/s72-c/Untitled%201_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7747598477974929113</id><published>2010-02-02T07:53:00.001-05:00</published><updated>2010-02-02T08:37:38.497-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VM'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008 R2 CTP'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Mode'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerPivot'/><title type='text'>Creating a SharePoint 2010  VM with SQL Server 2008 R2 CTP</title><content type='html'>Yesterday I posted a blog entry on our BI blog that steps through the process of building a SharePoint 2010 image using SQL Server 2008 R2 including PowerPivot (Analysis Services in Integrated mode).&lt;br /&gt;&lt;br /&gt;You can find the post &lt;a href="http://bisqlserver.blogspot.com/2010/02/creating-sharepoint-2010-business.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7747598477974929113?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7747598477974929113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7747598477974929113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7747598477974929113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7747598477974929113'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/02/creating-sharepoint-2010-vm-with-sql.html' title='Creating a SharePoint 2010  VM with SQL Server 2008 R2 CTP'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-2690281100561877254</id><published>2010-02-01T11:02:00.001-05:00</published><updated>2010-02-01T11:02:58.630-05:00</updated><title type='text'>SharePoint 2007 Ate My Breadcrumbs</title><content type='html'>&lt;p&gt;For a recent project my team created a process to programmatically generate new sites inside SharePoint 2007.&amp;#160; As it turns out this is pretty simple and can be accomplished with the method: SPWeb.Webs.Add.&amp;#160; You can find a good write-up of using this method &lt;a href="http://msdn.microsoft.com/en-us/library/aa973248.aspx#sharepointobjmodel__spwebobjects"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;However, if you create a site in this manner you will notice the breadcrumbs do not show up.&amp;#160; This can be a major problem if you counted on breadcrumbs for site navigation.&amp;#160; Thankfully, this problem is easily fixed by adding the following line of code. &lt;/p&gt;  &lt;p&gt;newSPWeb.UseShared = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/p&gt;  &lt;p&gt;Don’t worry if you have already created lots of sites, this setting can be applied after they have been created.&amp;#160; Just iterate through the sites and set this property.&lt;/p&gt;  &lt;p&gt;Here is the full code for creating the site and ensuring that your breadcrumbs appear:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; WebsAddNoLeak(&lt;span class="kwrd"&gt;string&lt;/span&gt; strWebUrl)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite siteCollection = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(&lt;span class="str"&gt;&amp;quot;http://moss&amp;quot;&lt;/span&gt;))&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = siteCollection.OpenWeb())&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb addedWeb = web.Webs.Add(strWebUrl))&lt;br /&gt;            {&lt;br /&gt;                addedWeb.UseShared = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        } &lt;span class="rem"&gt;// SPWeb object web.Dispose() automatically called.&lt;/span&gt;&lt;br /&gt;    }  &lt;span class="rem"&gt;// SPSite object siteCollection.Dispose() automatically called.&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-2690281100561877254?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/2690281100561877254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=2690281100561877254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2690281100561877254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2690281100561877254'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/02/sharepoint-2007-ate-my-breadcrumbs.html' title='SharePoint 2007 Ate My Breadcrumbs'/><author><name>Andrew Crowder</name><uri>http://www.blogger.com/profile/03742717900986525365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7701911206886112523</id><published>2010-01-29T09:05:00.001-05:00</published><updated>2010-01-29T09:05:42.333-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 Beta VPC</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;I was talking with someone in the community and they pointed this resource out to me.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It is called the "2010 Information Worker Demonstration Virtual Machine (Beta)" and you can download it from here - &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0c51819b-3d40-435c-a103-a5481fe0a0d2"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0c51819b-3d40-435c-a103-a5481fe0a0d2&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Look at all the cool stuff that is preconfigured with and ready to go.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Windows Server 2008 SP2 Standard Edition x64, running as an Active Directory Domain Controller for the "CONTOSO.COM" domain with DNS and WINS &lt;/li&gt;&lt;li&gt;Microsoft SQL Server 2008 SP2 Enterprise Edition with Analysis, Notification, and Reporting Services &lt;/li&gt;&lt;li&gt;Microsoft Office Communication Server 2007 R2 &lt;/li&gt;&lt;li&gt;Visual Studio 2010 Beta 2 Ultimate Edition &lt;/li&gt;&lt;li&gt;Microsoft SharePoint Server 2010 Enterprise Edition Beta 2 &lt;/li&gt;&lt;li&gt;Microsoft Office Web Applications Beta 2 &lt;/li&gt;&lt;li&gt;FAST Search for SharePoint 2010 Beta 2 &lt;/li&gt;&lt;li&gt;Microsoft Project Server 2010 Beta 2 &lt;/li&gt;&lt;li&gt;Microsoft Office 2010 Beta 2 &lt;/li&gt;&lt;li&gt;Microsoft Exchange Server 2010 Active directory has been preconfigured over 200 "demo" users with metadata in an organizational structure &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I have not had time to play with it…&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7701911206886112523?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7701911206886112523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7701911206886112523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7701911206886112523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7701911206886112523'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-beta-vpc.html' title='SharePoint 2010 Beta VPC'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3180120717450868539</id><published>2010-01-25T23:21:00.000-05:00</published><updated>2010-01-25T23:22:04.991-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 Service Architecture</title><content type='html'>&lt;p&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Recently I wrote a series of blogs on Enterprise Search and FAST ESP with the intention of having a deep dive into SharePoint Search 2010. There are many changes to both the logical and physical topologies of SharePoint 2010. Most of the readers of this blog series are very familiar with SharePoint 2007 but not so much with SharePoint 2010 (since it is in beta). Before doing a deep dive into SharePoint Search 2010 we need to have a good grasp of the changes for SharePoint 2010.&lt;/p&gt;&lt;p&gt;A well architected logical and physical SharePoint environment tends to revolve around Search. Search tended to drive much of the logical and physical architectures for SharePoint 2007. In this blog series I am going to do an introduction to the SharePoint 2010 services, logical and physical architectures. It is critical to have this worked out from the beginning because the SharePoint architecture must scale with the business. What we have seen is once SharePoint is implemented; it becomes highly adopted.&lt;/p&gt;&lt;p&gt;&lt;b&gt;SharePoint 2010 Versions&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In SharePoint 2007 the versions we became very familiar with were:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Windows SharePoint Services (WSS) &lt;/li&gt;&lt;li&gt;MOSS 2007 Standard &lt;/li&gt;&lt;li&gt;MOSS 2007 Enterprise &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For SharePoint 2010 it has changed to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;SharePoint Foundation Services &lt;/li&gt;&lt;li&gt;SharePoint Server 2010 Standard &lt;/li&gt;&lt;li&gt;SharePoint Server 2010 Enterprise &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Tier Architecture&lt;/b&gt;&lt;/p&gt;&lt;p&gt;SharePoint 2010 has not changed from a Tier perspective. There are Web, Application and Database tiers. What’s important is it to understand is how to architect those tiers. For SharePoint 2010 the Application tier has changed significantly as it is more sophisticated than what was available in SharePoint 2007. Some things that we will get into within this series are creating service farms and partitioned services. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Service Application&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Important changes that you should be aware of:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;In SharePoint 2007 there was Shared Service Providers (SSP) which was used to host services. SSPs have been completely removed from SharePoint 2010 and services can be run independently. &lt;/li&gt;&lt;li&gt;Some services in SharePoint 2010 will be referred to as Service Applications. Not all services in Central Administration are Service Applications. In the table below, you will see which services are considered to be Service Applications. You will see a trend that Service Applications tend to map to major features of SharePoint rather than services which could be considered part of the infrastructure of SharePoint. &lt;/li&gt;&lt;li&gt;Service Groups have been introduced to logically manage Service Applications. When Service Applications are added they will be included in a Default Group. Web Applications can use that Default Group or use a Custom Group of Service Applications. What this provides is greater control of which Service Applications are available to specific web applications. If you are familiar with SharePoint 2007, the Service Group concept is one of the reasons we created different SSPs because sometimes we needed to create barriers between web applications. &lt;/li&gt;&lt;li&gt;SharePoint 2010 services can be reused within and across farms. This was not available in SharePoint 2007 and provides a significant amount of scalability options. &lt;/li&gt;&lt;li&gt;SharePoint 2010 supports Service Partitioning. If you are familiar with database partitioning, think of it is horizontal partitioning of data within a SharePoint service. Not all services support service partitioning; partitioning is only used in services that are data driven. A typical scenario is that a centrally managed/cross farm service with data that should not be exposed to all subscribing farms. If that is the case, a farm would subscribe to a partition of centrally managed service. In SharePoint lingo each partition is referred to as a “tenant”. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Knowing what we now know, when scaling out these services we will take the following into consideration:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Multiple instances of the same Service Applications can be initiated within a farm. &lt;/li&gt;&lt;li&gt;Service Applications are shared across Web Applications within a farm by Service Group. &lt;/li&gt;&lt;li&gt;Some Service Applications can be shared across multiple farms while others cannot. &lt;/li&gt;&lt;li&gt;Service Groups can logically contain Service Applications that reside in other farms. &lt;/li&gt;&lt;li&gt;Web Applications have the flexibility to use multiple instances of the same type of Service Application (regardless of which farm hosts that service). &lt;/li&gt;&lt;li&gt;Service Applications can have its data partitioned and only accessible to specific subscribers. &lt;/li&gt;&lt;li&gt;Service Groups can be used to logically scale for performance, security and scalability. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Some side notes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Service Applications are hosted within IIS. It is possible to have Service Applications deployed to different application pools to achieve process isolation (important for both security and fault tolerance). So it is possible to have a single machine host many services and isolation between them. &lt;/li&gt;&lt;li&gt;Each Service Application instance has a Connection which Web Applications connect to. Web Applications use these Connections (sometimes referred to as proxies) to send and retrieve data from a Service Application. &lt;/li&gt;&lt;li&gt;If the same type of Service Application is used more than once in a single Web Application, one of the Connections will be marked as the primary. &lt;/li&gt;&lt;li&gt;Services are deployed through the Configuration Wizard, Central Admin and using Windows PowerShell. Services can be managed through Central Admin and PowerShell. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Given this flexibility in service configuration you now can:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Have better ability to share dedicated services across regional locations. &lt;/li&gt;&lt;li&gt;Have the ability to create dedicated services by business unit. For instance a Finance Web Application may have a dedicated Excel Services Service Application instance while a different Excel Services Service Application instance may be available to the rest of the farm. &lt;/li&gt;&lt;li&gt;Now have greater control to ensure that data cannot be shared between logical groups of users. For instance lock down departmental or intranet data. &lt;/li&gt;&lt;li&gt;Have the ability to support hosted models in a more secure and efficient manner. &lt;/li&gt;&lt;li&gt;Service Applications that have expensive operations, like Search, can be centralized and reused across farms. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We will put these rules for Service Applications into action in the next part of this series.&lt;/p&gt;&lt;p&gt;&lt;b&gt;SharePoint 2010 Services&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In SharePoint 2007 we commonly had to configure the following services:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Document Conversions Launcher Service &lt;/li&gt;&lt;li&gt;Document Conversions Load Balancer Service &lt;/li&gt;&lt;li&gt;Excel Calculation Services &lt;/li&gt;&lt;li&gt;Office SharePoint Server Search &lt;/li&gt;&lt;li&gt;Windows SharePoint Services Help Search &lt;/li&gt;&lt;li&gt;Windows SharePoint Services Web Application &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In many cases with SharePoint 2007 implementations services were not configured correctly. This resulted in poor performance and the inability to scale to meet business demand. Many people implementing SharePoint 2007 did not understand that both a logical and physical architectures have to be aligned to how SharePoint services will be utilized. This will be a problem for many on the 2010 platform.&lt;/p&gt;&lt;p&gt;As discussed the service architecture has changed for SharePoint 2010 in many ways. Before we dive into all of the strategies of how services should be aligned in both the logical and physical architectures let us understand what the new services are.&lt;/p&gt;&lt;p&gt;Here is a list of services for SharePoint 2010. I found several pieces of information and I manually created this table with the information that I have. &lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;b&gt;Services&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;b&gt;Service Application&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;b&gt;Cross Farm&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;b&gt;Partitioning&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;b&gt;Available On&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Access Database Services&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;New service that allows for viewing, editing and interacting with MS Access through a browser.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes **&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Enterprise&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Application Registry Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Enables users to search and collaborate around business data. Provides backward compatibility to BDC service.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Business Data Connectivity&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Access to line of business systems. Service now supports writing to data services.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Central Administration&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Central Admin Site&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Document Conversions Launcher Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Schedules and initiates document conversions.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Document Conversions Load Balancer Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Balances document conversions across the SharePoint farm.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Excel Calculation Services&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Ability to interact with Excel files in a browser. New extended functionality.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Enterprise&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Lotus Notes Connector&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Index service connector to index Lotus Notes Domino Servers.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;InfoPath Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Supports hosting InfoPath forms in SharePoint.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes **&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Enterprise&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Managed Metadata Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;New service that manages taxonomy structures and definitions.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Microsoft SharePoint Foundation Incoming E-mail&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Email service. This will run on the machine where the web application is running.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Microsoft SharePoint Foundation Subscription Settings Services&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;New service used to track subscription IDs and settings for services that deployed in partition mode.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Microsoft SharePoint Foundation User Code Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;New service runs code deployed as part of a sandbox solution and runs in restricted mode. Must be started on any machine in the farm that needs to run Sandbox code.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Microsoft SharePoint Foundation Web Application&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;The service that runs the web application.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Microsoft SharePoint Foundation Workflow Timer Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Responsible for running timer jobs.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;PerformancePoint&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;BI Dashboard services.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Enterprise&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;PowerPoint&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;New services that allows viewing, editing and broadcasting PowerPoint in a browser.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes **&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Enterprise&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Project&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Host project server 2010.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Additional server product.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Search Query and Site Settings Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Service that performs a query across built indexes.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes*&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Secure Store Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Service provide SSO authentication.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation Search&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Service that provides search capabilities for SharePoint Foundation Search only. For SharePoint Server 2010 Standard and Enterprise this service will perform online Help search.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;NA&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server Search&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Crawls content, creates indexes and performs queries. Automatically configured.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes*&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;State Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;New services that provides temporary storage of user session data for SharePoint components.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes **&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Usage and Health Data Collection&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Reporting services that provide farm wide usage and health.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;User Profile&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;New and expanded social networking services and features.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;User Profile Synchronization Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Synchronizes user and group profile information that is stored in the SharePoint Server 2010 profile store with profile information that is stored in directory services across the enterprise. Works with AD, BDC, Novel LDAP and Sun LDAP (&lt;a href="http://technet.microsoft.com/en-us/library/ee721049(office.14).aspx"&gt;more info&lt;/a&gt;).&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Standard and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Visio Graphics Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Ability to view published Visio diagrams in a browser.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes **&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Enterprise&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Web Analytics Data Processing Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Captures data for analytics.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Web Analytics Web Service&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Web service interfaces for analytics.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Foundation 2010 and up&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;Word Automation Services&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Service that performs automated bulk document conversions.&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;Yes **&lt;/p&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;SharePoint Server 2010 Enterprise&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;* FAST Search cannot be partitioned.&lt;/p&gt;&lt;p&gt;** Supports partitioning but is not needed because there is no tenant data.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Next&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In the next blog we will actually jump into the topologies of SharePoint farms (with diagrams) based on the information captured we have gone over.&lt;/p&gt;&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Topologies for SharePoint Server 2010 - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FD686CBB-8401-4F25-B65E-3CE7AA7DBEAB&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=FD686CBB-8401-4F25-B65E-3CE7AA7DBEAB&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Services in SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=B9CA7745-FFA4-43CA-A638-E1AD868187CE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=B9CA7745-FFA4-43CA-A638-E1AD868187CE&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Cross-farm Services in SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5141C91C-0922-44FC-AAF4-64C5156209EF&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=5141C91C-0922-44FC-AAF4-64C5156209EF&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Hosting Environments for SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=326845D1-95DB-4E55-B65A-21850S9DEBE24&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=326845D1-95DB-4E55-B65A-21850S9DEBE24&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;Post orginially written by RDAer Jason Apergis at &lt;a href="http://www.k2distillery.com/"&gt;MOSS &amp;amp; K2 Distillery&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3180120717450868539?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3180120717450868539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3180120717450868539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3180120717450868539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3180120717450868539'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-service-architecture.html' title='SharePoint 2010 Service Architecture'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-5015447234010537254</id><published>2010-01-25T17:38:00.001-05:00</published><updated>2010-01-25T17:38:25.249-05:00</updated><title type='text'>Hello PowerShell, Goodbye stsadm</title><content type='html'>&lt;p&gt;&lt;font face="Arial"&gt;One of the (many) things I found frustrating in SharePoint 2007 was stsadm, the venerable command line administration utility. In addition to having a difficult to remember and sometimes inconsistent set of commands, there were many scenarios that it simply didn’t cover. As a developer I was left with a choice between writing some throw-away code to accomplish a seemingly simple task or developing and deploying an stsadm extension. For example, in 2007 if you wanted to list the features for a specific site collection, you either had to roll your own extension or hope someone else had already done the work. Well, no more. SharePoint 2010 has moved to PowerShell which means that you know have full access to the SharePoint API from the command line. Going back to my previous gripe regarding listing features, we can simply type the following from the PowerShell prompt:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_R3fY2PR0dPY/S14dWEToEzI/AAAAAAAAAE4/SdN0bu1ZtdE/s1600-h/Capture1%5B4%5D.png"&gt;&lt;font face="Arial"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Capture1" border="0" alt="Capture1" src="http://lh3.ggpht.com/_R3fY2PR0dPY/S14dWeADupI/AAAAAAAAAE8/etIGQpPmQ6Y/Capture1_thumb%5B2%5D.png?imgmax=800" width="533" height="83" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;and receive the following (at no extra charge we get a lovely grid complete with filtering and sorting by piping the output to out-gridview):&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_R3fY2PR0dPY/S14dWzp2cqI/AAAAAAAAAFA/sWKHGQHtbg8/s1600-h/Capture2%5B4%5D.png"&gt;&lt;font face="Arial"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Capture2" border="0" alt="Capture2" src="http://lh5.ggpht.com/_R3fY2PR0dPY/S14dXOEaqaI/AAAAAAAAAFE/KxhLjRml-LU/Capture2_thumb%5B2%5D.png?imgmax=800" width="449" height="177" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;It is very easy to extend on this concept with a more complex script. Open up NotePad, add the following code, and save the file as a .ps1:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_R3fY2PR0dPY/S14dXSAZQQI/AAAAAAAAAFI/CVgM9hQCRWk/s1600-h/Capture3%5B4%5D.png"&gt;&lt;font face="Arial"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Capture3" border="0" alt="Capture3" src="http://lh5.ggpht.com/_R3fY2PR0dPY/S14dXvG8iLI/AAAAAAAAAFM/eefA7yL7z0Y/Capture3_thumb%5B2%5D.png?imgmax=800" width="538" height="193" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;Executing this from PowerShell now displays a list of Feature Definition Titles for a given site collection:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_R3fY2PR0dPY/S14dXwQrqLI/AAAAAAAAAFQ/hHWEjTtz3NY/s1600-h/Capture4%5B5%5D.png"&gt;&lt;font face="Arial"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Capture4" border="0" alt="Capture4" src="http://lh5.ggpht.com/_R3fY2PR0dPY/S14dYPPSctI/AAAAAAAAAFU/4vrKVTKSAKA/Capture4_thumb%5B3%5D.png?imgmax=800" width="441" height="421" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;It quickly becomes clear that the integration of PowerShell into SharePoint 2010 goes far beyond what was available with stsadm. The above script could easily be extended to do some actual work. To get you started, here are a couple references for PowerShell and SharePoint 2010 integration:&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://dmitrysotnikov.wordpress.com/2009/10/19/sharepoint-2010-cmdlet-reference/" target="_blank"&gt;&lt;font size="3"&gt;SharePoint 2010 PowerShell CmdLets Reference&lt;/font&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ee692944.aspx" target="_blank"&gt;&lt;font size="3"&gt;Windows PowerShell Introduction on TechNet&lt;/font&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/sharepoint/ee518673.aspx" target="_blank"&gt;&lt;font size="3"&gt;Getting Started with PowerShell for SharePoint 2010 Administrators&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-5015447234010537254?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/5015447234010537254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=5015447234010537254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5015447234010537254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5015447234010537254'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/hello-powershell-goodbye-stsadm.html' title='Hello PowerShell, Goodbye stsadm'/><author><name>Steve</name><uri>http://www.blogger.com/profile/10782174116130454031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://2.bp.blogspot.com/_R3fY2PR0dPY/S4SDxTUyKMI/AAAAAAAAAFo/orjNA1Hv810/S220/Steve.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R3fY2PR0dPY/S14dWeADupI/AAAAAAAAAE8/etIGQpPmQ6Y/s72-c/Capture1_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3195911253055890444</id><published>2010-01-25T16:15:00.000-05:00</published><updated>2010-01-25T16:15:14.666-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft.SharePoint assembly'/><title type='text'>InfoPath 2010: Microsoft.SharePoint Reference Not Found</title><content type='html'>I recently loaded up an InfoPath 2007 form template in design mode using InfoPath 2010. This template has code behind. When going into the code editor, I was suprised that it did not find the SharePoint assembly:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/S14Ic-z4KGI/AAAAAAAAAOk/ICM6WniqKCk/s1600-h/InfoPath+SP+Reference+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" mt="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/S14Ic-z4KGI/AAAAAAAAAOk/ICM6WniqKCk/s640/InfoPath+SP+Reference+1.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I was running this on a VM with SharePoint 2010. It had to know about SharePoint.&lt;br /&gt;&lt;br /&gt;After closer inspection into the reference properties, I noticed that the Specific Version was set to True:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/S14IyphREdI/AAAAAAAAAOs/Qo5zQEK9o0g/s1600-h/InfoPath+SP+Reference+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="382" mt="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/S14IyphREdI/AAAAAAAAAOs/Qo5zQEK9o0g/s640/InfoPath+SP+Reference+2.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So it was looking for the MOSS 2007 assembly in which the original project was created. I switched this to False and that did the trick:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gmYwAJepiK4/S14JDpQMY5I/AAAAAAAAAO0/UOisITaEhfk/s1600-h/InfoPath+SP+Reference+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" mt="true" src="http://3.bp.blogspot.com/_gmYwAJepiK4/S14JDpQMY5I/AAAAAAAAAO0/UOisITaEhfk/s640/InfoPath+SP+Reference+3.png" width="488" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Once the reference is resolved, you can switch that back to True if you feel more comfortable. It will now be locked in for SharePoint 2010.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&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/6587983161853073832-3195911253055890444?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3195911253055890444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3195911253055890444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3195911253055890444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3195911253055890444'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/infopath-2010-microsoftsharepoint.html' title='InfoPath 2010: Microsoft.SharePoint Reference Not Found'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gmYwAJepiK4/S14Ic-z4KGI/AAAAAAAAAOk/ICM6WniqKCk/s72-c/InfoPath+SP+Reference+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-5206371653253970678</id><published>2010-01-25T15:02:00.000-05:00</published><updated>2010-01-25T15:02:02.023-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='People Picker'/><category scheme='http://www.blogger.com/atom/ns#' term='Contact Selector'/><title type='text'>InfoPath 2010: People Picker No Longer a Hack</title><content type='html'>In InfoPath 2007 there was no built-in people picker control. Somehow we managed to find an ActiveX control which was XML-compliant and could be imported as a custom control into InfoPath 2007. That control, named Contact Selector, was somehow on every single machine (I believe sitting in \Windows\System32 in DLL format). I am still not 100% sure where it came from (Windows, Office, etc.) but oddly enough wherever I went, this guy was on every machine - so we used it!&lt;br /&gt;&lt;br /&gt;I call it a hack because it was ActiveX, it didn't come with InfoPath 2007, it&amp;nbsp;had some shortcomings, and I do&amp;nbsp;recall running into&amp;nbsp;some rendering issues at times. That will all change in InfoPath 2010.&lt;br /&gt;&lt;br /&gt;If you look within the Control Box within InfoPath 2010, you'll see a Person/Group Picker control:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S13sAF_9X2I/AAAAAAAAANk/YlGjpnfo79s/s1600-h/Person+Picker+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="164" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S13sAF_9X2I/AAAAAAAAANk/YlGjpnfo79s/s640/Person+Picker+1.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Double clicking on the control adds it to the current form:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S13sMYq0udI/AAAAAAAAANs/Ln60rDmawCo/s1600-h/Person+Picker+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="156" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S13sMYq0udI/AAAAAAAAANs/Ln60rDmawCo/s640/Person+Picker+2.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The first thing we notice is that we no longer have those large, clunky, VB3.0-style, buttons within the control. Instead of&amp;nbsp;the "To..." button to the&amp;nbsp;left of the text box, there is a directory button all the way to the right. There is still a check-names button but it appears much cleaner and more compliant to people selection interfaces (as used in SharePoint for example).&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;If you look over to the Fields window you'll notice that InfoPath&amp;nbsp;generates the data schema for you now. We no longer need to create the initial structure and link it to this control or group. The underlying field names are exactly the same as before - meaning it will be easy to upgrade older forms. However, the repeating group is now named "pc:Person" whereas previously it needed to be called "Person".&amp;nbsp;Actually that&amp;nbsp;seems to be for display purposes because&amp;nbsp;if you click and view the properties of "pc:Person" group you'll see that the&amp;nbsp;underlying name of the&amp;nbsp;repeating group&amp;nbsp;is indeed "Person". So I think we are safe with upgrading older forms.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Looking at the control properties, we see many more options now. The first important one is the SharePoint Server:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S13yQ-1OGQI/AAAAAAAAAN0/OABx-oWC3HU/s1600-h/Person+Picker+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="338" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S13yQ-1OGQI/AAAAAAAAAN0/OABx-oWC3HU/s400/Person+Picker+3.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;This is a great option as previously, we needed to deploy the form in order for the people picker to work properly. We can now test the form in Preview mode using the new control. It also appears that, as we will see in the next tab, InfoPath will use the SharePoint groups that are located within the site collection you specify here.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;The General tab has the remaining important control properties:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/S13zUDuQQ-I/AAAAAAAAAN8/oFYSNV8-9Mw/s1600-h/Person+Picker+4+-+General+Settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="338" mt="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/S13zUDuQQ-I/AAAAAAAAAN8/oFYSNV8-9Mw/s400/Person+Picker+4+-+General+Settings.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;That Allow Multiple Selections is key. Not that you can check it off - but that you don't have to check it off. Confused? In our InfoPath 2007 hack scenario, the contact selector allowed multiple selections and there was no option to tell it to only allow one (1) selection. I needed to generate custom code-behind to enforce only one selection and invalidate the form if there was more than one. This worked but a) since it required code-behind it needed to be deployed via Central Admin, and b) if you dorked around with form enough you were able to eventually trick the validation and get the form to submit with multiple selections. Now we don't need to mess with that!&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;The next option the General tab is also pretty neat.&amp;nbsp;It controls whether we are allowing People to be selected (specific user accounts) or People and Groups. We can also narrow down the scope of the people that are selected by determining if All Users should be included or just from a specific SharePoint group. This is the drop-down where the SharePoint groups within the site collection (whose URL&amp;nbsp;was entered on the previous tab) are populated:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/S132v1efcjI/AAAAAAAAAOE/9z9U362BfZA/s1600-h/Person+Picker+4+-+General+Settings+-+Groups+Shown.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="338" mt="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/S132v1efcjI/AAAAAAAAAOE/9z9U362BfZA/s400/Person+Picker+4+-+General+Settings+-+Groups+Shown.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;Previewing the form won't show anything different but will enable those buttons for testing:&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S1324JDZyTI/AAAAAAAAAOM/d2DerQPeZGs/s1600-h/People+Picker+5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S1324JDZyTI/AAAAAAAAAOM/d2DerQPeZGs/s640/People+Picker+5.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Clicking on the directory presents a familiar people search dialog:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/S133BcJXhEI/AAAAAAAAAOU/8eLTeZiCTpo/s1600-h/People+Picker+6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="450" mt="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/S133BcJXhEI/AAAAAAAAAOU/8eLTeZiCTpo/s640/People+Picker+6.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;And selecting a user shows the fully qualified user account with the famous underline:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S133Xu6fimI/AAAAAAAAAOc/yZzUoywtk4M/s1600-h/People+Picker+7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S133Xu6fimI/AAAAAAAAAOc/yZzUoywtk4M/s640/People+Picker+7.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Typing in a name and then clicking the Check Names button&amp;nbsp;achieves the same result (just as before).&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So the new Person/Group selector is much cleaner from a developer/designer standpoint as well as the end-user standpoint. I "Sent-A-Smile" on this to the Office 2010 product team.&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/6587983161853073832-5206371653253970678?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/5206371653253970678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=5206371653253970678' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5206371653253970678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5206371653253970678'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/infopath-2010-people-picker-no-longer.html' title='InfoPath 2010: People Picker No Longer a Hack'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gmYwAJepiK4/S13sAF_9X2I/AAAAAAAAANk/YlGjpnfo79s/s72-c/Person+Picker+1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-2191516514691531251</id><published>2010-01-22T16:31:00.002-05:00</published><updated>2010-01-22T17:01:59.202-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Publishing Sites'/><category scheme='http://www.blogger.com/atom/ns#' term='Site Assets'/><category scheme='http://www.blogger.com/atom/ns#' term='Site Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010: May See Less Publishing Sites</title><content type='html'>How many times in MOSS 2007 have we activated publishing just so we can get the nice Pages directory and make it easier to create pages? I think I have done this solely for that purpose many times. We disregarded the overhead because it was more convenient&amp;nbsp;to have all pages go to the same place and not have to bother with selecting a library where we wanted to save the pages (and eliminated the need to create a new library to store them in the first place).&lt;br /&gt;&lt;br /&gt;In SharePoint 2010, if you activate Publishing, you still get the Pages library and the Images library (you almost forgot it created the Images library - I almost did), however, in general, when creating pages for a SharePoint 2010&amp;nbsp;site, there are two new libraries that are generated -&amp;nbsp;Site Pages and Site Assets:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oSVg1qzHI/AAAAAAAAAM8/hnCBDrhg-hg/s1600-h/Team+Site+-+View+All+Content.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oSVg1qzHI/AAAAAAAAAM8/hnCBDrhg-hg/s640/Team+Site+-+View+All+Content.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If you create&amp;nbsp;a Team Site, these come with it, otherwise they will be created when you select Edit Page or New Page. Site Pages will store all of the site pages and Site Assets is used to store any types of media or files (e.g. images, audio, video, etc.) that are used in the pages. So now we don't need to activate Publishing just for the sake of having consistent storage of our pages and images.&lt;br /&gt;&lt;br /&gt;Before you activate Publishing, it does not appear as a valid site creation option, however, there are still nice Collaboration type sites to create:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oUBqm-M9I/AAAAAAAAANE/OWO-_Uy-Gws/s1600-h/Create+-+Colloaboration+Sites.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="418" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oUBqm-M9I/AAAAAAAAANE/OWO-_Uy-Gws/s640/Create+-+Colloaboration+Sites.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notice the icons for these types of sites and the overall presentation. Now, a Publishing Site will appear as an option once you activate the Publishing features -&amp;nbsp;but guess what that looks like:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/S1oWHgW3gpI/AAAAAAAAANU/xFXnPKml1mo/s1600-h/Create+-+Blank+and+Custom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" mt="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/S1oWHgW3gpI/AAAAAAAAANU/xFXnPKml1mo/s640/Create+-+Blank+and+Custom.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It is stuck under "Blank &amp;amp; Custom" and doesn't even have a pretty icon to go with it. Hmmm...I'm picking up 1000 words right now.&lt;br /&gt;&lt;br /&gt;To the defense of our boring Publishing Site icon, it also appears under the Content &amp;amp; Data category:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/S1oWpgXdSYI/AAAAAAAAANc/0jAw-dJpObY/s1600-h/Create+-+Content+and+Data.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="438" mt="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/S1oWpgXdSYI/AAAAAAAAANc/0jAw-dJpObY/s640/Create+-+Content+and+Data.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notice it has a friend in there with it now - Publishing Site with Workflow. The workflow one has a nice icon. &lt;br /&gt;This also tells me something. &lt;br /&gt;&lt;br /&gt;Since we don't need publishing sites anymore for the wrong reasons, why do we need a publishing site? In SharePoint 2010, I see Publishing Sites being solely used for what they were designed for - the publishing, versioning, and approval of content. This usually involves the need for some sort of approval workflow. Hence, I think we'll see more Publishing Sites with Workflows and less Publishing Sites for the sake of having a Pages libary- all thanks to the new site structure in SharePoint 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-2191516514691531251?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/2191516514691531251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=2191516514691531251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2191516514691531251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/2191516514691531251'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-may-see-less-publishing.html' title='SharePoint 2010: May See Less Publishing Sites'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gmYwAJepiK4/S1oSVg1qzHI/AAAAAAAAAM8/hnCBDrhg-hg/s72-c/Team+Site+-+View+All+Content.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3417043929952049045</id><published>2010-01-22T15:36:00.001-05:00</published><updated>2010-01-22T15:39:34.153-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Site Actions'/><category scheme='http://www.blogger.com/atom/ns#' term='More Options'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010: Site Actions without Publishing</title><content type='html'>Yesterday I compared the new Site Actions menu with the old one but these both had Publishing activated on the sites. When publishing is not turned on you get the default Site Actions menu:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oGwDvQA0I/AAAAAAAAAMk/yUjyGPGbJHs/s1600-h/Site+Actions+-+No+Publishing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oGwDvQA0I/AAAAAAAAAMk/yUjyGPGbJHs/s640/Site+Actions+-+No+Publishing.png" width="312" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We still have the two new options foir Site Workflows and Edit the Site in SharePoint Designer. We have Site Permissions now listed here so we don't need to go into Site Settings. Interesting enough is that when the Publishing is turned on in 2010, this option doesn't appear, while in MOSS 2007, it was the opposite (Site Settings -- Modify People and Groups).&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;One thing that may look different but has the same functionality is the More Options. This is the new Create option. "Create" appears on the standard site actions in MOSS 2007 but when Publishing is activated, it does not exist anymore. That is still the same in SharePoint 2010, the More Options does not show up when the Publishing feature is activated on a site. &lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I really like the More Options (I have been living in a Publishing site world and always had to View All Site Content and then click on the Create button on that screen). If you have Silverlight installed you will like it as well as instead of going to a page with all kinds of things to create, you are presented with a nice pictorial guide of all the wonderful items in SharePoint:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oJjNJAmDI/AAAAAAAAAMs/RNIVlZI872I/s1600-h/Create+in+Silverlight.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="398" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oJjNJAmDI/AAAAAAAAAMs/RNIVlZI872I/s640/Create+in+Silverlight.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Don't worry, there are filters and categories to narrow down your selections (see left hand selections).&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;One thing I did notice in this dialog is if you start typing in the Name, for example, of what you will call your item, and then decide to change what that item will be, the entry in the Name text box dissappears. So in order to reduce frustration, you will need to select exactly the type of item it will be.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Also, if you select More Options (yes I just realized myself that there are More Options from the More Options) and begin to type information in the boxes but decide to hit Cancel instead of Create, then all that typing goes bah-bye as well:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oLuu_KCxI/AAAAAAAAAM0/WJHlc5bVtGg/s1600-h/More+Options+-+More+Options.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S1oLuu_KCxI/AAAAAAAAAM0/WJHlc5bVtGg/s640/More+Options+-+More+Options.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Anyway, once again I thought that this may be helpful for people who have not yet seen the new product and gives some insight on what's coming down the road in regards to user interfaces.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3417043929952049045?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3417043929952049045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3417043929952049045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3417043929952049045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3417043929952049045'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-site-actions-without.html' title='SharePoint 2010: Site Actions without Publishing'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gmYwAJepiK4/S1oGwDvQA0I/AAAAAAAAAMk/yUjyGPGbJHs/s72-c/Site+Actions+-+No+Publishing.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-916367978504661956</id><published>2010-01-22T06:59:00.005-05:00</published><updated>2010-01-22T09:12:06.576-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VM'/><category scheme='http://www.blogger.com/atom/ns#' term='VPC'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual Machine'/><title type='text'>SharePoint 2010 Development Environment Options</title><content type='html'>As we prepared to evaluate the SharePoint 2010 beta a few months ago, we realized that we needed to decide how we would set up our development environments. With SharePoint 2007, our model was to use Microsoft Virtual PC 2007 to maintain different virtual machines for different uses or different clients. But using VPC 2007 as a guest system is not an option with SharePoint 2010, because it does not support 64 bit guests, and SharePoint 2010 requires a 64 bit OS. We realized we had the following options with SharePoint 2010:&lt;br /&gt;&lt;br /&gt;1. Use a VirtualPC 2007 VM as a boot-to-VHD.&lt;br /&gt;2. Don't use virtual machines, install SharePoint 2010 on the host.&lt;br /&gt;3. Use Windows Server 2008 as your Host system, then use Hyper-V for your virtual servers.&lt;br /&gt;4. Build a server with Windows Server 2008 and Hyper-V, then create Virtual Servers as needed, and have developers connect remotely.&lt;br /&gt;5. Use a product like VirtualBox or VMWare, which supports 64 bit guests.&lt;br /&gt;&lt;br /&gt;Let's discuss the pros and cons of each of the above approaches, and I'll explain why RDA chose option 5.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;OPTION 1: Use a VirtualPC 2007 VM as a boot-to-VHD&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The only way to use VPC 2007 with SharePoint 2010 is to create a boot-to-VHD virtual machine, meaning that when you turn your machine on, you must boot the machine straight to the VM.&lt;br /&gt;&lt;br /&gt;PROS: You don't have to change your host OS. You can dedicate all your RAM to the VHD, which is good if you only have 4 GB.&lt;br /&gt;&lt;br /&gt;CONS: You don't have a host! If you are going to spend any significant time on the VM, you'd probably need to set up your email, IM, Office, and anything else that you use regularly on your host.&lt;br /&gt;&lt;br /&gt;WHY YOU MIGHT CHOOSE THIS OPTION : You don't want to install 2010 on your real host (Option 2), you don't want to change your host OS, and you just want to evaluate the beta in a separate environment without much hassle.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;OPTION 2: Don't use virtual machines, install SharePoint 2010 on the host.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Unlike SharePoint 2007, you can install 2010 on a non-Server OS (i.e. Windows 7 or Vista).&lt;br /&gt;&lt;br /&gt;PROS: No VM's to deal with. If you have 4 GB of RAM instead of 8 GB, this option may be better for you since you don't have the VM overhead.&lt;br /&gt;&lt;br /&gt;CONS: If you are a developer, you'll also need to install Visual Studio 2010 and the SharePoint tools on your host. If you work with multiple customers or on multiple projects, this is not an efficient approach.&lt;br /&gt;&lt;br /&gt;WHY YOU MIGHT CHOOSE THIS OPTION : You work for one company, on just a few projects. You want to evaluate 2010 and then you'll uninstall it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;OPTION 3: Use Windows Server 2008 as your Host system, then use Hyper-V for your virtual servers.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;One of Microsoft's responses to VPC 2007 not supporting 64 bit guests is "No problem, just use Hyper-V!"&lt;br /&gt;&lt;br /&gt;PROS: If you are in an environment that requires you use only Microsoft products, this is the way to go.&lt;br /&gt;&lt;br /&gt;CONS: Windows Server 2008 is not a very friendly user operating system, that is not what it was designed for. If you don't already have 8 GB or more of RAM, you'll probably need it.&lt;br /&gt;&lt;br /&gt;WHY YOU MIGHT CHOOSE THIS OPTION : You are not allowed to purchase non-Microsoft products. You like Windows Server 2008 and don't mind using it as your host.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;OPTION 4: Build a server with Windows Server 2008 and Hyper-V, then create Virtual Servers as needed, and have developers connect remotely.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You might be able to step out of the "local" development environment scenarios and into a remote development environment scenario. In this situation, you would work with your IT folks to stand up a high powered server with Server 2008 and Hyper-V installed. Then, set up one or more VM's for each developer to connect to as their development environment.&lt;br /&gt;&lt;br /&gt;PROS: Depending on your situation, it might be lower cost than upgrading all developer machines to run SharePoint 2010 locally.&lt;br /&gt;&lt;br /&gt;CONS: If the server goes down, everyone is stuck. If you work for many clients, some clients may not allow you to connect to your remote VM.&lt;br /&gt;&lt;br /&gt;WHY YOU MIGHT CHOOSE THIS OPTION : You don't have many clients, or you work for one company. You don't have the budget to upgrade all developer machines. You are confident that the server will be stable and well supported.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;OPTION 5: Use a product like VirtualBox or VMWare, which supports 64 bit guests.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Products like VirtualBox or VMWare allow you to operate your environment exactly like you did with SharePoint 2007, with a host/guest structure. You are not restricted in your choice of host OS (as long as the product supports it, and they support a LOT of OS's)&lt;br /&gt;&lt;br /&gt;PROS: If you used VPC 2007 before, then there is no paradigm change in how you deal with your environment.&lt;br /&gt;&lt;br /&gt;CONS: You may have to pay for the product (but VMWare Player is free). You will probably want to change your host OS to a 64 bit (though not required, it is recommended). If you don't already have 8 GB or more of RAM, you'll probably need it.&lt;br /&gt;&lt;br /&gt;WHY YOU MIGHT CHOOSE THIS OPTION : You don't mind learning a new product. You were waiting for an excuse to upgrade to Windows 7 64 bit. You want to keep the same environmental concept.&lt;br /&gt;&lt;br /&gt;WHY WE CHOSE IT: Options 1,2, and 4 were not feasible for us since we are a consulting company with many customers. We didn't want to go with Option 3 because we didn't want to force our folks to run Server 2008 as their host.&lt;br /&gt;&lt;br /&gt;We really wanted to keep the same paradigm in our development environment, so we went with VMWare Player. It's free, and so far it has worked well. If we decide to go with this concept when 2010 is released to production, we can always upgrade to VMWorkstation if we need to, it's not that expensive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-916367978504661956?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/916367978504661956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=916367978504661956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/916367978504661956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/916367978504661956'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-development-environment.html' title='SharePoint 2010 Development Environment Options'/><author><name>Jay Horan</name><uri>http://www.blogger.com/profile/01289378033115524686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-6163743269872069969</id><published>2010-01-21T16:16:00.000-05:00</published><updated>2010-01-21T16:16:46.891-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Site Actions'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010: Site Actions on Root Site Comparison to MOSS 2007</title><content type='html'>One of the first things that people will notice on their SharePoint 2010 main site, is that the Site Actions menu is now on the left hand side. In MOSS 2007, most of our time seemed to be spent in that Site Actions menu - probably mostly selecting Site Settings or View All Site Content.&lt;br /&gt;&lt;br /&gt;The Site Actions menu in SharePoint 2010 has been improved a bit, and just as in MOSS 2007, the items on the menu may change depending on where you are within the site collection. For this post, I am at the root site in both cases with Publishing activated.&lt;br /&gt;&lt;br /&gt;Below is a table outlining the new items and comparing to the old:&lt;br /&gt;&lt;hl&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;SharePoint 2010 Menu Item&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;MOSS 2007 Menu Item&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;New Site&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Create Site&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edit Page&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Edit Page&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Manage Content and Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Manage Content and Structure&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;View Site Content Reports&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;View Reports&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Modify Navigation&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Site Settings - Modify Navigation&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;New Page&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Create Page&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;View All Site Content&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;View All Site Content&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Site Settings&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Site Settings - Modify All Site Settings&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edit Site in SharePoint Designer&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Site Workflows&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/hl&gt;&lt;br /&gt;&lt;br /&gt;So we see that the menu has been streamlined a bit in SharePoint 2010 and is more consistent. Whether Publishing is activated or not, we get the same Site Settings menu and we no longer need to select Site Settings - Modify All Site Settings (which is usually why we are clicking Site Settings anyway).&lt;br /&gt;&lt;br /&gt;Two new items appear - Edit Site in SharePoint Designer and Site Workflows. These help streamline the use of SPD and managing the workflows running on the site.&lt;br /&gt;&lt;br /&gt;When navigating to a sub-site, there is yet another improved Site Actions menu which I will discuss in a different post. &lt;br /&gt;&lt;br /&gt;Here is a picture comparing the two menus:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/S1jDhesiWxI/AAAAAAAAAMc/GcFdHbyxw6w/s1600-h/Site+Actions+Compare.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/S1jDhesiWxI/AAAAAAAAAMc/GcFdHbyxw6w/s640/Site+Actions+Compare.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I thought it would be interesting to compare the two especially for those who haven't seen SharePoint 2010 yet (plus I wanted to show off my awesome MS Paint skills).&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/6587983161853073832-6163743269872069969?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/6163743269872069969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=6163743269872069969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6163743269872069969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/6163743269872069969'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-site-actions-on-root.html' title='SharePoint 2010: Site Actions on Root Site Comparison to MOSS 2007'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gmYwAJepiK4/S1jDhesiWxI/AAAAAAAAAMc/GcFdHbyxw6w/s72-c/Site+Actions+Compare.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-8107138361878716875</id><published>2010-01-20T16:10:00.001-05:00</published><updated>2010-01-20T16:30:45.448-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax Options'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Parts'/><title type='text'>SharePoint 2010: Auto Refresh Web Parts with Ajax Options</title><content type='html'>I think every SharePoint 2007 customer I have dealt with had some sort of page or list that they wanted to automatically refresh every X seconds such that if another user entered new items, the screen would be refreshed with the latest details. There was no easy way of doing this.&lt;br /&gt;&lt;br /&gt;In SharePoint 2010, however, web parts have a new section in their toolpanes -&amp;nbsp;Ajax Options:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/S1du_aoFtuI/AAAAAAAAAMM/D4hlnEPdtls/s1600-h/ajax1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" mt="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/S1du_aoFtuI/AAAAAAAAAMM/D4hlnEPdtls/s640/ajax1.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The key option here is the Enable Asychronous Automatic Refresh. I created a custom list and added several items. Next, I added the list to a page as a web part. Editing the web part, I selected the checkbox to enable the automatic refresh and left the interval at 60 seconds (as shown above).&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I clicked Ok to save the settings and then saved the page (Stop Editing button). So now I have a page with the web part showing me the contents&amp;nbsp;of the custom list.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I opened a new browser and went directly to the&amp;nbsp;actual list. In this new browser I can pretend I am someone else making modifications:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gmYwAJepiK4/S1dvAg0RIdI/AAAAAAAAAMU/FrZkCB9XwXA/s1600-h/Ajax2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="374" mt="true" src="http://1.bp.blogspot.com/_gmYwAJepiK4/S1dvAg0RIdI/AAAAAAAAAMU/FrZkCB9XwXA/s640/Ajax2.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I updated one of the items and added a new one. Within 60 seconds, the list web part on the web page refreshed and showed the updated contents. Awesome! &lt;br /&gt;&lt;br /&gt;(I almost wrote that the web page with the web part refreshed but that would infer that the page refreshes; but these are Ajax options and therefore, the whole page doesn't refresh, just the web part contents!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-8107138361878716875?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/8107138361878716875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=8107138361878716875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8107138361878716875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/8107138361878716875'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-auto-refresh-web-parts.html' title='SharePoint 2010: Auto Refresh Web Parts with Ajax Options'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gmYwAJepiK4/S1du_aoFtuI/AAAAAAAAAMM/D4hlnEPdtls/s72-c/ajax1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-7597474630231038688</id><published>2010-01-20T09:28:00.005-05:00</published><updated>2010-01-20T10:28:56.927-05:00</updated><title type='text'>SharePoint 2010 and Windows Identity Foundation (WIF)</title><content type='html'>One of the more intriguing features of SharePoint 2010 is the integration of claims based authentication. This authentication scheme creates opportunities for companies to use alternative identity models. So why use Claims-Based apps? -- If you're familiar with The US Department of Homeland Security &lt;a href="http://www.dhs.gov/xabout/laws/gc_1217616624097.shtm"&gt;HSPD 12 Directive &lt;/a&gt;then it is easy to understand how important this technology is and why Microsoft has integrated WIF with SharePoint 2010.&lt;br /&gt;&lt;br /&gt;As a .Net / SharePoint Developer or Architect - WIF should be one of the top five things on your list of items to study.&lt;br /&gt;&lt;br /&gt;There are plenty of resources on the web to get started. Here are just a few...&lt;br /&gt;&lt;br /&gt;Microsoft Windows Identity Foundation (WIF)&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/7/D/0/7D0B5166-6A8A-418A-ADDD-95EE9B046994/WindowsIdentityFoundationWhitepaperForDevelopers-RTW.pdf"&gt;White paper for Developers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a great video on how WIF was integrated with SharePoint 2010.&lt;br /&gt;&lt;a href="http://microsoftpdc.com/Sessions/SVC26"&gt;Required viewing&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Claims Based Identity and Access Control Guide&lt;br /&gt;&lt;a href="http://claimsid.codeplex.com/"&gt;http://claimsid.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Windows Identity Foundation&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/security/aa570351.aspx"&gt;http://msdn.microsoft.com/en-us/security/aa570351.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MSDN SharePoint 2010 Microsoft.SharePoint.IdentityModel Namespace&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.identitymodel(office.14).aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.identitymodel(office.14).aspx&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-7597474630231038688?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/7597474630231038688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=7597474630231038688' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7597474630231038688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/7597474630231038688'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-and-windows-identity.html' title='SharePoint 2010 and Windows Identity Foundation (WIF)'/><author><name>Joe Loftus</name><uri>http://www.blogger.com/profile/11389831655654916860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-5875974073205710536</id><published>2010-01-19T15:32:00.001-05:00</published><updated>2010-01-19T15:38:48.802-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Site templates'/><category scheme='http://www.blogger.com/atom/ns#' term='New Site'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Create Site'/><title type='text'>SharePoint 2010: Custom Site Template Does Not Appear in Available Sites to Create</title><content type='html'>&lt;em&gt;&lt;span style="font-size: x-small;"&gt;NOTE: All example screen shots in this post were&amp;nbsp;taken from a system that had Silverlight installed which greatly enhances the user experience, interfaces, and dialogs. Your interface may not look the same if Silverlight is not installed.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In SharePoint 2007, when you saved a site as a template using the site settings, the template would automatically appear within the custom tab of available site types when you went to create&amp;nbsp;a new site. In SharePoint 2010, there is an additional step to have this work.&lt;br /&gt;&lt;br /&gt;When you save a site as a template in SharePoint 2010, the template is stored within the User Solution Gallery (versus the Site Templates system list in 2007). The template is actually indeed a solution now (so yes that's right it is a .wsp file and no longer a .stp file).&lt;br /&gt;&lt;br /&gt;So what did we need to do with solutions deployed in 2007? Activate them! (Well we actually activated features and deployed solutions but I got excited). This is the same principle in 2010 for site templates however they are activated within the site collection and not through Central Admin.&lt;br /&gt;&lt;br /&gt;So once a site was saved as a template, go to the root site and select Site Actions -&amp;gt; Site Settings. That should bring you to the Site Settings page:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/S1YUdCbNk3I/AAAAAAAAAMA/jy0KpScDbNU/s1600-h/Site+Settings+Solutions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/S1YUdCbNk3I/AAAAAAAAAMA/jy0KpScDbNU/s640/Site+Settings+Solutions.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;Clicking on Solutions under Galleries will take you to the user solution gallery:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_gmYwAJepiK4/S1YUVpb004I/AAAAAAAAALo/fmM6Qj1nX58/s640/Activate+SOlution.png" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;There you should see the template name that you used to save the site template. Hover over the name and click on the down arrow top the right. You will see Activate or Delete as the menu options. Click on Activate.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://4.bp.blogspot.com/_gmYwAJepiK4/S1YUTHZXjBI/AAAAAAAAALg/ppT-Y0_1czM/s1600-h/Activate+Dialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_gmYwAJepiK4/S1YUTHZXjBI/AAAAAAAAALg/ppT-Y0_1czM/s640/Activate+Dialog.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A dialog box will appear presenting the details of the package (including the Solution ID GUID - hey good to know!). There will be an Activate button at the top. Click on that button to activate the solution.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The solution will activate and you will be returned to the user solution gallery screen. The site template solution should now have an activated status:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/S1YUX4lqFNI/AAAAAAAAALw/iI5qWxv337Q/s1600-h/Activated+Status.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/S1YUX4lqFNI/AAAAAAAAALw/iI5qWxv337Q/s640/Activated+Status.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;Now, when you go to create a new site, your template that was saved should be an available selection categorized under "Blank &amp;amp; Custom" sites:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_gmYwAJepiK4/S1YUb4lSEXI/AAAAAAAAAL4/zkjoX_ZDXLc/s1600-h/New+Site+Dialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_gmYwAJepiK4/S1YUb4lSEXI/AAAAAAAAAL4/zkjoX_ZDXLc/s640/New+Site+Dialog.png" /&gt;&lt;/a&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/6587983161853073832-5875974073205710536?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/5875974073205710536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=5875974073205710536' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5875974073205710536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/5875974073205710536'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-custom-site-template.html' title='SharePoint 2010: Custom Site Template Does Not Appear in Available Sites to Create'/><author><name>Steve Mann</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_gmYwAJepiK4/SM1bBH9vucI/AAAAAAAAAH8/_jaa4M3R52g/S220/mannsteve_2007.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gmYwAJepiK4/S1YUdCbNk3I/AAAAAAAAAMA/jy0KpScDbNU/s72-c/Site+Settings+Solutions.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-1408762723301936105</id><published>2010-01-11T13:27:00.002-05:00</published><updated>2010-01-11T13:32:51.823-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='FAST'/><title type='text'>FAST ESP SharePoint Connector</title><content type='html'>&lt;p&gt;&lt;strong&gt;Series&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="Why is FAST Enterprise Search Important Part 1" href="http://rdacollab.blogspot.com/2009/11/why-is-fast-enterprise-search-important.html"&gt;Why is FAST Enterprise Search Important Part 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="What is a FAST Enterprise Search Project Part 2" href="http://rdacollab.blogspot.com/2009/11/what-is-fast-enterprise-search-project.html"&gt;What is a FAST Enterprise Search Project Part 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rdacollab.blogspot.com/2010/01/part-1-fast-components-introduction.html"&gt;FAST ESP Components Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rdacollab.blogspot.com/2010/01/scaling-fast-esp-enterprise-search.html"&gt;Scaling FAST ESP Enterprise Search&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rdacollab.blogspot.com/2010/01/fast-esp-sharepoint-connector.html"&gt;FAST ESP SharePoint Connector&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SharePoint 2010 Search (Coming Soon)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/p&gt;&lt;p&gt;After introducing the components and providing a preview of design considerations for scaling a FAST ESP implementation, let us take a look at how FAST EST works with SharePoint today. In this post I will introduce you to the architecture of the FAST SharePoint Connector and explain how content is fed, processed, stored and queried. We will cover considerations and strategies for a successful implementation.&lt;/p&gt;&lt;p&gt;In the next set of posting, we will discuss in detail what has been planned for SharePoint 2010.&lt;/p&gt;&lt;p&gt;Note, if you have no FAST ESP experience or training, you must read &lt;a href="http://www.k2distillery.com/2010/01/fast-components-introduction.html"&gt;this blog&lt;/a&gt; to understand some of the concepts.&lt;/p&gt;&lt;p&gt;&lt;b&gt;FAST Connector for SharePoint Today&lt;/b&gt;&lt;/p&gt;&lt;p&gt;FAST supports both SharePoint 2003 and 2007 in the same manner it would support any other enterprise application that FAST would index. FAST provides an API (Java, .Net, C++) and the FAST Content Connector Toolkit, which facilitates the building for Connector applications. The SharePoint Connector is built on these frameworks to feed content from SharePoint into FAST.&lt;/p&gt;&lt;p&gt;There are three features of the FAST SharePoint Connector you should be aware of:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;It will index sites, lists, list items, files and associated metadata from SharePoint.&lt;/li&gt;&lt;li&gt;It can incrementally retrieve content from SharePoint.&lt;/li&gt;&lt;li&gt;It will capture SharePoint item permissions and incorporate it into the access control list.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;b&gt;Architecture&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The architecture of the FAST SharePoint Connector is pretty simple and well contained.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;A custom web service will be installed into the SharePoint farm. This web service will be accessible just like the out of the box web services provided in SharePoint. Side note: if you are interested in writing out your own custom web service for SharePoint, &lt;a href="http://www.k2distillery.com/2009/02/custom-sharepoint-web-service-upload.html"&gt;read this blog&lt;/a&gt; .&lt;/li&gt;&lt;li&gt;The FAST SharePoint Connector must be installed on a machine that can access the SharePoint web services and is able to connect to FAST ESP Content Distributors. It really does not matter where this is installed as long as it can make the required connections. That being said, the Connector could be installed on either the SharePoint Farm or on the FAST Farm.&lt;/li&gt;&lt;li&gt;The Windows Authentication Proxy must be installed onto the FAST Farm.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_vc1OGKotMCU/S0tsnN4LJiI/AAAAAAAAAaY/A8j964mzfaM/s1600-h/SharePointFASTConnector%5B3%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="SharePointFASTConnector" border="0" alt="SharePointFASTConnector" src="http://lh5.ggpht.com/_vc1OGKotMCU/S0tsnqLbk7I/AAAAAAAAAac/ZLvkCpDd2rI/SharePointFASTConnector_thumb%5B1%5D.png?imgmax=800" width="402" height="457" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;Basic Processing Flow&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The installed components work together to retrieve content from SharePoint and make it searchable within FAST. Here is the process:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The SharePoint Connector calls the FAST SharePoint Web Service to retrieve content.&lt;/li&gt;&lt;li&gt;The FAST Connector connects to the FAST Content Distributor and sends along the SharePoint data.&lt;/li&gt;&lt;li&gt;The FAST Windows Authentication Proxy “may” be used to get additional SharePoint data.&lt;/li&gt;&lt;li&gt;The document processors process the content into FIXML documents so an index can be built.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now let’s dive a little bit deeper into some of the details about how this works.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Incremental Loading&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The FAST SharePoint Connector will perform incremental loading of content. The first time it will be heavy because all of the SharePoint data will be loaded. However, subsequent content loads will only retrieve changes. The interval for incremental loading is configurable.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Incremental Loading Strategy&lt;/b&gt;&lt;/p&gt;&lt;p&gt;If you need to completely reload the data, you must clear the Collection the documents were fed to. Doing this has ramifications that you should be aware of. The most important one that comes to mind is that Collection can have documents from other locations. If so, all of that content will have to be re-indexed too! That can be a big deal. So it is important organize your Collections and potentially anticipate if you will ever have to do this.&lt;/p&gt;&lt;p&gt;You may be wondering how you can control the amount of data that is indexed at any given time. Well there are probably many ways but here are some options that come to mind first.&lt;/p&gt;&lt;p&gt;Create multiple pipeline instances for processing SharePoint data, then configure the pipelines to include or exclude specific URLs within SharePoint. I might create a dedicated pipeline for processing content in areas where I know there will be lots of updates. For instance, collaboration or project sites will have data updated on a regular basis. I would then configure that pipeline to refresh the interval on a regular basis. The advantage of doing this is that a smaller subset of data that is regularly updated will be polled more frequently. Then I would create a dedicated pipeline for a publishing site where data is updated less frequently. The interval between getting data may be longer.&lt;/p&gt;&lt;p&gt;Another thing I may take into consideration is pushing data to different collections. For instance, you can have dedicated collections for intranet, extranet and Internet (remember I am not talking about SharePoint collections, I am talking about FAST collections). Typically in the SharePoint world you logically group data into different content databases, shared service providers and even different hardware. It may be good to maintain that logical separation knowing that it is recommended to feed content into different FAST Collections based on these logical boundaries. Doing this will also give more control over the Search Profiles and what Collections people have access to.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Document Feeding&lt;/b&gt;&lt;/p&gt;&lt;p&gt;When SharePoint data is read through the web service by the SharePoint Connector, both metadata and security information will be sent to the Connector. However, depending on the configuration you set, SharePoint files may or may not be part of that pay load. By default, a reference to the file (a URL) will be part of the information sent from the SharePoint Connector to the Content Distributor(s). During Document Processing, the Windows Authentication Proxy will use this reference to retrieve the actual document from SharePoint. You have the ability to change this configuration and send the file as a BLOB.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Document Feeding Strategy&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Why are you provided with this option? Mostly for flexibility reasons. If you pass the files by reference: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Connector is going to perform more quickly because it has less data to work with.&lt;/li&gt;&lt;li&gt;Your network I/O will be better utilized because the document will not have to be passed twice as it will only be retrieved one from SharePoint. This is a big deal if you have large files.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you choose to pass the file immediately:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Document Processing will be quicker because it does not have to go out a retrieve the file from SharePoint.&lt;/li&gt;&lt;li&gt;The machines where Document Processing is located do not need to have access to the SharePoint sites because all of the content is available.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Processing SharePoint Data&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Working with SharePoint data is not really different than working with other data that may come into FAST. But we need to be aware of some strategies you may want to employ. First, you should know how the data type mapping from SharePoint to FAST will he handled. Second, metadata from columns in SharePoint will be mapped into the fields within the Index Profile. This mapping is based on the unique name of the field. For example, if you have a column called Last Update Date in SharePoint, in the FAST index profile there must be a column called lastupdatedate (notice it is lower case, no spaces and no special characters). If this is the case, the data from the SharePoint column will be automatically mapped into that index field and become searchable. Note the SharePoint column data is not mapped; Document Processing will discard the data.&lt;/p&gt;&lt;p&gt;If you have a good understanding of SharePoint, this will raise a red flag for you. This is because you know that columns of SharePoint data can be added in an ad-hoc fashion. The question on your mind is how can data made searchable if it is not mapped to a field? When you learn FAST there is a concept called Scope fields. Scope fields take metadata and store them in a structured format (similar to XML) in a single field in the index. Scope fields are specifically provided to support storing of index data without having to know the schema of that data in advance. When you store data in a Scope field you have the ability to query it back out using their FQL language (similar to writing an XPath query). &lt;/p&gt;&lt;p&gt;&lt;b&gt;Processing SharePoint Data Strategy&lt;/b&gt;&lt;/p&gt;&lt;p&gt;There are some considerations that you must take into account. First, you can add new fields into the Index Profile to match all of the data that you want to bring into SharePoint. This is fine; however, if you need to add a field this is considered to be a “warm update.” After making the change, only new documents will have the data but all previously indexed documents will not. For old documents to have the data, they must be completely re-processed. This will require you to clear the collection and completely re-index (discussed above). A second consideration is that using Scope fields to support querying all column data has a query performance penalty.&lt;/p&gt;&lt;p&gt;Here are some additional recommendations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Come up with a hybrid approach where important SharePoint columns are mapped to a field in the Index Profile. Then allow all other columns to be indexed automatically into a Scope field. This is a common practice. This will give you good query performance on most common columns of data and still allow you to access to all other column data.&lt;/li&gt;&lt;li&gt;Earlier, we mentioned potentially creating separate Collections for publishing sites versus collaboration sites. In that scenario, do not turn on Scope fields for the publishing Collection because the metadata should be very well defined. This way you can get better query performance. All you need to do is either add new fields that map directly to SharePoint columns or add document processing stage(s) that will save the data in existing index fields.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Wrap Up&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This post provided you with some insight into how FAST ESP indexes data from SharePoint. Hopefully you will take these factors into consideration before you start to index your content. This is why we say it is so important to understand the life-cycle of the data you are indexing - because it will influence your approach.&lt;/p&gt;&lt;br /&gt;Post orginially written by RDAer Jason Apergis at &lt;a href="http://www.k2distillery.com/"&gt;MOSS &amp;amp; K2 Distillery&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-1408762723301936105?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/1408762723301936105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=1408762723301936105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/1408762723301936105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/1408762723301936105'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/fast-esp-sharepoint-connector.html' title='FAST ESP SharePoint Connector'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_vc1OGKotMCU/S0tsnqLbk7I/AAAAAAAAAac/ZLvkCpDd2rI/s72-c/SharePointFASTConnector_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-3099511078992549914</id><published>2010-01-11T10:37:00.003-05:00</published><updated>2010-01-11T10:45:28.558-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='FAST'/><title type='text'>SharePoint 2010 Planning, Development and Architecture</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;I recently stumbled across a bunch of documents that are available that give SharePoint professionals insight into the new SharePoint 2010 platform.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SharePoint 2010 Architecture &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Topologies for SharePoint Server 2010 - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FD686CBB-8401-4F25-B65E-3CE7AA7DBEAB&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=FD686CBB-8401-4F25-B65E-3CE7AA7DBEAB&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Services in SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=B9CA7745-FFA4-43CA-A638-E1AD868187CE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=B9CA7745-FFA4-43CA-A638-E1AD868187CE&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Hosting Environments for SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=326845D1-95DB-4E55-B65A-218509DEBE24&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=326845D1-95DB-4E55-B65A-218509DEBE24&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Getting started with business intelligence in SharePoint Server 2010 - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FC97D587-FFA4-4B43-B77D-958F3F8A87B9&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=FC97D587-FFA4-4B43-B77D-958F3F8A87B9&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Cross-farm Services in SharePoint 2010 Products - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5141C91C-0922-44FC-AAF4-64C5156209EF&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=5141C91C-0922-44FC-AAF4-64C5156209EF&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Microsoft SharePoint Server 2010 Evaluation Guide - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=110318EC-0238-4811-8FC7-EC4399D3C100&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=110318EC-0238-4811-8FC7-EC4399D3C100&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;SharePoint 2010 Development&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;SharePoint 2010: Professional Developer Evaluation Guide and Walkthroughs - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=CFFB14E8-88A9-43BD-87AA-4792AB60D320&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=CFFB14E8-88A9-43BD-87AA-4792AB60D320&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SharePoint 2010 Reference: Software Development Kit - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=F0C9DAF3-4C54-45ED-9BDE-7B4D83A8F26F&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=F0C9DAF3-4C54-45ED-9BDE-7B4D83A8F26F&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SharePoint 2010: Getting Started with Development on SharePoint 2010 Hands-on Labs in C# and Visual Basic - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=C010FC68-B47F-4DB6-B8A8-AD4BA33A35C5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=C010FC68-B47F-4DB6-B8A8-AD4BA33A35C5&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SharePoint 2010: Developer Platform White Paper - &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=5184cb27-98d9-4cc0-bb0b-4b24d5b62db6"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=5184cb27-98d9-4cc0-bb0b-4b24d5b62db6&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SharePoint Products and Technologies: 2010 (Technical Preview) Developer Documentation - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=94AFE886-3B20-4BC9-9A0D-ACD8CD232C24&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=94AFE886-3B20-4BC9-9A0D-ACD8CD232C24&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SharePoint 2010: Developer and IT Professional Learning Plan - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=AC9A3851-C298-4F4F-B7F0-63D756D2BDE9&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=AC9A3851-C298-4F4F-B7F0-63D756D2BDE9&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;SharePoint 2010 Search &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Search Technologies for SharePoint 2010 Products &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=D7C0091E-5766-496D-A5FE-94BEA52C4B15&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=D7C0091E-5766-496D-A5FE-94BEA52C4B15&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Search Environment Planning for Microsoft SharePoint Server 2010 - &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5655EACA-22DF-4089-BCD3-38A1F5318140&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=5655EACA-22DF-4089-BCD3-38A1F5318140&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Search Architectures for Microsoft SharePoint Server 2010 - &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=22ffc029-2c08-457d-8311-ca457c6d160e&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=22ffc029-2c08-457d-8311-ca457c6d160e&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Design Search Architectures for Microsoft SharePoint Server 2010 - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5A3CA177-FB9A-4901-9797-0C384277DB7C&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=5A3CA177-FB9A-4901-9797-0C384277DB7C&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;FAST for SharePoint 2010&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Planning and Architecture for FAST Search Server 2010 for SharePoint (Beta) - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=CA3AD5CC-3743-4CE2-AA13-EDF55CEA92D7&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=CA3AD5CC-3743-4CE2-AA13-EDF55CEA92D7&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Deployment and configuration of FAST Search Server 2010 for SharePoint (Beta) - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=A65AEF6F-BC99-4B29-81BB-37FCE8AD6EA7&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=A65AEF6F-BC99-4B29-81BB-37FCE8AD6EA7&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Site Admin and Central Admin for FAST Search Server 2010 for SharePoint (Beta) - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=499DBDBF-3D9B-4961-80BB-29C645E7D0C2&amp;amp;displaylang=enx"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=499DBDBF-3D9B-4961-80BB-29C645E7D0C2&amp;amp;displaylang=enx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Monitoring for FAST Search Server 2010 for SharePoint (Beta) - &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=1E0DDA0D-3FD8-4A4D-8650-B878B5D5FBD8&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=1E0DDA0D-3FD8-4A4D-8650-B878B5D5FBD8&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6587983161853073832-3099511078992549914?l=collab.rdacorp.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://collab.rdacorp.com/feeds/3099511078992549914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6587983161853073832&amp;postID=3099511078992549914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3099511078992549914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6587983161853073832/posts/default/3099511078992549914'/><link rel='alternate' type='text/html' href='http://collab.rdacorp.com/2010/01/sharepoint-2010-planning-and.html' title='SharePoint 2010 Planning, Development and Architecture'/><author><name>Jason Apergis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6587983161853073832.post-1278972678233601358</id><published>2010-01-07T09:45:00.003-05:00</published><updated>2010-01-11T13:35:09.413-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='FAST'/><title type='text'>Scaling FAST ESP Enterprise Search</title><content type='html'>&lt;p&gt;&lt;strong&gt;Series&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="Why is FAST Enterprise Search Important Part 1" href="http://rdacollab.blogspot.com/2009/11/why-is-fast-enterprise-search-important.html"&gt;Why is FAST Enterprise Search Important Part 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="What is a FAST Enterprise Search Project Part 2" href="http://rdacollab.blogspot.com/2009/11/what-is-fast-enterprise-search-project.html"&gt;What is a FAST Enterprise Search Project Part 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rdacollab.blogspot.com/2010/01/part-1-fast-components-introduction.html"&gt;FAST ESP Components Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rdacollab.blogspot.com/2010/01/scaling-fast-esp-enterprise-search.html"&gt;Scaling FAST ESP Enterprise Search&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rdacollab.blogspot.com/2010/01/fast-esp-sharepoint-connector.html"&gt;FAST ESP SharePoint Connector&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SharePoint 2010 Search (Coming Soon)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;p&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/p&gt;&lt;p&gt;In the &lt;a href="http://rdacollab.blogspot.com/2010/01/part-1-fast-components-introduction.html"&gt;first part of this series&lt;/a&gt; I introduced all of the components and their role for FAST ESP 5.3. Now I want to discuss how these components should be scaled and the associated design decisions.&lt;/p&gt;&lt;p&gt;Just as with a SharePoint installation, typically the first thing a client wants to know is how much hardware they need to buy and what the licensing costs will be. So in the SharePoint world we have a multitude of questions that we ask up front to gather this information, which is usually easy to get since SharePoint is an application server. For FAST you need to focus on understanding the content that will be indexed, which can be pretty challenging at times. This is because you need a full understanding of the characteristics and lifecycle of that data. This is usually not very well documented, especially with legacy systems.&lt;/p&gt;&lt;p&gt;In this post I am going to expand upon the previous one by focusing on how to scale the components of FAST based on business rules.&lt;/p&gt;&lt;p&gt;&lt;b&gt;General Comment&lt;/b&gt;&lt;/p&gt;&lt;p&gt;FAST can be implemented on a single machine or may be completely scaled out with each component having own dedicated hardware. FAST is linearly scalable, meaning that doubling the hardware will double the capacity. This is unlike SharePoint 2007, where there can be decreasing performance (for example, with more than four WFEs). FAST best practices also state that better performance can be achieved by using multiple small machines instead of one big machine.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Requirements for Scaling&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Some initial questions you need answered right off the bat for scaling are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;How many documents are going to be processed (content volume)? &lt;/li&gt;&lt;li&gt;What is the size of the documents that will be fed into FAST? &lt;/li&gt;&lt;li&gt;What is the estimated total number of documents that are going to be searchable (which is different than number of documents that could be processed)? &lt;/li&gt;&lt;li&gt;How would the documents be described (format, percentage of content to be indexed, type, metadata, etc.)? &lt;/li&gt;&lt;li&gt;Will data be continually fed or pulled in periodically? &lt;/li&gt;&lt;li&gt;What is the life-cycle of the data to be indexed? &lt;/li&gt;&lt;li&gt;What is the acceptable amount of time between a document being fed into FAST and being made searchable to a user (Index latency)? &lt;/li&gt;&lt;li&gt;How long should it take for search results to be returned to the user (Search latency)? &lt;/li&gt;&lt;li&gt;What are the expected peaks of queries that must be handled? Specifically getting to understand how many queries per second that must be handled. &lt;/li&gt;&lt;li&gt;What features are required for document search (spelling checking, lemmatization, entity extraction, categorization, ranking, navigation, etc.)? &lt;/li&gt;&lt;li&gt;What sort of service level agreement exists in case there is a failure at any point in the component architecture? Example, must search continue to work at all times (even on stale data)? &lt;/li&gt;&lt;li&gt;What can the network bandwidth support, specifically for copying large amounts of data? &lt;/li&gt;&lt;li&gt;What storage capacity can be supported? &lt;/li&gt;&lt;li&gt;What service level agreement must be maintained for business owners and users? &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Here is a picture of the components that make up FAST.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_vc1OGKotMCU/S0XzVVf_ieI/AAAAAAAAAZo/0l769VyNTA0/s1600-h/components%5B7%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="components" border="0" alt="components" src="http://lh4.ggpht.com/_vc1OGKotMCU/S0XzVwdzrvI/AAAAAAAAAZs/uDqIm4TVPP8/components_thumb%5B3%5D.png?imgmax=800" width="819" height="260" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;Connectors&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Connector applications will have to be scaled appropriately to support the feeding of content into FAST. Multiple servers may need to be used depending on what is fed into FAST and how often. Content may have to be sent in batches or run based on schedule.&lt;/p&gt;&lt;p&gt;Make sure you do not create bottlenecks when you have multiple Connector applications running. It's probably best to create a schedule of when content is fed into FAST.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Collections&lt;/b&gt;&lt;/p&gt;&lt;p&gt;I mention Collections here because we introduced them earlier but there is no scaling for them. They are just a logical grouping of searchable documents.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Content Distributors&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Having multiple Content Distributor machines will provide fault tolerance but will not improve performance as they cannot be load balanced. When a Connector application connects, you have the ability to provide 1 to n Content Distributors and when one fails, the Connector will simply connect to the next one available.&lt;/p&gt;&lt;p&gt;If you need to support a high volume of content processing (or continuous feeding) you can use multiple Content Distributors and dedicate them to specific Connector applications. Remember Content Distributors are simply a pass through and do not have special hardware requirements outside the FAST basic recommendations.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Feeding Proxy&lt;/b&gt;&lt;/p&gt;&lt;p&gt;A Feeding Proxy (not enabled by default) can be placed in front of the Content Distributors. This will replicate submitted content to another installation (like a cold back up). This can provide a very high level of fault tolerance for your entire installation. The Connector application(s) would instead connect to the Feeding Proxy instead of directly to the Content Distributors.&lt;/p&gt;&lt;p&gt;Note: if a Feeding Proxy fails, the non-failing Feeding Proxy will buffer the new content until the failing Feeding Proxy comes back online.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Document Processors&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Multiple Document Processors can provide fault tolerance and increased document throughput. All of the Document Processors will pass content to only one Content Distributor at a time. Should a Content Distributor fail, that Document Processor will connect to the next available Content Distributor. The Content Distributor is responsible for sending content across Document Processors, which increases throughput of content.&lt;/p&gt;&lt;p&gt;Document Processors have the biggest impacts on CPU and RAM.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Index Nodes&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Multiple Index servers can be used to provide fault tolerance, capacity and performance. Basically you create a “matrix” of index servers. The more rows you create, the more fault tolerance you provide. The more columns, the more content is created and the better performance will be realized. Below is a diagram depicting the Index server matrix (a node is the same thing as a server).&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_vc1OGKotMCU/S0XzWPZ69JI/AAAAAAAAAZw/W88SROHVoro/s1600-h/IndexNodes%5B7%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="IndexNodes" border="0" alt="IndexNodes" src="http://lh3.ggpht.com/_vc1OGKotMCU/S0XzWRd8TWI/AAAAAAAAAZ0/WHYnAAEh6y8/IndexNodes_thumb%5B3%5D.png?imgmax=800" width="488" height="429" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;First, let’s talk about fault tolerance. Fault tolerance is created by adding more rows to the index. The first row in a column is the Index Master and all subsequent Index servers in the column are Backups. The Index Dispatcher will push all of the FIXML files to each index server in the column. However, the Master will build an index file. If Master goes down, the next Backup will be made to the Master and the index partitions will have to be rebuilt with the FIXML already on that machine.&lt;/p&gt;&lt;p&gt;Adding new columns to the matrix will increase capacity and can help indexing performance. Performance is improved because we can decrease the index latency (amount of time for a document to become searchable) because there are more indexing services running.&lt;/p&gt;&lt;p&gt;Index Servers will require machines with high RAM (building the Index), Disk (store the index), and Net/IO (send the index to Search Server). You need enough memory to build and enough space to store the index being built. If there is not enough space for new content, it will not be indexed. That is why it is extremely important to know the size of the content that is being fed into FAST. Net/IO is needed to receive processed content and to push the index to Search Servers.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Index Partitions&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Let’s go ahead and dive a little deeper into how indexing works as there are ways to improve performance. Within each Index node there are Index Partitions (by default there are three). Indexes are built by Index Partitions. The goal of using Index Partitions is to have low index latency (time it takes for a document to become visible in search) and support real time indexing with high volumes of content.&lt;/p&gt;&lt;p&gt;The first Index Partition should be the smallest with the other partitions being increasingly larger. The size of the Index Partition is controlled by a document count. This document count states how many documents can be stored within each Index Partition. New FIXML documents are always added into the first Index Partition (smallest) for indexing. Once a document count threshold is met for an Index Partition, the documents within that Index Partition will be merged with the next Index Partition. This merging will cause a re-index of that partition.&lt;/p&gt;&lt;p&gt;The goal of all is to not index large amounts of documents at one time. Instead index only what needs to be indexed. Once a document has been indexed it is highly likely that the document will not need to be re-indexed on a regular basis. As mentioned, new documents will be added to the first partition and that document will be immediately indexed. Since the first partition is significantly smaller than the other partitions, indexing is not an expensive operation. Once the count of documents goes over the threshold in the first partition, the documents will be merged into the next partition and re-indexed within that next partition. Obviously that operation will be a little more expensive but it will be less frequent and you are not re-indexing content on a regular basis. More Index Partitions can be added and the documents counts for each Index Partition can be adjusted. This can be strategically aligned with the schedules of when content is fed into the FAST.&lt;/p&gt;&lt;p&gt;You may be wondering how updated documents are handled across Index Partitions. This is handled through a process called Index Blacklisting. Based on what was just discussed it possible that different versions of the same document could spread across Index Partitions. The Index Blacklisting process (which runs on an interval) will suppress old versions of a document from search results. When an Index Partition is re-indexed and both of the versions reside on the same Index Partition only then will the old version be discarded. An interesting thing to know is that the index can become fragmented when there are multiple versions of the FIXML residing on the Index Server. This can lead to query performance issues, disk space issues, and increased time requirements needed to rebuild the entire index server. It is important to determine how often content is updated and develop a strategy to align that to the Index Partitions.&lt;/p&gt;&lt;p&gt;One last side note - a document’s Collection does not dictate where a document will be stored in an Index Partition. Documents from the same Collection will be stored across all Index Nodes. Remember, a Collection can be thought of as a piece of metadata.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Index Dispatchers&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Multiple Index Dispatchers can provide fault tolerance and better scaling. It will be more scalable as the documents created by Document Processors will be load balanced between the available Index Dispatchers. It is not common to need to scale here unless you want to add Fault Tolerance.&lt;/p&gt;&lt;p&gt;The Index Dispatcher has the responsibility of sending processed documents to the correct Index columns in a round robin fashion (the actual policy is beyond the scope of this article).&lt;/p&gt;&lt;p&gt;Note: Index Dispatchers are a pass through and do not have special hardware requirements outside the FAST basic recommendations.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Search Nodes&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Search Servers typically require machines with good CPU, RAM and disk to store the index. Multiple Search Nodes (servers) can provide fault tolerance, better query performance and support for more volume. Like the Index Nodes, Search Nodes are arranged into a “matrix.” The number of Search versus Index rows do not have to match. However, there must be at least one Search Node for each Index Node column.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_vc1OGKotMCU/S0XzWgd0S6I/AAAAAAAAAZ4/_xY77pDQ610/s1600-h/SearchNodes%5B7%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="SearchNodes" border="0" alt="SearchNodes" src="http://lh3.ggpht.com/_vc1OGKotMCU/S0XzXDslchI/AAAAAAAAAZ8/SRXN32TNS0I/SearchNodes_thumb%5B3%5D.png?imgmax=800" width="638" height="602" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;More rows add fault tolerance and better query performance. Adding more Search Nodes rows will directly improve query performance. This is because the Top Level Dispatchers will balance queries across the Search nodes in a column. Additionally, having many Search rows provides fault tolerance in case one goes down. &lt;/p&gt;&lt;p&gt;It is possible to have both Search and Index roles installed on the same machine, but this not a good practice for the following reasons: First, indexing is an expensive operation and can directly affect query performance. When the roles are on separate machines, the index will be replicated to each Search node in the respective column. Then the Search node will search on the local index file. Secondly, more fault tolerance is introduced by having the Index and Search nodes on separate machines. If the Index nodes were to all fail, search results can still be returned because the Search nodes will find results using the local index file. The only downside is the results will be stale. However, that is acceptable in many cases. &lt;/p&gt;&lt;p&gt;If you are familiar with MOSS 2007 Search this is not new stuff. In MOSS 2007 you typically set up a single index server and run all the query services on each WFE server to achieve the performance and redundancy that was just discussed.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Query/Result (QR) Server&lt;/b&gt;&lt;/p&gt;&lt;p&gt;QR Servers require good CPU and RAM to support the query request from applications. Adding more QR servers will provide you with better query performance and provide redundancy. Performance of the QR server can be directly affected by the features that have been activated. If it takes a long time to prepare a query or to prepare the results, having multiple QR servers can be helpful.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Search Front End Servers (SFE)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;SFE are the front end applications that make query requests. The scaling of these applications is beyond the scope of this article.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Administration Server&lt;/b&gt;&lt;/p&gt;&lt;p&gt;If you are looking to have a truly fault tolerant environment, it is recommended that you set u pa separate second Admin server. However, this is not usually done. One of the more important Administrative services that can be scaled is the CORBA Name Service. This service ensures that components will be able to resolve each other.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Index and Query Expansion&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Another concept I will introduce you to is Index and Query expansion. This can affect performance and storage capacity and should be considered as part of your planning efforts. Expansion is specifically related to lemmatization, which is a linguistic feature typically implemented. Lemmatization provides the ability to search for alternate forms of a word (walk &amp;gt;&amp;gt; walked, walks, walking, etc.). Using lemmatization will improve the search experience, but at a cost of disk space, content processing and query processing. Typically, you will not use lemmatization when content is small, very structured, and requires exact text matching. Lemmatization really helps when there is lots of rich, verbose and unstructured structured content.&lt;/p&gt;&lt;p&gt;There are three ways to approach lemmatization: index expansion, query expansion and by reduction. Index expansion will s
