<?xml version="1.0" encoding="UTF-8"?><!--RSS generated by Windows SharePoint Services V3 RSS Generator on 3/13/2010 1:31:17 PM--><?xml-stylesheet type="text/xsl" href="/_layouts/RssXslt.aspx?List=032b7d51-232c-49f2-83f8-908ec51a95a5" version="1.0"?><rss version="2.0"><channel><title>Woody Windischman - The Sanity Point</title><link>http://www.thesanitypoint.com</link><description>RSS feed for the Posts list.</description><lastBuildDate>Sat, 13 Mar 2010 21:31:17 GMT</lastBuildDate><generator>SharePoint CKS:EBE</generator><ttl>60</ttl><image><title>Woody Windischman - The Sanity Point</title><url>http://www.thesanitypoint.com/_layouts/images/homepage.gif</url><link>http://www.thesanitypoint.com</link></image><item><title>It's a Date!</title><link>http://www.thesanitypoint.com/archive/2010/03/07/its-a-date.aspx</link><guid isPermaLink="False">/archive/2010/03/07/its-a-date.aspx</guid><description><![CDATA[<div class="ExternalClass3353182146A5475588840949566EF7C3">
<h3><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/83/MCj042609000001_024D7547.png"><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj04260900000[1]" border="0" alt="MCj04260900000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/83/MCj042609000001_thumb_024D7547.png" width="139" height="124"></a>SharePoint and Office 2010 to Launch on May 12th</h3>
<p>On Friday, Arpan Shah announced the official debut date for Microsoft Office 2010 and, of course SharePoint 2010, on the <a href="http://blogs.msdn.com/sharepoint/archive/2010/03/05/sharepoint-2010-office-2010-launch.aspx" target="_blank">Microsoft SharePoint Blog</a>. In the same post, he mentioned that the RTM (Release to Manufacturing) will come a few weeks earlier, some time in April.</p>
<p>There are a lot of changes coming in the new versions, so there is also lots of planning to do. I know many of you are planning to move forward aggressively, while many of you will also be on older versions of SharePoint long into the future. Whichever path you choose, it might be helpful to keep the following in mind:</p>
<ul>
<li>Your current stuff will still work, even once the new software comes out. You don't &quot;need&quot; to upgrade immediately.</li>
<li>SharePoint Server 2010 requires Windows Server 2008. It also requires that your entire stack, including both Windows Server and SQL Server, be 64-bit.</li>
<li>Although you will always get the best results when keeping both the Office client and SharePoint versions in sync, you will still get reasonable functionality with staged upgrades. (Look for information about just how the different version combinations interact soon.)</li>
<li>One exception to the previous statement is SharePoint Designer. SharePoint Designer 2007 <strong>will not work</strong> for SharePoint 2010 sites. Conversely, SharePoint Designer 2010 will not work with anything <em>except</em> SharePoint 2010 sites.</li>
<li>On the Office client side, even if you are using 64-bit Windows, you can still use the 32-bit Office. This is critical, because you cannot mix and match 32 and 64 bit versions of Office on the same system. Naturally, you can't use 64-bit Office on 32-bit Windows in any case.</li>
<li>No matter what version of SharePoint you are on, a failure to plan is a plan to fail. Think about how you want to use SharePoint in your company before you deploy it.</li></ul>
<p>This is going to be an exciting Spring in the SharePoint world, and I can't wait to help you make sense of it!</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Sun, 07 Mar 2010 09:19:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Office 2010/default.aspx">Office 2010</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint 2010/default.aspx">SharePoint 2010</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint Designer/default.aspx">SharePoint Designer</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/Upgrade/default.aspx">Upgrade</category><category domain="http://www.thesanitypoint.com/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://www.thesanitypoint.com/archive/tags/Governance/default.aspx">Governance</category></item><item><title>Busy February</title><link>http://www.thesanitypoint.com/archive/2010/02/22/busy-february.aspx</link><guid isPermaLink="False">/archive/2010/02/22/busy-february.aspx</guid><description><![CDATA[<div class="ExternalClass9F68FCA422CF43C5BE89BABA714CA6F3"><h3>Watch this Space!</h3>
Between SPS Indy, the MVP Summit last week, and life in general, this
month has just flown away. But don't worry, I haven't abandoned you,
and I'll be posting more SharePoint articles soon...
</div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Mon, 22 Feb 2010 14:32:00 GMT</pubDate></item><item><title>SPS Indy a Success</title><link>http://www.thesanitypoint.com/archive/2010/02/02/sps-indy-a-success.aspx</link><guid isPermaLink="False">/archive/2010/02/02/sps-indy-a-success.aspx</guid><description><![CDATA[<div class="ExternalClassBA87BD6702214A11B1957E1A1890BBD1"><a href="http://www.sharepointsaturday.org/Indy"><img style="border-right-width:0px;margin:0px 10px 10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" border="0" alt="SharePoint Saturday Indianapolis" align="left" src="http://www.sharepointsaturday.org/indy/SiteImages/SharePointSaturday.png" width="120" height="44"></a>As most of you know, I was a speaker at the Indianapolis SharePoint Saturday event. We had close to a capacity crowd, with over 250 attendees. Not bad for a little town in the Midwest. OK, Indianapolis isn't all that small. There are a few events that draw more people - like the Indianapolis 500. And I hear there's also a football team... (just kidding - Go Colts!).   <p><img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px" title="between sessions" border="0" alt="between sessions" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/81/between_3_234176FB.jpg" width="244" height="164"></p>  <h3>My Session</h3>  <p>Nevertheless, there were 20 sessions, in four tracks. My session was the first of the day in the &quot;No-code solutions&quot; track. I gave an <a href="http://www.thesanitypoint.com/Goodies/SPD2010-SPSIndy.pdf" target="_blank">Introduction to SharePoint Designer 2010</a> (click the link to download a PDF of the presentation). I touched on many of the key features, but gave special emphasis to how you could easily configure SharePoint to disable the &quot;dangerous&quot; functions (modifying master pages, and editing or un-ghosting pages). This, along with SPD's new emphasis on business process integration, makes it a great tool to give to your business analysts and information workers, without needing to worry about them &quot;messing up&quot; your corporate branding or making their sites unusable.</p>  <h3>Collaboration and Camaraderie</h3>  <p>Of course, the big benefit of coming to a smaller conference is getting actual face-to-face time with the presenters, without the pressure of competing with thousands of others who want the same thing.</p>  <p>  <p>  <p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="presenters mingle with attendees" border="0" alt="presenters mingle with attendees" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/81/presentersPlus_3_234176FB.jpg" width="244" height="164"></p>  <p>And let's not forget drawing for door prizes!</p>  <p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="door prize drawing" border="0" alt="door prize drawing" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/81/drawingtime_3_234176FB.jpg" width="244" height="164"> </p>  <p>In the end, knowledge was shared, connections were formed, and a good time was had by all. </p>  <p>I'm really looking forward to the next one!</p>  <p><em>P.S. In case you missed it earlier, <a href="http://www.thesanitypoint.com/Goodies/SPD2010-SPSIndy.pdf" target="_blank">here is a link to a PDF of my presentation</a>.</em></p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Tue, 02 Feb 2010 07:23:26 GMT</pubDate></item><item><title>On Ends and Means</title><link>http://www.thesanitypoint.com/archive/2010/01/21/on-ends-and-means.aspx</link><guid isPermaLink="False">/archive/2010/01/21/on-ends-and-means.aspx</guid><description><![CDATA[<div class="ExternalClass4986EB705C0E4A8A921A4FC8EBC53744">
<h3><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj04412850000[1]" border="0" alt="MCj04412850000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/80/MCj044128500001_thumb_0C3B4D66.png" width="124" height="124">The <em>Answer </em>may be SharePoint, but <u>Don't Forget the Questions!</u></h3>
<p>One of the biggest reasons some SharePoint deployments fail is <em>because</em> they are &quot;SharePoint Deployments&quot;. </p>
<p>People hear the buzz, and want to jump on the SharePoint bandwagon. They buy servers, attend training, install the software. Big bux are spent customizing and branding a SharePoint home page. Maybe there's a big roll-out promotion. Everybody says &quot;Look! We've rolled out SharePoint!&quot;. And then...</p>
<p>Crickets.</p>
<h3>All Dressed Up, and Nowhere to Go</h3>
<p>But, you ask, what about all of those stories you hear about &quot;uncontrolled growth&quot;? People clamoring to get their own SharePoint sites? That's all true as well, but you need to consider <em>why</em> that is happening. In those cases, the people have a goal, and find that SharePoint is a great tool for making that goal a reality. The goal isn't to have a SharePoint site, per se. Rather the goal might be &quot;easier document and calendar sharing&quot;, and SharePoint is used to attain it.</p>
<h3>Simple Pleasures</h3>
<p>Often those implementing SharePoint forget the KISS principle (Keep it Super Simple). SharePoint has a lot of great features and functions right out of the box. It is very tempting to try implementing all of them at once on the same site, sometimes even the same page. It is almost like when &quot;desktop publishing&quot; was made possible by Postscript laser printers. People discovered how easy it was to have a dozen fonts on a single page, and so that's what they did.</p>
<p>Similarly, in the early days of the web, as new features were added to web browsers, they started showing up <em>everywhere</em> on sites. (Does anyone remember the &lt;Blink&gt; tag?) And don't even get me stated on some of the early Flash-based sites. It got to the point where IBM was even poking fun at the designs in their commercials. &quot;It's a Flaming Logo!&quot; Why? Because we can!</p>
<p>The fact is, like the flaming logo, the fanciest features SharePoint has are worthless unless they are used in the service of some actual user need. For example: Assuming it is reasonably well implemented and up to date, the most used feature on <em>any</em> intranet is almost guaranteed to be the company phonebook or employee directory. Probably by an order of magnitude above any other function. It isn't fancy, but it is something people actually need on a regular basis.</p>
<p>As it turns out, SharePoint, with its personal profiles and My Sites, makes a great employee directory. :)</p>
<h3>Form Follows Function</h3>
<p>Of course, if all you needed was an employee directory, SharePoint would be overkill in the extreme. But put that directory in the context of a company intranet, with news and knowledge bases, collaboration and search. And here's a radical idea - <em>Ask your users what they need first, and implement that!</em> Maybe throw in a few things that are just for fun, like classified ads, or pictures from the company picnic. Suddenly you have a &quot;destination&quot; that will draw in your users and enhance the sense of community in your organization.</p>
<p>These are all things that could be (and often have been) done individually without SharePoint. But SharePoint gives you the tools you need to build <em>and maintain</em> these &quot;applications&quot; easily, quickly, and consistently - usually without custom code.</p>
<p>Now you can add your branding, and promote &quot;Our-Net 2.0&quot;. Sure, it is a site <em>based on</em> SharePoint, but now you have put the horse before the cart, and given your users the tools they really need. It doesn't matter to them what the name of the technology behind the scenes is. All they care about is that you have created something that can help them do their jobs better.</p>
<p>Let SharePoint play Clark Kent, so you can look like the super hero.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Thu, 21 Jan 2010 23:19:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://www.thesanitypoint.com/archive/tags/Design/default.aspx">Design</category><category domain="http://www.thesanitypoint.com/archive/tags/General/default.aspx">General</category><category domain="http://www.thesanitypoint.com/archive/tags/Governance/default.aspx">Governance</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Speaking at SharePoint Saturday Indianapolis</title><link>http://www.thesanitypoint.com/archive/2010/01/09/speaking-at-sharepoint-saturday-indianapolis.aspx</link><guid isPermaLink="False">/archive/2010/01/09/speaking-at-sharepoint-saturday-indianapolis.aspx</guid><description><![CDATA[<div class="ExternalClass74969173A1E048D591EE6E00CA8C7128">
<h3><a title="SharePoint Saturday, Indianapolis. January 30th 2010" href="http://www.sharepointsaturday.org/indy/default.aspx" target="_blank"><img style="margin:0px 10px 10px 0px;display:inline" alt="" align="left" src="http://www.sharepointsaturday.org/indy/SiteImages/SharePointSaturday.png" width="120" height="44"></a>On the Road Again...</h3>
<p>Well, 2010 has just barely gotten started, and SharePoint Saturday's are already in full swing. I'm pleased to announce that I've been selected to present at the SharePoint Saturday in <a href="http://www.sharepointsaturday.org/indy/default.aspx" target="_blank">Indianapolis, Indiana</a>. This takes place on January 30th, 2010, at the Gene B. Glick Junior Achievement Center. Click on the link or logo above for all the details, including registration, a list of the other presenters, as well as the Twitter feed of <a href="http://search.twitter.com/search?q=%23SPSIndy" target="_blank">#SPSIndy</a> commentary.</p>
<p>A SharePoint Saturday is a free to attend event that serves as a mini SharePoint conference. You get some of the same world-class speakers and content found at the big events like Tech-Ed. If you're in the Indianapolis area, and want to know more about SharePoint, this is not something you'll want to miss.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Sat, 09 Jan 2010 13:55:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint Designer/default.aspx">SharePoint Designer</category><category domain="http://www.thesanitypoint.com/archive/tags/Training/default.aspx">Training</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/General/default.aspx">General</category><category domain="http://www.thesanitypoint.com/archive/tags/Governance/default.aspx">Governance</category></item><item><title>Looking Back on 2009</title><link>http://www.thesanitypoint.com/archive/2009/12/28/looking-back-on-2009.aspx</link><guid isPermaLink="False">/archive/2009/12/28/looking-back-on-2009.aspx</guid><description><![CDATA[<div class="ExternalClass53F3967FC6FF4EFFB2E91A8804FEE48F">
<h3><img style="border-right-width:0px;margin:0px 10px 5px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="New Year Time" border="0" alt="New Year Time" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/78/MCj039729400001_thumb_0D0B89F5.png" width="124" height="124">The Obligatory Year-end Report</h3>
<p>It is now the last week of December, and you know what that means. Lying in wait among the crumpled wrapping paper, danced-out sugarplums, and pine needles (not to mention the feathers and other &quot;presents&quot; from all those birds your true love gave to you) you'll find year-end wrap-ups from every corner imaginable. </p>
<p>This is mine. :) I'll get to the more general stuff in a moment, but there was one personal SharePoint-related thing that stood out for me in 2009, and that happened the very first day.</p>
<h3>I Became a Published Author</h3>
<p>While I (along with Asif and Bryan) did all of the work in 2008, my book <a href="http://www.amazon.com/gp/product/0470287616?ie=UTF8&amp;tag=woowinthesanp-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0470287616" target="_blank"><em>Professional Microsoft Office SharePoint Designer 2007</em></a><em> </em>was officially released by Wrox Press on January 1st of 2009 (December 31st, 2008 in some markets). I'm honored by the very positive reviews, and want to thank everyone who has purchased it. </p>
<p>Ironically, its importance is going to continue on into 2010, and possibly beyond. While SharePoint 2010 is top-of-mind for many people right now, the fact is that SharePoint 2007 is going to be around for a long time to come. But, SharePoint Designer 2010 cannot work with SharePoint 2007 sites, so SPD 2007 will still be needed if you want to customize older SharePoint sites. Since SPD is now a free download, there isn't much in the way of printed documentation, other than (you guessed it) third party books - like mine.</p>
<h3>The Year of the &quot;Community Conference&quot;</h3>
<p>One amazing thing that stood out about 2009 was the popularity of independent SharePoint-related conferences and seminars. I personally presented at two - the &quot;<a href="http://www.bestpracticesconference.com/" target="_blank">Best Practices SharePoint Conference</a>&quot; in San Diego, and the &quot;<a href="http://www.sptechcon.com/" target="_blank">SharePoint Technology Conference</a>&quot; in Boston.</p>
<p>But the big trend was the emergence of the &quot;<a href="http://www.sharepointsaturday.org/default.aspx" target="_blank">SharePoint Saturday</a>&quot; mini-conferences. These are one-day, free to attend conferences, that are held all over the world. Here you will find breakout sessions by the very same experts that present at the larger venues, like Tech-Ed and the official Microsoft SharePoint Conference. Check out the SPS site, and plan to attend one of these events near you!</p>
<p>And, of course, no mention of the &quot;Community Conference&quot; would be complete without mentioning the &quot;Conference Community&quot; on Twitter. This is a bit less formal, but essentially you will find a play-by-play for almost every conference being happily tweeted by the attendees with hash tags like #SPC09, or #SPSINDY.</p>
<h3>SharePoint 2010</h3>
<p>Of course, the big news was the announcement of Office and SharePoint 2010, and the availability of the public beta. The official release is currently set for the &quot;first half&quot; of calendar 2010. As many articles have pointed out already, much has changed. There will probably still be some significant changes between now and the final release, though what they might be, nobody can say.</p>
<h3>Other Significant Events</h3>
<p>Some of the other SharePoint things that happened to me in 2009</p>
<ul>
<li>I became Michael Gannotti's very first &quot;<a href="http://socialmedia.mikegannotti.com/Lists/Posts/Post.aspx?ID=137" target="_blank">Backseat Driver</a>&quot; </li>
<li>I was once again awarded as a Microsoft MVP for SharePoint Server </li>
<li>I autographed and gave away almost 500 copies of my book while working the Microsoft Technical Learning Center booth at Tech-Ed in Los Angeles </li></ul>
<h3>SharePoint, the Target</h3>
<p>No post about SharePoint in 2009 would be complete without some mention of another buzzphrase that started appearing in 2009 - &quot;SharePoint Killer&quot;. Almost every new application that had the slightest thing to do with collaboration or content management seemed to earn headlines of &quot;Is X the Next SharePoint?&quot; or &quot;Y will make SharePoint Obsolete&quot;. From Google Sites to Google Wave. From Drupal, to Alfresco, to the classic DotNetNuke. Yet while each may have one area where it shines, none of them really has the versatility or power to match SharePoint, assuming they are even truly comparable.</p>
<h3>Blog Highlights</h3>
<p>For those of you new to my blog, here are some of the articles I wrote this year that you might find particularly interesting:</p>
<ul>
<li><a href="http://www.thesanitypoint.com/archive/2009/01/14/press-f1-sharepoint-help-is-on-the-way.aspx">Press F1 - SharePoint Help is on the Way</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/01/08/selecting-editors-in-sharepoint-designer.aspx">Selecting Editors in SharePoint Designer</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/03/26/something-old-in-something-new.aspx">Something Old In Something New</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/03/05/binary-free-sharepoint-twitter-search-web-part.aspx">Binary Free SharePoint Twitter Search Web Part</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/04/21/a-hidden-gem-the-preview-pane-view-in-sharepoint.aspx">A Hidden Gem - the Preview Pane View in SharePoint</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/04/14/wiki-in-the-box-is-sharepoint-wiki-really-that-bad.aspx">Wiki-in-the-Box - Is SharePoint Wiki Really that Bad?</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/04/03/on-babies-bathwater-and-sharepoint-designer.aspx">On Babies, Bathwater, and SharePoint Designer</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/05/07/discovering-the-setup-user-account-a-sharepoint-quote-whodunit-quote.aspx">Discovering the Setup User Account - A SharePoint &quot;Whodunit?&quot;</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/07/31/sharepoint-on-a-shoestring.aspx">SharePoint on a Shoestring</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/07/19/office-2010-a-quick-look.aspx">Office 2010 - A Quick Look</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/08/25/advanced-calculations-in-sharepoint-designer-workflow.aspx">Advanced Calculations in SharePoint Designer Workflow</a> (Part 1) </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/09/03/calculated-columns-and-spd-workflow-part-2.aspx">Calculated Columns and SPD Workflow Part 2</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/09/20/indexing-sharepoint-list-columns.aspx">Indexing SharePoint List Columns</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/10/12/knowing-your-limitations.aspx">Knowing Your Limitations</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/11/11/a-free-sharepoint-org-chart-web-part.aspx">A Free SharePoint Org Chart Web Part</a> </li>
<li><a href="http://www.thesanitypoint.com/archive/2009/11/12/sharepoint-virtualization.aspx">SharePoint Virtualization</a> </li></ul>
<h3>Looking Ahead</h3>
<p>With the planned official release of SharePoint 2010, 2010 the year looks like it will be just as exciting as 2009. One thing that is very clear is that Microsoft is putting a lot more effort into the supporting infrastructure for SharePoint. From native support in Visual Studio, to online documentation, to partner training.</p>
<p>While people may have been shocked by SharePoint's meteoric rise, nobody is going to be surprised by its continuing momentum.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Mon, 28 Dec 2009 07:11:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/General/default.aspx">General</category><category domain="http://www.thesanitypoint.com/archive/tags/Office 2010/default.aspx">Office 2010</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint 2010/default.aspx">SharePoint 2010</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint Designer/default.aspx">SharePoint Designer</category><category domain="http://www.thesanitypoint.com/archive/tags/Wiki/default.aspx">Wiki</category></item><item><title>SharePoint 2010 - Everything Old is New Again</title><link>http://www.thesanitypoint.com/archive/2009/12/13/sharepoint-2010-everything-old-is-new-again.aspx</link><guid isPermaLink="False">/archive/2009/12/13/sharepoint-2010-everything-old-is-new-again.aspx</guid><description><![CDATA[<div class="ExternalClassF9DDA11DDD554E6FAC78DF33EC822C33">
<h3><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_4_25711807.png"><img style="border-right-width:0px;margin:0px 10px 10px 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://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_1_25711807.png" width="125" height="124"></a> &quot;You Must Un-learn what You Have Learned!&quot;</h3>
<p>The public beta of SharePoint 2010 has been out for a few weeks now. Many people are discovering and blogging about some of the great new features you're going to find. Yet there have also been some significant changes to <i>existing</i> features. These are things you may have been using every day in SharePoint 2007 and WSS 3.0, but which in SharePoint 2010 have moved or changed in ways could cause confusion to experienced users. </p>
<p>In this article I'm going to focus on changes the typical end-user would see. In future articles I'll talk about changes for site owners and administrators.</p>
<h3>If it Ain't Broke…</h3>
<p>SharePoint 2007 took a lot of heat for having certain &quot;quirks&quot; in its user interface design. For 2010, much as they did for the Office clients in 2007, Microsoft put a lot of R&amp;D into what it would take to make SharePoint easier for typical users. This resulted in a lot of changes.</p>
<p>Human beings are creatures of habit. With certain notable exceptions, we don't much like change. Despite having worked through a non-intuitive learning curve, or sometimes because of it, we would rather keep doing things the way we are used to than learn new ways - even if those ways are better.</p>
<h3>...Fix it Anyway</h3>
<p>Only time will tell if the changes Microsoft made truly are for the better, but they've definitely been made. Let's start by looking at the basic team site page in SharePoint 2010 side by side with its SharePoint 2007 equivalent:</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_2_25711807.png"><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://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_25711807.png" width="644" height="465"></a></p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_8_25711807.png"><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://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_3_25711807.png" width="644" height="463"></a> </p>
<p>
<p>
<p>At first glance, they're pretty similar. The WSS logo has been replaced with a &quot;real&quot; picture, but there's still a banner, title area, quick launch, and content space. But look a little closer. The Site Actions menu has moved. No big deal there - lots of custom master pages move that around. But, the new placement is comparable to the Backstage/File menu in the new Office 2010 client applications, thus making it a &quot;natural&quot; place for users to look for &quot;application&quot;(site)-wide functions. This analogy becomes even more obvious when some of the other tabbed interface options start showing up. (You'll see that later in the article.)</p>
<h3>Where's MySite?</h3>
<p>Another subtle change is the &quot;personal&quot; section of the banner. In SharePoint 2007, you had separate entries for User ID, links, and a direct link to your &quot;My&quot; site. </p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_28_25711807.png"><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" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_13_25711807.png" width="308" height="53"></a></p>
<p>All of these options are now accessed through the menu under your name. There is also no reference to My &quot;Site&quot;, rather it simply calls it your &quot;Profile&quot;.</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_26_25711807.png"><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://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_12_25711807.png" width="230" height="244"></a> </p>
<p>I think the hope here, is that by de-emphasizing the &quot;independent site&quot; aspect of the profile and personal storage, while actually expanding its function (the new profile features could fill up several articles on their own), resistance to deployment in certain enterprises would be reduced.</p>
<h3>Bread-Crumbling Navigation</h3>
<p>Getting around from site to site, and from place to place within a site, has received a LOT of attention in SharePoint 2010. In many cases, this has meant &quot;reimagining&quot; the concept of a breadcrumb. </p>
<p>In the case of 2007 site navigation, a breadcrumb stretched across the top of the page content area:</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_18_25711807.png"><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://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_8_25711807.png" width="237" height="71"></a> </p>
<p>For large site hierarchies, this could become unwieldy as it stretched across the page. For 2010, Microsoft replaced it with a folder icon in the tab banner, which produces an indented hierarchical view of your current location:</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_20_25711807.png"><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://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_9_25711807.png" width="199" height="169"></a> </p>
<p>Going the other direction, in SharePoint 2007 lists and libraries selecting a view was accomplished by selecting it from a drop-down list on the toolbar.</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_22_25711807.png"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_10_25711807.png" width="610" height="201"></a> </p>
<p>In SharePoint 2010, there is no list toolbar. While you can drill into the ribbon and find the view settings, then select your view, that's a lot of clicking. Fortunately, Microsoft has turned the title panel into an in-site breadcrumb. When looking at a list or library, the last item in that breadcrumb is the name of the current view. If you look carefully, you'll notice that there is a &quot;down triangle&quot; arrow. That's your hint that this element is actually a dropdown menu, where you'll find all of your view selecting goodness.</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_24_25711807.png"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_11_25711807.png" width="600" height="174"></a></p>
<h3>Tied up with a Ribbon</h3>
<p>Of course, the rest of the stuff that used to live on a list or library's toolbar:</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_10_25711807.png"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_4_25711807.png" width="404" height="376"></a> </p>
<p>has been moved into the Library tab of the new ribbon interface:</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_12_25711807.png"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_5_25711807.png" width="644" height="245"></a> </p>
<p>By the same token, individual items that lived in an individual item's dropdown:</p>
<p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_14_25711807.png"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_6_107F9594.png" width="302" height="248"></a> </p>
<p>have been moved into the Documents (or other appropriate item's) tab:</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_16_107F9594.png"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/77/image_thumb_7_107F9594.png" width="560" height="210"></a></p>
<p><em>Note: In this case, the individual item dropdown is still there as well.</em></p>
<h3>Summary</h3>
<p>Some folks say, &quot;The more things change, the more they stay the same&quot;. There have been a lot of changes in SharePoint 2010. While there are some things that have stayed the same, they are actually in the minority. In this article, I have gone over some of the many changes to &quot;carry over&quot; functionality you will find when moving from SharePoint 2007 to SharePoint 2010. There are many more than I could hope to address in a single posting. I hope, however, that this article has given you some ideas of where to look if you can't find your favorite function where it used to be.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Sun, 13 Dec 2009 10:36:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Design/default.aspx">Design</category><category domain="http://www.thesanitypoint.com/archive/tags/Office 2010/default.aspx">Office 2010</category><category domain="http://www.thesanitypoint.com/archive/tags/Lists and Libraries/default.aspx">Lists and Libraries</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/Training/default.aspx">Training</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint 2010/default.aspx">SharePoint 2010</category><category domain="http://www.thesanitypoint.com/archive/tags/Upgrade/default.aspx">Upgrade</category></item><item><title>FeedBurner Under Control</title><link>http://www.thesanitypoint.com/archive/2009/11/27/feedburner-under-control.aspx</link><guid isPermaLink="False">/archive/2009/11/27/feedburner-under-control.aspx</guid><description><![CDATA[<div class="ExternalClass8DAFD1F425944738AD6728F93108CC8D">
<h3><a href="http://www.google.com/support/feedburner/bin/answer.py?hl=en&amp;answer=165769" target="_blank"><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCBD07000_0000[1]" border="0" alt="MCBD07000_0000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/76/MCBD07000_00001_thumb_77BD0903.png" width="132" height="124"></a>The Fix is In, Thanks to Tom Resing</h3>
<p>I have great news, thanks to fellow SharePointer <a href="http://blogs.microlinkllc.com/tresing" target="_blank">Tom Resing</a>. In my previous post I mentioned the problems the Community Kit for SharePoint:Enhanced Blog Edition has with the new link tracking parameters FeedBurner just started adding to their links.</p>
<p>In that post, I talked about the trials and tribulations of trying to get CKS:EBE working by installing an updated version. It turns out there was another approach to the problem. Although Google made the change to FeedBurner effective by default, Tom pointed out that they do offer an option to turn it off.</p>
<h3>The Quick Fix</h3>
<p>So, for those of you using both FeedBurner and CKS:EBE, here's the scoop. On the left menu in your FeedBurner Feed Stats Dashboard, in the Services section, is an option called &quot;Configure Stats&quot;:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/76/image_thumb_1_77BD0903.png" width="216" height="88"> </p>
<p>When you select Configure Stats, you have a section called &quot;Reach&quot;, which has several options. You need to uncheck the box for &quot;Track Clicks as a traffic source in Google Analytics&quot;:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/76/image_thumb_2_77BD0903.png" width="375" height="86"> </p>
<p>
<p>
<p>That's all there is to it! Save the settings, and everything should be back to &quot;normal&quot;.</p>
<p>Of course, it would have been nice if Google had posted a more conspicuous notice that they were making this change, and where it could be configured. It would have been even nicer if they had made the change &quot;opt in&quot; instead of &quot;opt out&quot;.</p>
<p>Nevertheless, what's done is done. You should now be able to click through from my RSS feed directly to the articles you are interested in.</p>
<p>I apologize for any inconvenience.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Fri, 27 Nov 2009 23:17:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/Blog/default.aspx">Blog</category><category domain="http://www.thesanitypoint.com/archive/tags/CKS-EBE/default.aspx">CKS-EBE</category><category domain="http://www.thesanitypoint.com/archive/tags/Customization/default.aspx">Customization</category><category domain="http://www.thesanitypoint.com/archive/tags/Patches/default.aspx">Patches</category></item><item><title>Burned by FeedBurner</title><link>http://www.thesanitypoint.com/archive/2009/11/25/burned-by-feedburner.aspx</link><guid isPermaLink="False">/archive/2009/11/25/burned-by-feedburner.aspx</guid><description><![CDATA[<div class="ExternalClass4BE27C562AB74A11AB354B7730FC09DD">
<h3><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj04314980000[1]" border="0" alt="MCj04314980000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/75/MCj043149800001_thumb_6F45FA1C.png" width="127" height="124">At Least They Didn't Burn the Turkey</h3>
<p>Just a quick note before I run off for the Thanksgiving holiday (USA). If you have been a subscriber to my RSS feed, you may have noticed a problem clicking through to my blog posts lately. This is because of a change that FeedBurner made a few weeks ago. They added extra parameter information to the connection string of links back to the blog.</p>
<p>This is theoretically a good thing, as it allows site logging to better determine where visitors are coming from. However, this blog uses the Community Kit for SharePoint: Enhanced Blogging Edition (CKS:EBE). The way CKS:EBE handles URLs doesn't allow it to correctly interpret these additional parameters. This resulted in broken page displays. You can still eventually navigate back to the right page, but it isn't as convenient as it should be.</p>
<p>I have just tested a patched version of CKS:EBE to resolve that problem. While the patch for the FeedBurner problem seems to work correctly, there are significant issues with other changes to the patched build of CKS:EBE. I noticed that my tag cloud was no longer resizing the keyword links to their proportions, for example, and there were major authentication problems. These glitches are bad enough that I decided to retract the update.</p>
<p>I apologize for the inconvenience. Rest assured, I'll continue working on getting links from FeedBurner working (without breaking everything else). </p>
<p>In the mean time, Have a Happy Turkey Day!</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Wed, 25 Nov 2009 17:39:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/Blog/default.aspx">Blog</category><category domain="http://www.thesanitypoint.com/archive/tags/CKS-EBE/default.aspx">CKS-EBE</category><category domain="http://www.thesanitypoint.com/archive/tags/Customization/default.aspx">Customization</category><category domain="http://www.thesanitypoint.com/archive/tags/Patches/default.aspx">Patches</category></item><item><title>SharePoint Virtualization</title><link>http://www.thesanitypoint.com/archive/2009/11/12/sharepoint-virtualization.aspx</link><guid isPermaLink="False">/archive/2009/11/12/sharepoint-virtualization.aspx</guid><description><![CDATA[<div class="ExternalClassB659EACC812945C6AE7476ABEF551C44">
<h3><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/73/MCj041154800001_44E4C4C8.png"><img style="border-right-width:0px;margin:0px 10px 10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="MCj04115480000[1]" border="0" alt="MCj04115480000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/73/MCj041154800001_thumb_44E4C4C8.png" width="122" height="124"></a>All of Your Eggs in One Basket?</h3>
<p>
<p>Every time a new version of a virtualization tool comes out, people get all excited about the possibility of reducing the costs of running their data centers. Most of them are thinking in terms of hardware consolidation, but virtualized environments also allow for new ways of handling resilience and recovery as well.</p>
<p>This is all well and good, but then you run into what I call &quot;the new hammer syndrome&quot;. The idea is, after you buy a new hammer, everything starts to look like a nail. You keep thinking of ways to apply this new tool. Some of them are great. Others, not so much.</p>
<h3>Virtualization and SharePoint</h3>
<p>SharePoint, in particular, frequently seems like a ripe target for virtualization. It has a multitude of roles, which can be (and often are) distributed among many servers. Data center managers see all of this hardware and envision collapsing it onto a single box. And, SharePoint is officially supported in virtualized environments. It seems like a match made in heaven, doesn't it?</p>
<p>But, not so fast! Take a step back and think about what I just said. You are taking all of these SharePoint roles, and spreading them out among multiple servers. Now you want to take all of these servers and virtualize them back onto a single piece of hardware? <em>Where is the sense in that?</em></p>
<p><strong>Why did you build out that many servers in the first place?</strong></p>
<p><em>Pausing while people try to gather back the pieces of their exploded heads from that bit of circular logic...</em></p>
<p>Profound, isn't it? Almost like a Zen koan.</p>
<h3>On Over-Engineering a Solution</h3>
<p>SharePoint will very happily run all of its roles on a single server (physical or virtual), if you want it to. So, why would you want to split the roles at all? There are really only two reasons (good ones, anyway) - performance, and resilience. (No, I don't consider being able to point at a monitoring station covering a half-dozen or more servers and saying &quot;Look at all of the systems I manage in my SharePoint farm&quot; a good reason.)</p>
<p>From a performance standpoint, some SharePoint roles are real resource hogs. The two big ones would be SQL Server and Search Indexing/Crawling. SQL Server, though not technically part of SharePoint, is hit pretty much constantly by nearly every SharePoint component, and so is almost always set aside on separate hardware. The search crawl process, though intense, is &quot;peaky.&quot; In other words, it goes through cycles of short bursts of intense activity, followed by periods of near idleness. In comparison, the web front-end functionality is a cake-walk. A single WFE server can handle potentially many thousands of users without breaking a sweat.</p>
<p>In fact, a big, modern server can probably handle hundreds, if not thousands, of users even with everything except SQL Server running on it. (Naturally, this depends upon just what those users are doing.) So performance is rarely the real reason for splitting off most of SharePoint's functions, except in very large environments.</p>
<p>That leaves resilience. Resilience is the ability of a system to keep on going, even if a piece of it fails. By splitting the SharePoint roles onto several servers, and having multiple instances of the roles that face your users, you can create a system which can tolerate a failure of any one component with minimal short-term impact. It is possible to take this too far, however. It isn't a case of &quot;if two are good, three must be better, and five are better still.&quot;</p>
<p>What good is having three or more web front end servers, when they all sit practically idle at singe-digit percent utilization - even during peak periods? Not very good at all. At a minimum, it is not a very efficient use of resources. This is the kind of thing that makes virtualization look really attractive.</p>
<h3>Balance</h3>
<p>So, is virtualization really the answer? Maybe. Or maybe not. Let's get back to that biggest of little questions - &quot;Why?&quot; </p>
<p>Why did you build out your farm onto multiple servers?</p>
<p>Did you build out this big farm because your usage is so heavy, you were stressing out anything less? Then you are almost certainly <em><strong>not</strong></em> a good candidate for virtualization. In this case, you've got your hardware optimized to its load. Virtualization is just going to add another layer, and if you're already fully loading your systems, you won't get any benefit from host sharing with other virtual servers. The only reason you might justify going virtual is to be able to quickly replicate a failed system from an image, or shift a running image onto another host. But can you handle the extra overhead?</p>
<p>Did you build out your farm for resilience? The minimum &quot;fully&quot; resilient SharePoint farm is a configuration I call &quot;2.1+&quot;. That's two servers running as WFE and Query servers (along with Excel Services in Enterprise Edition), one application server running the Index role (of which there can be only one per SSP) and optionally running other duplicated roles as well, &quot;plus&quot; a properly specified SQL cluster. This configuration can handle thousands of users, even with modest (by today's standards) hardware. In fact, from a performance standpoint it is probably still overkill for most organizations. Here, you might find some room to virtualize. But be careful - you split these roles out in the first place to avoid having a single point of failure. Virtualizing them and simply placing all of the VM's on a single host eliminates that benefit.</p>
<h3>And What About SQL Server?</h3>
<p>I decided to write about virtualization because I've been approached several times in the last week or so with folks asking about virtualizing the SQL Server side of SharePoint. Up until now, even when virtualization has been appropriate for some SharePoint components, I've always advised against making SQL virtual. But VMWare has just introduced a new version for which their marketing message is claiming that SQL virtualization is now a good thing.</p>
<p>Frankly, I'm not convinced. My main concern is that SharePoint is a <em>very</em> heavy user of SQL Server. Again it boils down to your utilization. Are your SQL Servers already CPU or disk I/O bound? If so, virtualization isn't going to help matters. If not, then you might be OK. Even if you decide to virtualize computation, I would still avoid virtualizing the data storage without first doing extensive load testing.</p>
<h3>Going Forward</h3>
<p>Ultimately, all computer configuration involves trade-offs. Cost, performance, and resilience are three corners of one of those &quot;pick any two&quot; engineering triangle conundrums. Virtualization doesn't eliminate the trade-off, but it can shift the balance toward the lower-cost corner. Whether or not it is appropriate in your case will depend upon your server load and tolerance for risk. In the case of SharePoint, you can achieve many of the same results as virtualization by simply re-consolidating the roles that were originally split off.</p>
<p>Mark Twain once said: &quot;Keep all of your eggs in one basket - then watch that basket!&quot; If you do decide to virtualize, make sure you take appropriate precautions. The Microsoft Consulting Services UK SharePoint Team has written an excellent <a href="http://blogs.msdn.com/uksharepoint/archive/2009/02/26/virtualizing-sharepoint-series-introduction.aspx" target="_blank">series of articles</a> on SharePoint virtualization. I suggest checking that out for more technical details.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Thu, 12 Nov 2009 19:53:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/WSS/default.aspx">WSS</category><category domain="http://www.thesanitypoint.com/archive/tags/Governance/default.aspx">Governance</category><category domain="http://www.thesanitypoint.com/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>A Free SharePoint Org Chart Web Part</title><link>http://www.thesanitypoint.com/archive/2009/11/11/a-free-sharepoint-org-chart-web-part.aspx</link><guid isPermaLink="False">/archive/2009/11/11/a-free-sharepoint-org-chart-web-part.aspx</guid><description><![CDATA[<div class="ExternalClass3750DB822E534B8FB0B3A136B8ADBEB4">
<h3><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj04348220000[1]" border="0" alt="MCj04348220000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/72/MCj043482200001_thumb_1F3B056A.png" width="124" height="124">Enhancing a CodePlex Project</h3>
<p>In this article, I'm going to get a bit more technical than is my normal wont. In fact, I'm going to go into Visual Studio, and show you some C# code as well.</p>
<p><em>(Waiting a few minutes for folks who know me to pick their jaws up off the floor, or even find some smelling salts... Yes, Virginia, I really can program when I have to. :) I just very rarely have to.)</em></p>
<p>That doesn't mean I'm going to be building this project from scratch. Far from it. So, if you're looking for info on how to build a .wsp solution package, this isn't the article for you. I am going to talk a bit about user choice, web part properties, a programming technique called &quot;recursion&quot;, and the SharePoint API (in particular, accessing the User Profile store).</p>
<p>What I'm going to do is show you how to fulfill a very common business requirement by starting with a fairly simple CodePlex project, and tweaking it until it is something that does just what you need.</p>
<h3>A Common Request</h3>
<p>Virtually every client I've implemented SharePoint for has asked for an organizational chart. The problem is, there aren't very many org chart web parts out there for SharePoint, and those that are, tend to have issues (usually performance) - especially if you have a fairly large organization.</p>
<p>SharePoint Server 2010 finally makes a really cool organization chart part of the package. It is Silverlight based, and works pretty fast. Unfortunately, that's 2010, and it is going to be a while before many companies are ready to deploy it. We need something that will work for &quot;today&quot;.</p>
<h3>Finding the CodePlex Project</h3>
<p>So what do you do? Well, a quick online search reveals that there is indeed an org chart part on CodePlex, called (quite originally) &quot;<a href="http://www.codeplex.com/orgchartpart" target="_blank">OrgChartPart</a>&quot;. This was written by <a href="http://blogs.msdn.com/rodneyviana/default.aspx" target="_blank">Rodney Viana</a>. Looking at the specs, it sounds promising:</p>
<ul>
<li>It reads profile information from SharePoint </li>
<li>It uses a free JavaScript Org Chart rendering engine </li>
<li>And of course, it is free, too! </li></ul>
<p>What's not to like?</p>
<p>There is a bit, as it turns out, but let's start with the good. Installing the OrgChartPart is a breeze. Download the .wsp file from CodePlex, install it with the &quot;stsadm -o addsolution&quot; command, and deploy it to your web application(s). You will then need to add the part to your web part gallery (there is a feature that does this, or you can do it manually), then add it to a page. (I suggest you add it to a web part page that has nothing else on it, for reasons you will see in a moment.) This takes 5 minutes, tops.</p>
<p>The web part reads your MOSS profile store, and emits the chart. Just like that, you're done!</p>
<p>On the surface, that doesn't sound too bad. But dig a little deeper, and you find a big red flag - the author warns that you shouldn't use the part if you have more than 500 profiles in your organization. Of course, if you have more than 500, you've got a problem.</p>
<p>But even if you have fewer than 500 profiles, you might not like the results. Consider the following clip of the chart initially rendered by this part:</p>
<p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/72/image_2_1F3B056A.png"><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://www.thesanitypoint.com/Lists/Posts/Attachments/72/image_thumb_1F3B056A.png" width="644" height="417"></a> </p>
<p>This is a pretty complicated organization - it doesn't fit on the screen, and it is completely expanded by default. But, there's another issue. The chart looks a little &quot;top heavy&quot;. That's because the Active Directory includes a number of accounts that aren't actually users, and therefore don't have associations in the hierarchy. Looking closer, you can see that Patricia Doyle, the CEO, has conference rooms as peers! There's also some clipping of titles and departments.</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/72/image_thumb_1_1F3B056A.png" width="504" height="260"> </p>
<p><em>Note: This is technically a problem with the Active Directory and/or its import. In theory, you could set up the AD/Profile import to exclude non-person entities. But, that's another story... :)</em></p>
<h3>Looking Under the Hood</h3>
<p>Still, even with those issues, you can see the potential in this part. </p>
<p><em>Note: Most of the remainder of this article discusses how the OrgChartPart was originally implemented, and how I updated it. If you just want the end results, you can download the original source from CodePlex, plus <a href="http://www.thesanitypoint.com/Goodies/OrgChartPart.zip" target="_blank">my replacement OrgChartPart.cs</a> file and rebuild the solution. (I have also given the code updates to Rodney, who may update the actual CodePlex project.)</em></p>
<p>Fortunately, as with most CodePlex projects, we have access to the source code. I downloaded the source and opened the project in Visual Studio. What we see is, the part is actually quite simple. There is one .cs file (the two in the image below include my edited version, plus the original) and the <a href="http://www.codeproject.com/KB/scripting/graphic_javascript_tree.aspx" target="_blank">ECOTree JavaScript library</a>. ECOTree is what actually does the heavy lifting of drawing the chart. By default, OrtChartPart uses just a fraction of the power of this library (follow the link above for more details).</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/72/image_thumb_6_4D285822.png" width="302" height="576"> </p>
<p>There is also a &quot;departmentconfig.xml&quot; file hiding in the Layouts folder of the 12 hive. Hmmm...</p>
<p>Looking at the code itself, we find there are four main functional areas beyond the basics needed to render a web part:</p>
<ol>
<li>Handling that department file </li>
<li>Crawling the profile store </li>
<li>Building a profile render block </li>
<li>Building the chart </li></ol>
<h3>Now, We Tweak</h3>
<p>In the rest of this article, I'm going to look at each of the sections I described above, tell you how the original code worked, and show you what I did to update them. While I won't embed the entire source in the article, you can easily <a href="http://www.thesanitypoint.com/Goodies/OrgChartPart.zip" target="_blank">download it</a> if you want to examine everything in context.</p>
<h4>On the Department File</h4>
<p>For now, I'm just going to say that while the idea of mapping the department information in the profile to department home pages is admirable, the way it was implemented was causing some serious performance issues, and would be a long-term maintenance headache. Therefore, I commented out the two lines that actually make use of it (249 and 267 in my updated file), and replaced the link rendering with a simple text rendering. Here are the original and replaced lines from the updated code ( 267, 268).</p>
<p><font size="2" face="Courier New">//this.department = config.Find(EmptyIfNull(Profile[PropertyConstants.Department])); <br>this.department = EmptyIfNull(Profile[PropertyConstants.Department]); </font></p>
<p>&quot;config.Find&quot; is part of a config object that is defined elsewhere in the code. For purposes of this article, though, we're just going to ignore it.</p>
<h4>Crawling the Profile Store</h4>
<p>The profile crawl itself takes place in a function called PopulateOrg(). Examining this routine, a few things stand out. </p>
<p>First, there are two different ways for nodes to be added to the chart. One uses information read from a user's profile, the other feeds static information into a node. (This is used primarily to display an error message, if needed.)</p>
<p>Second, the population routine reads the entire profile store in one fell swoop. Combined with the inefficiency of the department link mapping mentioned above, this is a big part of the performance limiting the part to organizations with 500 or fewer profiles.</p>
<p>Finally, hidden in this routine (but commented out) is a nice little set of sample data.</p>
<p>At its core, an organization is a hierarchy. A hierarchy is made of parents and children. Technically, as long as you know the parent of each node, you can manually construct the organization. This is the approach originally taken by this web part. </p>
<p><font size="2" face="Courier New">foreach (UserProfile pf in pmManager) <br>{ <br>     Details dt = new Details(); <br>     dt.AddProfile(pf, this.Page.Request); </font></p>
<p><font size="2" face="Courier New">     if (dt.TrimFullName != String.Empty) <br>         employeeList.Add(dt); </font></p>
<p><font size="2" face="Courier New">}</font></p>
<p>However, a UserProfile object itself has methods for listing its children and ancestors directly. This means that we can easily start at any point in the tree, and generate the organization descendent from it, as well as the chain of command above it.</p>
<p>The ancestors are represented in a single collection, called through the GetManagers() method. The first level of children are just as easily retrieved with the GetDirectReports() method. However, if we want more than one level of child, we would then need to call the GetDirectReports() method for each child returned in the previous call.</p>
<p>If you try doing this with loops, things can get complicated pretty quickly. However, there is a simple way to to handle an arbitrary number of child nodes, to an arbitrary depth. This is a technique called &quot;recursion&quot;. Essentially, you create a function that calls itself. In order to keep it from running forever, one of the parameters that should be passed to a recursive function should be a &quot;depth&quot; limiter. Within the function, the child calls decrement this limiter, and stop calling when it reaches a threshold level. In my update, I create the recursive function addChildren(). This takes the starting profile, and the depth limiter as parameters.</p>
<p><font size="2" face="Courier New">protected void addChildren(UserProfile Parent, int levels) <br>{ <br>    try <br>    { <br>        foreach (UserProfile pf in Parent.GetDirectReports()) <br>        {  <br></font><font size="2" face="Courier New">           Details dt = new Details(); <br>            dt.AddProfile(pf, this.Page.Request, false); </font></p>
<p><font size="2" face="Courier New">            if (dt.TrimFullName != String.Empty) <br>            { <br>                employeeList.Add(dt); <br>                if (levels &gt; 0) <br>                    addChildren(pf, levels - 1); <br>            } <br>        } <br>    } <br>    catch (Exception ex) <br>    { <br>        AddInList(&quot;1&quot;, &quot;&quot;, &quot;Error&quot;, &quot;&quot;, ex.Message);  <br></font><font size="2" face="Courier New">    } <br>} </font></p>
<p>
<p>Notice also that I have added a parameter to the AddProfile method of the details (dt) object. This third parameter allows me to force the profile being added to act as a root, or top-level, node. (This is used for the management chain of command.)</p>
<h4>Giving Your Users Choices</h4>
<p>Looking at the stuff I've described in the preceding section, there is something very different from the original implementation - instead of crawling the whole profile store, I crawl a specified subsection. That requires two pieces of input - the node I plan to start with, and how deep I want to crawl.</p>
<p>Fortunately, when you create SharePoint Web parts, you can easily allow the user to enter configuration information. In this case, I am actually going to give the user three options. The third will allow the user to show the sample data instead of the active directory. (Naturally, I uncommented the sample population section, and wrapped the two population methods in an if...else block.)</p>
<p>To add a property to a web part, you add some descriptive information to say how the property is to be displayed. You also set up a public property variable to appear in the configuration pane, and a private variable to use in your code. The private variable can include a default value. The public property includes a get and a set block. While these three properties simply take the value as given, you will see later that this isn't the only option.</p>
<p><font size="2" face="Courier New">[Personalizable(PersonalizationScope.Shared)] <br>[WebBrowsable(true)] <br>[System.ComponentModel.Category(&quot;Org Chart Settings&quot;)] <br>[WebDisplayName(&quot;StartProfile&quot;)] <br>[WebDescription(&quot;Enter the top user to display:&quot;)] <br>public string StartProfile <br>{ <br>    get <br>    { <br>        return startProfile; <br>    } <br>    set { startProfile = value; } <br>} <br>private string startProfile; </font></p>
<p><font size="2" face="Courier New">[Personalizable(PersonalizationScope.Shared)] <br>[WebBrowsable(true)] <br>[System.ComponentModel.Category(&quot;Org Chart Settings&quot;)] <br>[WebDisplayName(&quot;ChartDepth&quot;)] <br>[WebDescription(&quot;Subordinate levels to display:&quot;)] <br>public int ChartDepth <br>{ <br>    get <br>    { <br>        return chartDepth; <br>    } <br>    set { chartDepth = value; } <br>} <br>private int chartDepth = 1; </font></p>
<p><font size="2" face="Courier New">[Personalizable(PersonalizationScope.Shared)] <br>[WebBrowsable(true)] <br>[System.ComponentModel.Category(&quot;Org Chart Settings&quot;)] <br>[WebDisplayName(&quot;Show Sample Data&quot;)] <br>[WebDescription(&quot;Show sample data instead of profile info:&quot;)] <br>public bool ShowSample <br>{ <br>    get <br>    { <br>        return showSample; <br>    } <br>    set { showSample = value; } <br>} <br>private bool showSample = true; </font></p>
<p>This is how the properties look in the Web part configuration pane. The &quot;CacheTime&quot; parameter was included in the original part (though it is unused in the code). I'll discuss the &quot;Left To Right&quot; parameter later.</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/72/image_thumb_4_4D285822.png" width="247" height="261"></p>
<p>You might also notice that I set the default value of showSample to true. This allows the user to place the web part on the page and see a reasonable representation of its function, without needing to first set the start point and depth.</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/72/image_thumb_2_4D285822.png" width="607" height="429"> </p>
<p><em>Note: The chart initially renders with only the first layer of children open. I expanded it for this screen shot.</em></p>
<h4>Rendering a Profile</h4>
<p>Each node on the chart is constructed of HTML. The HTML is assembled in the ReturnItem() function.</p>
<p>I wanted to enable two functions not already present - showing the user's profile picture, and allowing the user to &quot;re-home&quot; the chart on another node in order to enable navigation of the entire organization in convenient sections. This meant I needed to add two properties to the details object, and then add the code to display these properties appropriately in the chart.</p>
<p>In order to make the re-home function work, I added an override to the StartProfile. Essentially, if there is a rootuser query string parameter, the profile specified there will be used instead of the one set in the web part property. The SetRoot link calls the current page with rootuser set to the selected profile.</p>
<p>In addition to the actual HTML, however, the look of the node contents are controlled by styles defined in the ECOTree.css file. In order to allow the picture to render, as well as permitting the text to fit, I needed to modify the .econode class in this file as follows.</p>
<p><font size="2" face="Courier New">.econode { <br>    text-overflow: clip; <br>    font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; <br>    font-size: xx-small; <br>        color: White; <br>    padding: 2px; <br>}</font></p>
<h4>Rendering the Chart</h4>
<p>Just as we built up a node by assembling the HTML, the chart itself is built by assembling JavaScript. One of the things I did was to examine the functions provided by the ECOTree library. I found that it offered a lot of flexibility that wasn't currently in use. I felt the most important was the ability to set the orientation. Here's where that &quot;Left to Right&quot; checkbox comes into play. The library uses a parameter .RO_TOP or RO_LEFT to decide whether the chart is top to bottom, or left to right.</p>
<p>This is the code that reads and sets that web part parameter:</p>
<p><font size="2" face="Courier New">[Personalizable(PersonalizationScope.Shared)] <br>[WebBrowsable(true)] <br>[System.ComponentModel.Category(&quot;Org Chart Settings&quot;)] <br>[WebDisplayName(&quot;Left To Right&quot;)] <br>[WebDescription(&quot;Root at left, otherwise at top:&quot;)] <br>public bool RootLeft <br>{ <br>    get <br>    { <br>        if (chartOrient == &quot;LEFT&quot;) <br>        { <br>            return true; <br>        } <br>        else <br>        { <br>            return false; <br>        } <br>    } <br>    set <br>    { <br>        if (value) <br>        { <br>            chartOrient = &quot;LEFT&quot;; <br>        } <br>        else <br>        { <br>            chartOrient = &quot;TOP&quot;; <br>        } <br>    } <br>} <br>private string chartOrient = &quot;TOP&quot;;</font></p>
<p>This demonstrates the kind of things you can do with the get and set blocks of a parameter. The user gets to the see the checkbox that represents a binary choice, but the internal variable is a string, meaning that we can render the part simply appending the string value without inserting an &quot;if&quot; block. </p>
<p><font size="2" face="Courier New">myTree.config.iRootOrientation = ECOTree.RO_&quot;); <br>sb.Append(chartOrient); <br>sb.Append(@&quot;; <br></font></p>
<h3>The Results</h3>
<p>The image below shows you how the revised chart looks with the same profile store shown in the first image.</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/72/image_thumb_3_4D285822.png" width="560" height="461"></p>
<p>This is a much more manageable presentation. It allows the user to drill into the organization as needed, and since we set the starting node on our CEO, those conference rooms who don't report to anybody are nowhere to be found.</p>
<p>I hope this article has shown you how easy it is to stand upon the shoulders of giants when looking for features to add to SharePoint. I built upon the CodePlex OrgChartPart, which itself leveraged the ECOTree charting library.</p>
<p>There are many more things you could do with this web part. You could add options to select the color of the nodes, for example. Or give users a check-box to render the entire organization at once, as the original part did.</p>
<p>The options are limited only by your imagination!</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Wed, 11 Nov 2009 00:15:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Customization/default.aspx">Customization</category><category domain="http://www.thesanitypoint.com/archive/tags/Data Integration/default.aspx">Data Integration</category><category domain="http://www.thesanitypoint.com/archive/tags/Design/default.aspx">Design</category><category domain="http://www.thesanitypoint.com/archive/tags/Programming/default.aspx">Programming</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Off Topic - String Along with Ford</title><link>http://www.thesanitypoint.com/archive/2009/11/06/off-topic-string-along-with-ford.aspx</link><guid isPermaLink="False">/archive/2009/11/06/off-topic-string-along-with-ford.aspx</guid><description><![CDATA[<div class="ExternalClass53D28EC7E35C4F0C85044ECC41E2BF16">
<h3><img style="border-right-width:0px;margin:0px 10px 10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="MCj04113980000[1]" border="0" alt="MCj04113980000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/71/MCj041139800001_1_25F352D7.png" width="109" height="124">Buried in Bureaucracy and Rebuffed</h3>
<p><em>Note: This is a follow-up piece to my <a href="http://www.thesanitypoint.com/archive/2009/09/12/off-topic-in-a-fix-with-ford.aspx" target="_blank">&quot;In a Fix with Ford&quot;</a> article. See that if you need some additional background.</em></p>
<p>Where does one begin a tale of woe? For that, my friends, is what we have here. Six weeks ago, I wrote my original article with high hopes that I could prevail upon Ford to do the right thing, and fix the known design problems with my early production 2006 Ford Fusion. Little did I know that I had about as much chance of success as Don Quixote in tilting at windmills.</p>
<h3>An Apology to the Messenger</h3>
<p>First, I want to express my appreciation to Marq Boggs, Service Manager at Don Hinds Ford, in Fishers, IN. He had the great misfortune of being bearer of the bad news that Ford had no intention of fixing my car's problems. In my initial article, it may have seemed that I was &quot;killing the messenger&quot; by placing a big part of the blame on his dealership. That was not my intent, and if it was taken that way, I humbly apologize.</p>
<p>In fact, Marq has been of great assistance: first, in confirming that my car does indeed suffer from every one of the issues described in my first article; second, in taking it upon himself to address one of the problems by flashing my car's computer with up-to-date firmware; and finally, in chasing through some of the bureaucracy at Ford in an effort to find someone willing to address my problems.</p>
<p>Unfortunately, he was not successful. </p>
<h3>Pointing Fingers, Hot Potatoes, and Monkeys in the Middle </h3>
<p><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="MCj02502290000[1]" border="0" alt="MCj02502290000[1]" align="right" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/71/MCj025022900001_thumb_25F352D7.png" width="167" height="232">The implication here is, that Ford has refused to repair my car. Interestingly, Ford customer service's own reply to me (I'll call it the &quot;kiss-off&quot; letter - others might choose a more colorful term) seems to imply that the dealership was the one with the final say in the matter: </p>
<blockquote>
<p>Dear Woodrow Windischman, <br>We have looked into this matter and <strong>our records indicate that a decision has been made by your servicing dealership</strong>.  In addition, they suggested that you take your vehicle to the selling dealership and see if they would provide additional assistance.  <strong>Please be advised that the CRC can not overturn this decision.</strong>  However, to ensure our records are complete we have documented your feedback. <br>We would like you to know that we understand your concern and that we appreciate the time that you have taken to write us about this issue.  </p></blockquote>
<p>(Emphasis added)</p>
<p>I talked to Marq again to see what was going on. It seems that each dealer is allocated a certain amount of &quot;customer loyalty&quot; money by Ford. This is supposed to be used to provide exceptional services to the dealer's customers. The official bottom-line position of Ford was that they weren't going to pay to fix my car, but if the dealer wanted to, they could provide the repairs out of these loyalty funds. Here's the rub - I didn't buy my car from Don Hinds, and I'm not really local (for now, I'm just in Indy on a contract), meaning future purchase prospects are limited as well. So, there really isn't a good reason for them to use a big chunk of these (rather scarce) resources on my car. I can understand this, and there are no ill-feelings from me on this account.</p>
<p>What about my &quot;selling dealership&quot; (Rice Ford, in Warsaw, IN - where I actually bought my car)? Well, I spoke to Bud Shanks, the service manager, and there was good news and bad news. The good news is, he and Mr. Rice agree that Ford should be responsible for fixing my car. The bad news is, they agree that <strong><em>Ford</em></strong> should be responsible for fixing my car. Therefore they don't feel it is appropriate to tap their loyalty funds for my repairs either. There is another complication - as I mentioned, I'm on a contract that has me over 100 miles away from the dealership during normal shop hours. In order for me to take my car there for service, I would need to take at least a day away from work, thus negating a big part of any benefit from having the repair covered.</p>
<h3>How to Make a Billion Dollars</h3>
<p>A company is more than its most recent marketing campaigns. I was proud of the fact that Ford didn't accept bail-out money from the government last year. I remember their &quot;Quality is Job 1&quot; campaign. I remember when they used to offer lifetime warranties on repair service. Notwithstanding the (truly minor) problems at issue here, I've been very happy with the service my Fusion has given me.</p>
<p>It is ironic that just a few days after I got their final kiss-off, Ford announced that they had made about $1,000,000,000 (that's one billion dollars) in profit during the quarter of my discontent. This during one of the worst economic downturns in recent memory. (No, how ever much the media likes to portray it that way, it isn't even close to the &quot;real&quot; depression of the 30's, or even the &quot;stagflation&quot; times of the late 70's. Doesn't anyone remember the double-digit mortgage interest rates?)</p>
<p>According to my experiences, and based on conversations with the dealers, a big part of this profit has been made by cutting back on the service and support provided to its customers and dealer base. Yet this &quot;reputation&quot; for quality and service is one of the reasons Ford was able to make sales while others were foundering.</p>
<h3>The Big Picture</h3>
<p>Everyone involved here agrees that it should be Ford's responsibility to fix my car. Everyone, that is, except Ford themselves.</p>
<p>Of course, whether paid for by Ford or not, I need to get my car fixed. This whole adventure started when I had to pay an ESP extended warranty deductible for a repair on my shifter, who's design was changed due to the very problem I suffered from. That case was made even more frustrating by the fact that the deductible was almost the entire cost of the repair. That ESP is still in place, and some of the issues I'm having are covered under that plan. Of course, I'll have to pay another deductible. In the end, given the cost of the ESP to begin with, I'll end up having paid the entire cost of the repairs, and then some.</p>
<p>If you've followed my blog for the last few months, you know that my life has been filled with highs and lows lately. In the grand scheme of things, is getting a few non-life threatening car repairs paid for all that important? Not really.</p>
<p>But that still doesn't make the way Ford has been treating its dealers and customers &quot;right&quot;.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Fri, 06 Nov 2009 07:18:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Off-Topic/default.aspx">Off-Topic</category></item><item><title>SharePoint 2010 Hits the Jackpot</title><link>http://www.thesanitypoint.com/archive/2009/10/27/sharepoint-2010-hits-the-jackpot.aspx</link><guid isPermaLink="False">/archive/2009/10/27/sharepoint-2010-hits-the-jackpot.aspx</guid><description><![CDATA[<div class="ExternalClass75A3B91A539348ECA072111C3290AC1D">
<h3><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj02345130000[1]" border="0" alt="MCj02345130000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/70/MCj023451300001_thumb_7DC86FD2.png" width="122" height="124"></h3>
<h3>SharePoint Conference 2009 Wrap-up</h3>
<p>The show is over, but the adventure is only beginning. As stated before, SPC09 in Las Vegas was the coming out party for SharePoint 2010. While we will still have to wait a few weeks for stable bits to play with, over 7000 attendees came away with a treasure trove of knowledge and documentation.</p>
<p>In my previous installments, I talked about the venue, the atmosphere, and the keynotes. I've also touched on some of the new Office integration story.</p>
<p>Of course, the star of the show was SharePoint 2010 itself. So, I'm going to dedicate the rest of this post to a punch-list of changes/improvements. I know I've missed a few (or more than a few) new elements, or misunderstood a detail or two, but even so the list is impressive. You'll see that the SharePoint team at Microsoft have not been resting on their laurels during the three years we've been waiting. Over the next few months, I'll fill in more details on the individual features, correct what I got wrong, or update you on the inevitable feature changes as things get closer to release.</p>
<h3>The Basics</h3>
<p>It seems Microsoft can't release a new version of SharePoint without tweaking the names a bit. Just as &quot;SharePoint Portal Server&quot; and &quot;SharePoint Team Services&quot; became &quot;Microsoft Office SharePoint Server (MOSS)&quot; and &quot;Windows SharePoint Services (WSS)&quot; in the 2007/3.0 wave, For 2010/4.0, they're simply called &quot;SharePoint Server&quot; and &quot;SharePoint Foundation&quot; respectively.</p>
<p>The Public Beta of SharePoint 2010 is to be released in November 2009. </p>
<p>The actual product release is planned for the first half of 2010.</p>
<p>It is still &quot;SharePoint&quot;. Although many weaknesses have been addressed, core functionality remains essentially similar, with lists, libraries, site model, etc... Since &quot;form follows function&quot;, many of the visual elements will be very familiar.</p>
<h3>Infrastructure and Administration</h3>
<ul>
<li>Requires 64bit throughout the stack </li>
<li>Windows Server 2008 as a baseline OS </li>
<li>Complete redesign of Central Admin </li>
<li>Shared Services: No more monolithic &quot;Shared Services Provider&quot;. Instead things formerly grouped under an SSP are individual Shared Service Applications. </li>
<li>Search architecture changes: index role can be spread across multiple servers </li>
<li>&quot;Normal&quot; SharePoint search now scale-tested to around 100 million items. </li>
<li>Business Data Catalog transformed into Business Connectivity Services, and becomes part of SharePoint Foundation (no more enterprise CAL required). </li>
<li>BCS info becomes available throughout the Office 2010 suite, not just SharePoint, and offers read/write capability. </li>
<li>FAST Search is available as an add-on for Enterprise CAL users at per-server pricing. </li>
<li>Enterprise-wide metadata support </li>
<li>Lists are more scalable, and can be &quot;external&quot; to the SharePoint content database. Admin can set maximum returned items to prevent bogging the system down. </li>
<li>Servers can be upgraded without enabling the new UI by default. Site owners can then switch over when their members are ready for the change. </li>
<li>AD Group Policies can prevent installation of SharePoint on unapproved systems. </li>
<li>Even more databases. </li>
<li>Better auditing and reporting in-box. </li>
<li>&quot;License&quot; logging to see which features are used. </li>
<li>Allowed to read log/report database to build custom reports. </li></ul>
<h3>Client Facing</h3>
<ul>
<li>UI: No IE6 support for collaboration/team sites. Can still make IE6 friendly publishing sites. </li>
<li>Firefox 3.x is a Level 1 browser. </li>
<li>&quot;Accessible&quot; CSS-based layouts, and XSLT-based list views. </li>
<li>Table-based layouts are gone </li>
<li>Cleaner, modernized themes. </li>
<li>Ribbons are primary control mechanism, just like Office. </li>
<li>There is no longer a separate basic &quot;Wiki&quot; site type in SharePoint Foundation. (However, there is now a publishing-based &quot;Enterprise Wiki&quot; site in SharePoint Server.)</li>
<li>All team sites can have wiki functionality enabled, and made the default. </li>
<li>Theme colors can be imported from PowerPoint themes for compliance with corporate standards. </li>
<li>The GroupBoard template is available out of the box. </li>
<li>List lookups can pull multiple fields </li>
<li>List lookups support referential integrity (blocking/cascading deletes) </li>
<li>Field validation </li></ul>
<h3>Social</h3>
<ul>
<li>Major overhaul of profiles and My Sites. </li>
<li>Includes &quot;status&quot; functionality (i.e. FaceBook/Twitter style updates) </li>
<li>Unique org-chart presentation </li>
<li>&quot;Folksonomy&quot; to support user-created shared tags in addition to Enterprise &quot;Taxonomy&quot; metadata. </li>
<li>Can tag non-SharePoint content</li></ul>
<h3>Search (Standard)</h3>
<ul>
<li>Improved handling of metadata </li>
<li>Faceting (now called &quot;refinement&quot;) is built-in </li>
<li>Social input to ranking </li></ul>
<h3>Search (FAST)</h3>
<ul>
<li>All standard SP Search features </li>
<li>Deep refinement (polls entire result set to get actual counts) </li>
<li>Concept metadata from unstructured content </li>
<li>User-role tailored result sets. </li>
<li>Massive scalability </li>
<li>Superset of standard SP Search API </li>
<li>Managed through the same admin UI </li></ul>
<h3>SharePoint Designer 2010</h3>
<ul>
<li>Complete UI redesign, based on SharePoint &quot;artifacts&quot; rather than file structure. </li>
<li>SPD 2010 tied to SP 2010. Will not work on older versions or non-SharePoint sites, and old SPD won’t work against SP 2010 sites. </li>
<li>Much better Visual Studio integration – exports Solutions that can be imported into VS for both site designs and workflows. </li>
<li>SPD Workflows can be independent of specific lists. </li>
<li>SPD Workflows can easily be exported into either Visio 2010 or Visual Studio 2010 </li>
<li>Finer administrative control over what SPD users can do. </li>
<li>Page model is the same, but many changes based on new CSS layouts and Theme engine. </li></ul>
<h3>Development</h3>
<ul>
<li>The &quot;platform&quot; aspect of SharePoint receives a lot of emphasis with this version </li>
<li>Use Visual Studio 2010 for full visual web part design and other SharePoint integration points </li>
<li>Can install SharePoint on a client OS (Vista or Windows 7, 64-bit) for dev sandbox. </li>
<li>Much better developer documentation out of the gate </li>
<li>Client Side object model to make Silverlight controls and web parts easier to develop. </li>
<li>REST, ATOM, and other web service interfaces fully supported. </li></ul>
<h3>Conclusion</h3>
<p>In his keynote and his write-up from a couple weeks ago, Jeff Teper pointed out that the vision and purpose of SharePoint hasn't really changed much from the original 1-page proposal over 10 years ago. Yet the implementation of that vision has grown by leaps and bounds over the succeeding versions. I hope I have shown you that SharePoint 2010 will continue in that tradition. As I said earlier, I'm sure I've missed things. These were just the elements that stuck out as I was going through sessions and reading material. But I have to admit, I'm excited.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Tue, 27 Oct 2009 23:52:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://www.thesanitypoint.com/archive/tags/Design/default.aspx">Design</category><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/Office 2010/default.aspx">Office 2010</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint Designer/default.aspx">SharePoint Designer</category></item><item><title>Off Topic - A Brief Tribute</title><link>http://www.thesanitypoint.com/archive/2009/10/26/off-topic-a-brief-tribute.aspx</link><guid isPermaLink="False">/archive/2009/10/26/off-topic-a-brief-tribute.aspx</guid><description><![CDATA[<div class="ExternalClass863EF9E5B8A74B4DB2F7A08DDC59D80F">
<h3><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj04299890000[1]" border="0" alt="MCj04299890000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/69/MCj042998900001_1_5BECA540.png" width="125" height="124">In Loving Memory of Three Wonderful People</h3>
<p>I know you are expecting my wrap-up of the SharePoint conference here, and that will still be coming. But, for now, I need to digress. While I was in Las Vegas, I received word that my grandmother on my mom's side (my last grandparent) had passed away. This caps a series of three losses for me and my family over the past few weeks. In addition to my grandmother, Mary Cary Rudes, I lost and attended services for my uncle, Dr. Les Meyer, and my brother's wife's father, Tom Moore.</p>
<p>Each, in their own way, spent much of their lives helping others. My grandmother was an English teacher and patron of the arts. Uncle Les was not only a physician, but the founder of many programs that focused on helping children with orthopedic problems. Tom Moore was a man of many talents, from culinary arts, to jazz piano, which he always gladly shared with those around him.</p>
<p>No matter the situation, whether expected or sudden, the loss of a loved one has an impact on our hearts. The best we can hope to do is turn it into a reflection of the impacts of their lives, and use that reflection as an inspiration to share of ourselves as they shared with us.</p>
<p>Tom, Les, Grandma, may your journey into eternity be filled with joy and peace.</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td valign="top" width="133">
<p align="center"><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://www.thesanitypoint.com/Lists/Posts/Attachments/69/image_3_5BECA540.png" width="214" height="184"> <br>Thomas Moore</p></td>
<td valign="top" width="133">
<p align="center"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/69/image_9_5BECA540.png" width="170" height="184"> <br>Les Meyer </p></td>
<td valign="top" width="133">
<p align="center"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="grand1" border="0" alt="grand1" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/69/grand1_3_5BECA540.jpg" width="147" height="184">  <br>Mary Cary Rudes </p></td></tr></tbody></table></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Mon, 26 Oct 2009 19:54:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Off-Topic/default.aspx">Off-Topic</category></item><item><title>SharePoint Conference 2009 - Midpoint Musings</title><link>http://www.thesanitypoint.com/archive/2009/10/21/sharepoint-conference-2009-midpoint-musings.aspx</link><guid isPermaLink="False">/archive/2009/10/21/sharepoint-conference-2009-midpoint-musings.aspx</guid><description><![CDATA[<div class="ExternalClass00999F336AAF4407888B2BC8637B0993"><h3><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="ponder" border="0" alt="ponder" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/68/ponder_thumb_41AE2EE6.gif" width="116" height="124">Keynotes, Sessions, and More </h3>  <p>I can't believe how fast the time has gone. We're half-way through the Microsoft SharePoint Conference 2009 already. If you're following me on <a href="http://twitter.com/woodywindy" target="_blank">Twitter</a>, you'll know some of the things that caught my attention as I was sitting through the keynotes and sessions. I really haven't had much time to ponder things too deeply, but there are some items that stand out.</p>  <h3>&quot;SharePoint is Magical&quot;</h3>  <p><img style="border-bottom:0px;border-left:0px;margin:0px 0px 10px 10px;display:inline;border-top:0px;border-right:0px" title="ballmer" border="0" alt="ballmer" align="right" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/68/ballmer_thumb_41AE2EE6.jpg" width="200" height="244"> During Steve Ballmer's keynote, this was <em>his</em> answer to the question &quot;What is SharePoint?&quot; Although that seems more than a little hyperbolic, in some ways he's right. Not so much the product itself (though I am beginning to wonder), but the effect it is having. </p>  <p>Consider this: The SharePoint Conference has over 7,000 people participating. That's more than attended TechEd this year. TechEd is covers all of Microsoft's products and technologies. Yet this conference, for a single product, is bigger.</p>  <p>But, that is almost a mischaracterization. Although SharePoint is a single product (well, family of products), its impacts are far greater. Almost every other product Microsoft produces is influenced by SharePoint. In fact, many of the sessions at the conference revolve around some of those impacts.</p>  <h3>SharePoint is Pervasive</h3>  <p>One of the sessions I went to yesterday demonstrates this clearly. Access has been Microsoft's &quot;end user&quot; database product for well over a decade. It allows users to easily create sets of tables, forms, and reports. </p>  <p>With the 2010 release, Microsoft is introducing Access Web Services. Essentially, this allows you to take an Access database and convert it (not merely upload it) into SharePoint site, with virtually all of the functionality intact. Tables are converted to SharePoint lists. Macros are converted to JavaScript and SharePoint workflows. Even your forms and reports display virtually identically.</p>  <p>What's more, this isn't a one-way ticket - it is a round-trip. You can re-open the site in Access to tweak it, or have full &quot;access&quot; to the functionality that doesn't convert (either by product limit or your choice).</p>  <p>Integration now also exists for Word, Excel, PowerPoint, OneNote, and Visio.</p>  <h3>&quot;The News&quot;</h3>  <p>Of course, no Microsoft event would be complete without the big Attendee Party. This year, the venue was pretty close to &quot;home&quot; - Mandalay Bay's &quot;Beach&quot;. The theme was the 80's, so we had breakdancing, &quot;big hair&quot;, leg warmers and headbands, even Rubik's Cubes. About the only thing missing was roller skates.</p>  <p>But the highlight of the night was a private concert by Huey Lewis and the News. Just to show you how out of touch with pop/rock music I am, I didn't even know he was the guy who did the songs in Back to the Future (among other things). I only knew him from the karaoke movie, Duets, with Gwyneth Paltrow. (I'm a karaoke singer/fan.) Of course, I had heard <em>of</em> him, but I didn't know which music he was associated with. But I definitely recognized most of the songs he did, as did the crowd - many of whom (myself included) ended up wading into the beach pool to get closer to the stage.</p>  <h3>The &quot;Other&quot; News</h3>  <p>Of course, as you probably have heard from everywhere by now, this conference is essentially the &quot;coming out party&quot; for SharePoint 2010. But the actual bits aren't quite ready for us yet. They've promised to have the public beta available sometime in November.</p>  <p>So, that's it for me at midway. Keep up with my tweets for in-line learnings, and I'll be back with a conference wrap-up once it is all over.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Wed, 21 Oct 2009 10:37:22 GMT</pubDate></item><item><title>SharePoint Conference 2009 - Sunday</title><link>http://www.thesanitypoint.com/archive/2009/10/19/sharepoint-conference-2009-sunday.aspx</link><guid isPermaLink="False">/archive/2009/10/19/sharepoint-conference-2009-sunday.aspx</guid><description><![CDATA[<div class="ExternalClass602089F3D06C453FAD66370C951D8BDE"><h3><a href="http://www.mssharepointconference.com" target="_blank"><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj02902900000[1]" border="0" alt="MCj02902900000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/67/MCj029029000001_1_7EF30143.png" width="150" height="140"></a>Day 0.5</h3>  <p>&lt;cue Film Noir music&gt;</p>  <p>The day started clear and cold. I would say &quot;bright&quot; and cold, but it was only 4:45 AM when I left for the airport, so it was dark. There was frost on my car windows as I made my way to the airport. </p>  <p>Traffic was light, but construction was heavy around O'Hare. The security line was long. Fortunately I had checked in online, so I didn't have to wait for my boarding pass. Still I ran through the B/C tunnel and barely made it before they closed the door.</p>  <p>&lt;end music&gt;</p>  <p>And so began my trip to the SharePoint Conference 2009 in Las Vegas. The flight itself was pretty much uneventful, though once I arrived in Vegas I ended up captive in a shuttle while they waited for enough people to show up to fill it.</p>  <p>This is my first time in Las Vegas. Although the conference is officially in Mandalay Bay, most of the hotels on &quot;the strip&quot; are interconnected. I, along with lots of other SharePoint folks, are staying in the Luxor. That's the one that looks like a big black glass pyramid. On the inside, that pyramid is totally hollow. The rooms are arranged in a single &quot;layer&quot; along the wall, so that they have steeply slanted windows looking toward the outside. Inside, on each floor there is an open hallway that looks to the hollow interior. The base is filled with restaurants, theaters, and of course, the casino.</p>  <p><a title="Luxor Interior" href="http://www.luxor.com/" target="_blank"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="luxorint" border="0" alt="luxorint" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/67/luxorint_3_7EF30143.jpg" width="644" height="484"></a> </p>  <p>The elevators run up the support columns in each of the four corners. Although they are sealed so that you can't see it, they actually travel &quot;slantways&quot; as they go from the ground floor to the peak.</p>  <h3>Getting your Exercise</h3>  <p>While the Luxor is nominally &quot;right next to&quot; the Mandalay Bay, and they are connected by an interior walkway, that doesn't mean that they are truly &quot;close&quot;. In fact, to get from the Luxor to the conference center, you need to walk a seemingly endless maze - through both hotels' casinos as well as a shopping center. All in all, it takes at least 10 minutes, if not a bit more, to cover if you maintain a brisk pace. Let's just say I'm glad I decided to bring the shoes that are most comfortable for walking rather than sitting around.</p>  <h3>The Registration Packet</h3>  <p>This year's registration premium is a simple spandex laptop pouch (in your choice of sizes). But hidden inside is something very juicy - a very well prepared booklet describing SharePoint 2010's features and functions (as they exist in current beta builds). I haven't had much chance to read it yet, but let's just say it looks like Microsoft has taken to heart the complaints of SharePoint 2007 not having enough documentation available early on. They are clearly taking steps to ensure that complaint isn't repeated.</p>  <p>Unfortunately, SharePoint 2010 software itself wasn't in there. But, there are still 4 days of &quot;real&quot; conference yet to come, so who knows?</p>  <h3>Meeting and Greeting</h3>  <p>The great thing about events like this is getting to see, in person, folks you normally only interact with online - or at events like this. ;) In addition to bumping into people throughout the day, you can always be sure of a nice mingle or two. Sunday night, there were two big ones - SharePint, and ShareIndian. Unfortunately, I hadn't gotten much sleep over the past three days, so I wasn't really feeling up to leaving the complex, so I missed ShareIndian. I did make it to SharePint briefly, however, and had a number of nice chats before I turned into a pumpkin at around 9:30. (I suspect I was turning into a virtual vegetable long before that.) </p>  <p>So ends my report of the Pre-conference. Stay tuned for more throughout the week!</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Mon, 19 Oct 2009 10:37:13 GMT</pubDate></item><item><title>SharePoint Conference Las Vegas</title><link>http://www.thesanitypoint.com/archive/2009/10/17/sharepoint-conference-las-vegas.aspx</link><guid isPermaLink="False">/archive/2009/10/17/sharepoint-conference-las-vegas.aspx</guid><description><![CDATA[<div class="ExternalClass1E2F41228D454C5C899B366BEC6AFFE4">
<h3><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/66/MCj010518800001_7E30D2DD.png"><img style="border-right-width:0px;margin:0px 10px 10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="MCj01051880000[1]" border="0" alt="MCj01051880000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/66/MCj010518800001_thumb_7E30D2DD.png" width="139" height="124"></a>Preparing for the Flood... of Information</h3>
<p>Before I get all wrapped up in the excitement around Vegas, the SharePoint conference, and the release of information about SharePoint 2010, I thought I would point out a few things.</p>
<p>As I mentioned in a previous post, I try to keep this blog unique. That said, with so much new information coming out, so fast, and publicized by an unprecedented number of people, there will be virtually no way to ensure I'm not repeating information. So, in this rare instance, I'm not even going to try. </p>
<p>I'm going to post about what I consider (and I hope you will find) interesting. Right now, I can't even predict what that will be, but you can rest assured that I'll be doing it from my own perspective. Even when I cover topics I know a zillion other people will talk about, I'm going to try to bring you something unique.</p>
<p>Like virtually everyone else in the SharePoint community, <a href="http://twitter.com/woodywindy" target="_blank">I'm also on Twitter</a>. I may not be as prolific as some, but like here, I try to do things with my own spin. (But don't worry - I won't be tweeting the entire conference in Haiku form!) So if you aren't already following me, &quot;now would be a good time.&quot; :)</p>
<h3>See you in Vegas!</h3></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Sat, 17 Oct 2009 05:45:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Blog/default.aspx">Blog</category><category domain="http://www.thesanitypoint.com/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://www.thesanitypoint.com/archive/tags/General/default.aspx">General</category><category domain="http://www.thesanitypoint.com/archive/tags/Site Policy/default.aspx">Site Policy</category></item><item><title>Knowing Your Limitations</title><link>http://www.thesanitypoint.com/archive/2009/10/12/knowing-your-limitations.aspx</link><guid isPermaLink="False">/archive/2009/10/12/knowing-your-limitations.aspx</guid><description><![CDATA[<div class="ExternalClass317A19197B2F4BC486058D1EC38D0437">
<h3><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj03789710000[1]" border="0" alt="MCj03789710000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/65/MCj037897100001_thumb_7C3D2F65.png" width="128" height="124"></h3>
<h3>&quot;2.1 Billion ID's Should be Enough for Anybody!&quot;</h3>
<p>
<p>One of the more infamous stories about Bill Gates is that he once said &quot;640K of memory should be enough for anyone.&quot; <em>That wasn't true - he never said it</em>, but it did point up the frustration that came from one of the design limits of the original IBM PC. The memory between 640K and 1MB (which was the physical limit of the CPU) was allocated by IBM for video, I/O buffers, and lots of other &quot;housekeeping&quot;, and therefore couldn't be accessed by DOS. This was fine at the time, when the typical computer came with 64K of RAM, and even expanding to 512K was a luxury; but when applications (like Lotus 123, dBase III, and even Windows itself) became complicated enough to require that memory, and more powerful CPUs became available that allowed access to even more, that big &quot;gap&quot; before getting to the extended memory required more effort to program around than anyone could have predicted. (Yes, that's way over-simplified, but it is enough to get the point across...)</p>
<p>The reason I bring up this little history lesson is to point out that when you are designing products, you have to set limits <em>somewhere</em>. Sometimes these limits are intrinsic, like the 1MB maximum RAM of the 8088 CPU. Others are compromises, like how much of that 1MB to allocate for system housekeeping, and where to locate it in the address space. You hope you set these high enough that most users will never see them, but they are there.</p>
<p>SharePoint also has a number of limits. Most of them are well documented. Some of them are &quot;soft&quot; limits - places where you see performance degradation. Others are &quot;hard&quot; limits, like the maximum size of an integer value. But some limits are buried under the covers, because they are internal to a function, and users never see the processes that are impacted. If they are set high enough, the users will never even know they exist.</p>
<h3>Crawling Forward</h3>
<p>Unfortunately, there is a limit that wasn't set high enough. This was buried deep inside the MOSS and MSS search databases. Most database tables have a field for a unique identifier. This is automatically incremented every time a new row is added. Typically, a SQL Server Integer (int) is used for this ID, allowing up to just over 2 billion items to be added (2,147,483,647 if you must know). That's a lot. But this value just goes up - it isn't decremented if you delete a row. </p>
<p>In the SharePoint Search DB, there is a table that keeps track of all of the links in your crawled content. Whenever you do a new crawl, rows are added to and deleted from this table. This table originally used the int referenced above for its ID field. Now, there can be <em>a lot</em> of links in a SharePoint site, but still, 2.1 billion should take an awfully long time to reach, and in most cases it does. But reach it you can. For very large and complicated sites, if you do a full crawl every day (which deletes and replaces all of the link references) you can reach it faster than you might (and the developers did) think.</p>
<p>So, what happens if SharePoint actually hits this limit, and runs out of IDs? It isn't pretty. Essentially the crawling process gets stuck. It asks the database for permission to write the next available row, and since there isn't an ID that can be given to it, the database just says &quot;no&quot;. Unfortunately, SharePoint doesn't take no for an answer, and keeps asking. You will, occasionally, see an error in the event log talking about a SQL Identity failure, but unless you were aware of this possibility, it wouldn't make much sense.</p>
<h3>Recovering</h3>
<p>This also prevents you from effectively controlling search. Because SharePoint insists on finishing the last thing it was doing, you can't stop the crawl. Because there isn't much to go on in the logs, and it takes some SQL Server proficiency to accurately diagnose the problem, many times, this results in folks rebuilding their SSP, with all of the pain and agony that entails, just for the want of an ID.</p>
<p><em>Note: At this point, you need to consider the search index on this SSP corrupt. There is nothing that can recover the ability to crawl new content without resetting your index and doing a full crawl as described in the prevention section below.</em></p>
<p>Even if you can successfully diagnose it, there are very few supportable solutions that *don't* involve rebuilding the SSP one way or another. Remember, directly modifying the SharePoint databases yourself can result in an unsupported state. So, if you reset the seed of the maxed-out table to 1 in order to get control of the crawl back and stop it, you should restore the search database from a backup to reach a production state before you reset the crawled content (see below), which resets the database to an initialized state. </p>
<p>You can also restore your whole SSP from a backup, but that's almost as much fun as rebuilding it, <em>and</em> it assumes you have a restorable backup of your SSP.</p>
<h3>An Ounce of Prevention</h3>
<p>Obviously, it is much better to prevent this problem from occurring in the first place than to try recovering from it. There are a couple ways to do this. <em>The first and best is to <u><a href="http://technet.microsoft.com/en-us/office/sharepointserver/bb735839.aspx#SP2">upgrade your SharePoint environment to Service Pack 2</a></u>.</em> Among the many enhancements in SP2, the ID fields in the search databases that were prone to maxing out are updated to &quot;big&quot; integers. BigInts are twice the number of bits as regular integers. That doesn't just double the capacity, though. It makes it 4 billion times as large. (For those who really need to know it makes the number of possible ID's 9,223,372,036,854,775,807!) So, if it took 6 months to reach the old limit, it would take 24 billion months to reach the new one.</p>
<p>If you can't upgrade to SP2, you should consider adding a periodic reset of the index into your maintenance plans - especially if you have a very large corpus, with lots of links. The option to do this is available from Quick launch in the Search Administration page. </p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/65/image_3_7C3D2F65.png" width="503" height="354"> </p>
<p>Resetting the crawled content doesn't impact your settings, keywords and best bets, etc... But it does delete your existing index and completely resets the search crawl database - including the table ID fields. After the reset, search results will not be available until a full crawl is performed, so you should schedule this to take place during a down time and/or notify your users of the search outage. If you have multiple content sources defined, you will need to crawl all of them.</p>
<p>When you select reset, you will get a screen asking if you want to turn off search alerts during the reset. It will default to being selected, and you should leave it that way.</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/65/image_5_7C3D2F65.png"><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/65/image_thumb_1_7C3D2F65.png" width="419" height="343"></a> </p>
<p>The alerts can be reactivated once your crawls have been completed.</p>
<h3>Conclusion</h3>
<p>As Clint Eastwood once said as Dirty Harry, &quot;A man's got to know his limitations.&quot; Everyone, and every thing, has limits. </p>
<p>Limits are only a problem when you don't know about them, and don't take them into account. SharePoint, as powerful as it is, has plenty of them. In addition to the hidden limit I covered in today's article, you might want to review some of the more well known limits in the SharePoint planning material: <a href="http://technet.microsoft.com/en-us/library/cc262787.aspx" target="_blank">Planning for Software Boundaries</a>.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Mon, 12 Oct 2009 13:20:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/Design/default.aspx">Design</category><category domain="http://www.thesanitypoint.com/archive/tags/Search Server/default.aspx">Search Server</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/Search/default.aspx">Search</category></item><item><title>The Four Disclaimers</title><link>http://www.thesanitypoint.com/archive/2009/10/06/the-four-disclaimers.aspx</link><guid isPermaLink="False">/archive/2009/10/06/the-four-disclaimers.aspx</guid><description><![CDATA[<div class="ExternalClassE0C2F57D5C94467CB4C46F9A3F01CE69">
<p><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="j0300840" border="0" alt="j0300840" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/64/j0300840_thumb_7AE24516.png" width="146" height="124">On Monday, October 5th, the Federal Trade Commission (FTC) published some new <strike>regulations</strike> guidelines with regard to bloggers and product endorsements. While I'm certain they will be challenged, possibly even successfully, for now they are what they are.</p>
<p>What does this mean for The Sanity Point? For now, not much. I'm a SharePoint guy, and pretty much everyone knows it. I like SharePoint and I always have. Besides, I very rarely &quot;review&quot; or &quot;endorse&quot; products at all. I normally just provide information to help you figure out how to make them work (or work better) if you've already purchased them. I occasionally comment on the news, or my personal life.</p>
<p>But this rule change does point out that until now I haven't put forth any kind of statement with regard to policy on this blog. So, with a nod and an apology to the Public Radio program called &quot;<a href="http://www.notmuch.com/" target="_blank">Whad'Ya Know?</a>&quot;, I now list my own &quot;Four Disclaimers&quot; for this web site.</p>
<h3>1. These Opinions are My Own, and They are Only Opinions</h3>
<p>The opinions expressed on this web site are my own. They do not necessarily reflect those of my employers, clients, friends, neighbors, or the dog down the street. They are not the &quot;Official Word&quot; of any company, unless I am quoting from their own information. Such quotes will be clearly identified.</p>
<p>I am not a Doctor, Lawyer, Financial, or Menu advisor, nor do I play one on TV. Any statements made on this site are those of an informed layman. Even &quot;best practices&quot; are not always the best in every situation. Statements that are within my field of expertise, which describe what I would generally consider good practices, may not apply in your particular circumstance. Please make complete and verifiable backups and confirm your situation with your own local resources before taking &quot;irreversible&quot; actions.</p>
<p>I employ the Akismet spam blocker, and moderate the comments on this site. While I won't usually block a comment from someone who is critical or disagrees with me, I will not approve obvious spam, repeated posts, comments which (solely in my opinion) are in bad taste, or marketing posts that simply refer someone to their own product site. Comments that are approved may be edited if required to reflect the above-listed standards.</p>
<h3>2. I Don't Do Paid Reviews, but I Do Accept Legal Free Stuff</h3>
<p>While I very happily share my experience and expertise on the products I'm familiar with, nobody pays me to write the stuff on this site. In fact, nobody pays me anything at all for anything on this site, except copies of my book. If I like something, I'll say so. If I think something could be improved, I'll say that too.</p>
<p>That said, in IT, companies are always providing trial and demo copies of software, sometimes for download, often by the stack at conventions and other events. Sometimes these are full copies, other times they have timeouts, or functionality limited in other ways.</p>
<p>If I find such a product useful, I might write about it. Whether I paid for it or not, I always get it through some legal channel. I do not break my own NDA's, and I don't attempt to circumvent those of others by getting software through a back-channel where the NDA isn't presented to me.</p>
<p>I don't run random ads on my site. I link to Amazon so you can purchase copies of my book. I wrote the book - of course I benefit from you buying it! I also have an Amazon a-Store. Products purchased there can result in a commission for me. While it isn't linked from this site right now, if I do link to it, understand that all selected products in it are those that I would recommend to anyone, no matter where they might purchase them.</p>
<p>The MVP Award I just received does come with some goodies that could be considered &quot;substantial&quot;; however, it is not based on product endorsements. Rather, it is a reward based on recent past exceptional community participation, not a payment for any particular service or statement.</p>
<h3>3. The Sky is Blue, Birds Fly, and Fish Swim. It's What They Do. Get Over It.</h3>
<h3>4. I Value Your Privacy</h3>
<p>This site employs conventional web reporting technologies, such as logs, and scripts from Google Analytics and Feedburner. <a href="http://www.google.com/intl/en/privacy.html" target="_blank">Google's privacy policies</a> apply to their services. By the very nature of the Internet, information available to all web sites (not just this one) includes visitor source IP addresses, objects viewed, browser capabilities, session cookies, and several other types of information, all of which may be included in these logs and/or passed on to the analytics service. Other than this, and the information you enter into comments, I don't collect potentially personally identifiable information. I don't sell even the little information that is collected to anyone.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Tue, 06 Oct 2009 07:57:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Blog/default.aspx">Blog</category><category domain="http://www.thesanitypoint.com/archive/tags/General/default.aspx">General</category><category domain="http://www.thesanitypoint.com/archive/tags/Site Policy/default.aspx">Site Policy</category></item><item><title>An MVP Once More</title><link>http://www.thesanitypoint.com/archive/2009/10/05/an-mvp-once-more.aspx</link><guid isPermaLink="False">/archive/2009/10/05/an-mvp-once-more.aspx</guid><description><![CDATA[<div class="ExternalClassA6D9ED57475C4E9A8A917E449CD2F1AD">
<p><img style="margin:0px 10px 10px 0px;display:inline" align="left" src="https://mvp.support.microsoft.com/library/images/support/en-US/MVPLogo.gif"></p>
<p>Last week, I got some great news: I have been awarded the Microsoft Most Valuable Professional (MVP) for 2009!</p>
<p>To quote the Microsoft MVP site:</p>
<p>&quot;Since the early 1990s, Microsoft has recognized the inspiring activities of MVPs around the world with the MVP Award. MVPs freely share their deep knowledge, real-world experience, and impartial, objective feedback to help people enhance the way they use technology. Of more than 100 million users who participate in technology communities, around 4,000 are recognized as Microsoft MVPs.&quot;</p>
<p>Those 4000 awardees are selected from across a variety of disciplines, specializing in a wide array of Microsoft products. Only a small fraction of them are SharePoint MVP's. This is not the first time I have been given this award, but it has been a few years. (A person's community contributions are analyzed each year - there is no &quot;automatic&quot; extension.) </p>
<p><em><strong>I am deeply honored to have once more been selected for this group.</strong></em> Thank you, Microsoft! I hope to continue providing the SharePoint community with as much help as I can over the next year.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Mon, 05 Oct 2009 07:31:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/General/default.aspx">General</category></item><item><title>A Little Shout-Out to Bil Simser</title><link>http://www.thesanitypoint.com/archive/2009/09/29/a-little-shout-out-to-bil-simser.aspx</link><guid isPermaLink="False">/archive/2009/09/29/a-little-shout-out-to-bil-simser.aspx</guid><description><![CDATA[<div class="ExternalClassCFCECFCE53B243BCBBD69EB27186EF0F">
<h3><a href="http://weblogs.asp.net/bsimser" target="_blank"><img style="margin:0px 10px 10px 0px;display:inline" alt="Bil Simser" align="left" src="http://images.bilsimser.com/bil/150w.png" width="92" height="120"></a>Complete Agreement</h3>
<p>As you may have noticed, I try to keep this blog &quot;original.&quot; In other words, I don't cover the same material as another blogger has recently done, unless I have something major to add, or there is some kind of debate going on.</p>
<p>Today (September 29, 2009) SharePoint MVP Bil Simser has managed to &quot;scoop&quot; me, by <a href="http://weblogs.asp.net/bsimser/archive/2009/09/29/sharepoint-fud-spreading-far-wide-and-fast.aspx" target="_blank">writing an article</a> on almost exactly the same subject I was planning to comment on in an upcoming post. In it, he talks about people who claim SharePoint is bad, and questions how whatever the &quot;SharePoint Killer&quot; of the day might actually compare beyond one particular forte.</p>
<p>While I would have been a little softer in my language, I can't fault the sentiments he has expressed. So, rather than seem like I'm repeating it, I'll simply give you the link to his post:</p>
<h3><a href="http://weblogs.asp.net/bsimser/archive/2009/09/29/sharepoint-fud-spreading-far-wide-and-fast.aspx" target="_blank">SharePoint FUD... Spreading Far, Wide and Fast</a></h3>
<p>Note - I have actually written on this topic before, though specifically on the subject of Wikis. For my take on that subject, check out this article, from April of this year:</p>
<h3><a href="http://www.thesanitypoint.com/archive/2009/04/14/wiki-in-the-box-is-sharepoint-wiki-really-that-bad.aspx" target="_blank">Wiki-in-the-Box - Is SharePoint Wiki Really that Bad?</a></h3>
<p>Be sure to check out Bil, and all the other great SharePoint bloggers on my Blog Roll...</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Tue, 29 Sep 2009 19:03:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Blog/default.aspx">Blog</category><category domain="http://www.thesanitypoint.com/archive/tags/General/default.aspx">General</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Indexing SharePoint List Columns</title><link>http://www.thesanitypoint.com/archive/2009/09/20/indexing-sharepoint-list-columns.aspx</link><guid isPermaLink="False">/archive/2009/09/20/indexing-sharepoint-list-columns.aspx</guid><description><![CDATA[<div class="ExternalClass65C8B787AE404239BFB9BB4004A8EB63">
<p><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj03800210000[1]" border="0" alt="MCj03800210000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/61/MCj038002100001_thumb_34437094.png" width="124" height="90"></p>
<h3>Helping SharePoint Help You</h3>
<p>A SharePoint system manages a huge amount of data. Amazingly, in a SharePoint content database, all of the data, for every list and library item, in every site and subsite, is stored in a single table. Looking at hundreds of sites, each with dozens of lists and libraries, each potentially containing hundreds or thousands of items, and you end up with one massive table!</p>
<div style="border-bottom:1px solid;position:relative;border-left:1px solid;background-color:#ddd;margin:5px;width:237px;float:right;border-top:1px solid;top:auto;border-right:1px solid;left:auto">
<p><b>Not So Limiting After All</b></p>
<p>Everybody has heard about the so-called &quot;2000 item limit&quot; in SharePoint. Remember that this isn't really a limit. SharePoint is quite capable of handling lists with tens, or even hundreds, of thousands of items. The issue is the &quot;rendering&quot; of those items, which starts becoming perceptibly slower if you have more than 2000 items <i>in a single view</i>.</p>
<p>While the indexing discussed in this article can have a minor effect on this rendering, it really is more general, and can improve list performance across the board. </p></div>
<p>Ask any DBA how to achieve maximum performance on a huge table, while other options may also come up, at a minimum you'll always hear the word &quot;indexing&quot;. And make no mistake - SharePoint (whether Windows SharePoint Services 3.0, or Office SharePoint Server 2007) does do a lot of indexing. But that is only dealing with the user data table as a whole. </p>
<p>Once SharePoint has figured out which site and list the data belongs to, normally it is pretty much done with indexing. When you perform a query - whether in code, or for a web part view - each item in the list is examined individually for a match. As the amount of information in your sites grows, this can take quite a bit of time and cause significant slowdowns (This is independent of the &quot;2000 item limit&quot; - see sidebar).</p>
<p>Fortunately, you don't have to put up with this default behavior. SharePoint gives you the additional ability to index the information <em>within </em>individual lists or libraries. </p>
<p>Look at the settings page for just about any list or library, and you will find a link for &quot;Indexed columns&quot;:</p>
<p><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://www.thesanitypoint.com/Lists/Posts/Attachments/61/image_5_34437094.png" width="204" height="307"></p>
<p>When you click the link, you will be given the opportunity to select which columns in your list you wish to index. This is where an understanding of your information, and how you use it comes into play. While you <em>could </em>just click everything, that isn't usually a good idea. For each column you index, SharePoint needs to store extra information about every item in your list. </p>
<p>You should only select columns for indexing that you will be using to query/filter, sort, and group your list. For this list, I'll usually need to do this with the item's title (or name), who created or modified an item, and when it starts. So those are the columns I'll select to index:</p>
<p><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://www.thesanitypoint.com/Lists/Posts/Attachments/61/image_8_34437094.png" width="393" height="268"> </p>
<p>
<p><em>Note: When setting up indexed columns, you will almost always want to include the title or name field.</em></p>
<p>Once you click OK, SharePoint will build the appropriate extra indexes. While there won't be any change to the way your list looks, you should see the performance results almost immediately. (Of course, the more items in your list, the greater the impact will be...)</p>
<p>One place you usually see immediate results is when you click on the context menu of a column title to change the sorting or filtering. The list of unique values builds much faster on an indexed column.</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/61/image_thumb_3_34437094.png" width="215" height="90"> </p>
<p>That's all there is to it! Setting up indexed columns in your SharePoint list really is that simple. Give it a shot, and you might be surprised at how much faster your SharePoint applications can be.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Sun, 20 Sep 2009 15:14:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/Lists and Libraries/default.aspx">Lists and Libraries</category><category domain="http://www.thesanitypoint.com/archive/tags/Search Server/default.aspx">Search Server</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/WSS/default.aspx">WSS</category></item><item><title>SharePoint Values Your Uniqueness</title><link>http://www.thesanitypoint.com/archive/2009/09/16/sharepoint-values-your-uniqueness.aspx</link><guid isPermaLink="False">/archive/2009/09/16/sharepoint-values-your-uniqueness.aspx</guid><description><![CDATA[<div class="ExternalClass671502815ECD411C9A3FA62B92FD12CA">
<h3><img height="124" border="0" align="left" width="124" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/60/MCj043560800001_thumb_4D72DBC6.png" alt="MCj04356080000[1]" title="MCj04356080000[1]" style="border:0px none;margin:0px 10px 10px 0px;display:inline">&quot;Who Did You Say You Were?&quot;</h3>
<p>
<p>Today I'm going to talk about user accounts. In particular, Windows Active Directory accounts. You might be thinking, &quot;<em>This doesn't sound like a SharePoint topic!</em>&quot; But rest assured, it is.</p>
<p>I've talked about Windows accounts and SharePoint before. For example, I've told you about the <a target="_blank" href="http://www.thesanitypoint.com/archive/2009/06/12/taking-accounts-into-account.aspx">many accounts you need to consider</a> when setting up a SharePoint farm, and how to <a target="_blank" href="http://www.thesanitypoint.com/archive/2009/06/13/discovering-the-setup-user-account-a-sharepoint-quote-whodunit-quote.aspx">discover the Setup User</a> account after the fact. I've also mentioned how you can let SharePoint know <a target="_blank" href="http://www.thesanitypoint.com/archive/2009/06/12/the-only-constant-in-life-is-change.aspx">when User ID's change</a>.</p>
<p>Normally, each person has one Windows account (user ID and password). They use this account to log into their PC in the morning, thus proving to the network who they are. This is called &quot;authentication&quot;. Many systems that recognize Windows authentication (including SharePoint) will simply accept these credentials from the user's PC, without any further user intervention.  The systems use these credentials to determine what data and functions the user has been &quot;authorized&quot; to access by the administrator of the system.</p>
<p><em>Note: Behind the scenes, it is quite a bit more complicated than that. While a complete discussion of handshaking and protocols is beyond the scope of this article, understand that the negotiations taking place do result in one of the issues I will describe below.</em></p>
<h3>On Being a Highlander - &quot;There <strike><font color="#ff0000">Can</font></strike> Should be Only One&quot;</h3>
<p>By and large, this system works pretty well. However, it is based on a pretty big assumption - that each user has only one account for their &quot;day to day&quot; system usage, and each account has only one user. Unfortunately, from time to time this assumption doesn't hold true. This can cause some subtle, and not-so-subtle (but hard to trace) problems in SharePoint if you aren't careful. </p>
<p>I'm going to discuss three main scenarios:</p>
<ol>
    <li>One user has multiple accounts </li>
    <li>One account is shared across multiple users </li>
    <li>Accounts in different domains that have the same UserID portion, but different passwords. </li>
</ol>
<p>For each group, I'll talk about why it might occur, how it presents a challenge, a few variations on the theme, and what you can do to minimize the difficulties presented by it.</p>
<h4>One User, Multiple Accounts</h4>
<p><strong>Why it might happen:</strong><strong></strong></p>
<p>There are many specific reasons a user might have multiple accounts, but they generally fall into three categories - Administration, Test, and Transition.</p>
<p>Transitions can be wide-spread - such as when companies realign or change naming standards, or individual - such as when marital status changes. Regardless of the reason for a transition though, generally there will be an &quot;old&quot; account, and a &quot;new&quot; account.</p>
<p>For purposes of this section, I'm considering administrative and test accounts to be equivalent. They don't need to be &quot;administrators&quot; per se, and the account may exist mainly for applications other than SharePoint. Essentially these are any accounts that a user signs into for a particular task that has different privileges from their normal User ID (e.g. DBA), and their use is often dictated by policy or best-practice. Regardless of the reason, the challenges and resolutions are basically the same.</p>
<p><strong>Why this is a challenge:</strong></p>
<p>Aside from the obvious - making sure each account actually has access to the correct resources - SharePoint keys a lot of stuff based on the current user. From Created and Modified by tags, to personalized pages, and audience targeting, SharePoint knows and shows who you are. But the real hazard of multiple accounts is their effect on profiles and my-sites. </p>
<p>User profiles are crated from Active Directory imports, as well as user-entered information. Certain features of My Sites, such as organizational relationships are built using the imported information. Typically a user's &quot;primary&quot; account will populate such fields a their title, office location, manager, and other useful business information. Administration and Test accounts, on the other hand, generally just use the name to describe the purpose of the account, and little else.</p>
<p>These impact not only the current user, but others as well. For example, suppose you fully populate AD info for each of the accounts. When someone clicks on the manager's profile, suddenly they will show all of the secondary accounts, as well as the &quot;real&quot; user, in their reporting relationships. Or, what if the user has reports of their own? Since each can only have one manager, you need to be very careful to assign it to the correct account, otherwise, someone may end up not appearing in org charts, or they may appear in the wrong place.</p>
<p><img height="252" border="0" width="510" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/60/image_3_4D72DBC6.png" alt="image" title="image" style="border:0px none;display:inline"> </p>
<p>When someone starts using these secondary accounts for day-to-day activities in SharePoint, this is the account noted as the creator or modifier of data items, and tracked in logs. If you use Communicator, SharePoint's presence indicators can also be affected. They will show the presence and contact info for the account that actually made the change, rather than the potential real presence for the user.</p>
<p>Finally, aside from the profile, each of these accounts will register as separate for the creation of My Sites. Since Office can hook into a user's My Site as a default storage location, this can also cause confusion, as personal documents appear and disappear based upon which ID user is using to perform their activities.</p>
<p><strong>Minimizing the pain:</strong></p>
<p>Wherever possible, strive to make transitions instantaneous - at least as far as SharePoint is concerned. Don't let users access SharePoint with more than one of these accounts at a time. When the time comes, make use of the stsadm &quot;<a target="_blank" href="http://technet.microsoft.com/en-us/library/cc262141.aspx">migrateuser</a>&quot; operation as soon as possible, so that users don't get confused or accidentally start generating content under the new account before their old information is reassigned.</p>
<p>For admin/test situations, make sure there is a clear distinction in the users' minds about the purposes of each account. In addition, make sure the metadata in Active Directory correctly reflects which account will be used for day-to-day operations.</p>
<h4>One Account, Multiple Users</h4>
<p><strong>Why it might happen:</strong></p>
<p>The reasons for multiple users sharing an account typically revolve around cost savings in one form or another - either licensing or administrative.</p>
<p>A typical example might be in a &quot;shop&quot; situation, where one PC is on the floor, and once it is logged in, everyone just accesses the information they need.</p>
<p><strong>Why this is a challenge:</strong></p>
<p>Some of the challenges here are similar to those you might face in an Internet-facing, anonymous access, scenario. Essentially, when someone does something, you don't know who it was. </p>
<p>But there is an added complication. When you are authenticated, this triggers some things in SharePoint. For example, since you have an account, SharePoint will treat you as a named user for &quot;Created by&quot; information. But you can't use effectively use the &quot;only their own&quot; global list permission, or filter things by [Me], as everyone who shares the account will have that permission or see that information. Or on surveys that prevent multiple entries, only one person will be allowed to fill it in from that account. Discussion comments all appear to come from the same person.</p>
<p><strong>Minimizing the pain:</strong></p>
<p>By sharing a single account, you essentially remove the effectiveness &quot;social&quot; elements of SharePoint. Consider reducing confusion by turning off access to MySites and Personalization for the shared account. If you want to use interactive discussions, add a field for users to manually enter their names when posting, and make it a required field.</p>
<p>Frequently such shared resources are &quot;read only&quot;. Consider simply allowing anonymous read-only access in those instances.</p>
<p>Another option is to enable a forms-based authentication zone for that group. This allows you to keep your AD clear of staff who otherwise don't use PC's, but still maintain individual control over SharePoint access, and monitor who is posting to writable areas.</p>
<h4>Name's the Same, Different Domain</h4>
<p><strong>Why it might happen:</strong></p>
<p>Unlike accounts within the same domain, which by definition must have unique IDs, it is possible for accounts in different domains to have the same &quot;userID&quot; part. For example, EMEA\SallieJo, AM\SallieJo, and APAC\SallieJo. </p>
<p>These may represent different users, or one user who travels. Sometimes organizations merge, and each already has their own Active Directory domain. Or for various reasons, your organization requires multiple domains on an ongoing basis. In some cases, this can be similar to &quot;One User, Multiple Accounts&quot;. In fact, sometimes the situation is the same - accounts are held by the same user, and/or they are transitional. If this is the case, then the cautions mentioned in that section apply as well; but this situation presents its own unique challenges.</p>
<p><strong>Why this is a challenge:</strong></p>
<p>Here is where that &quot;Behind the scenes&quot; techie stuff I mentioned at the beginning comes into play. Essentially, when a user's web browser (Internet Explorer) and IIS (Internet Information Services) start negotiating authentication, only the UserID portion of their credentials, along with encrypted password information is sent from the client to the server. (SharePoint relies on IIS and the ASP.NET engine for authentication.) </p>
<p>Here's the problem - IIS usually <strong><em>assumes</em></strong> the user will be in the same domain as it is, and will try to match the ID with an account in that domain. Only if it doesn't find a match will it make a deeper query of Active Directory. If it finds an ID match, it will try to validate the encrypted password against the current domain. If the passwords match, no problem - or maybe big problem. SharePoint thinks IIS has authenticated the local user. If both accounts are really for the same person, you're OK. If it is a different user from the other domain, who just happened to have the same ID and password, they could actually be seeing the local user's information!</p>
<p>If the passwords don't match, unlike the situation when the UserID is different, IIS won't continue its search. It will just return a fatal error - typically a &quot;500&quot;. (If the user is persistent, this also has the potential of locking out accounts in IIS' local domain.) </p>
<p>Note: This isn't an issue unique to SharePoint - you can encounter this problem with almost any system that requires NTLM pass-through authentication.</p>
<p><strong>Minimizing the pain:</strong></p>
<p>The best defense here is to make sure your user ID's are unique across all trusted domains accessing resources. Before initiating trusts, run reports and reconcile them, and set forest policies to prevent duplicates.</p>
<p>When duplicates exist for one or two users, a workaround for users in the remote domain is to assign your site to a specific zone (e.g. trusted sites) and configure Internet Explorer to always prompt for authentication in that zone.</p>
<p>
<p><img height="126" border="0" width="375" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/60/image_thumb_3_4D72DBC6.png" alt="image" title="image" style="border:0px none;display:inline"> </p>
<p>If this is a problem for a large number of users, configuration changes at the server may be in order. </p>
<p>When the majority of your users are in a domain other than the one hosting SharePoint, you can configure IIS to use digest authentication and a different default realm. You can also extend SharePoint into multiple zones, and configure a different realm for each site in IIS. Then ensure that each domain's DNS points to the correct SharePoint zone.</p>
<p><img height="447" border="0" width="370" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/60/image_thumb_4_4D72DBC6.png" alt="image" title="image" style="border:0px none;display:inline"> </p>
<p>
<p>
<p>
<p>Of course, if you change configurations - whether they be IE or AD, IIS or SharePoint - make sure you document them!</p>

</div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Wed, 16 Sep 2009 07:53:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/Governance/default.aspx">Governance</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/WSS/default.aspx">WSS</category><category domain="http://www.thesanitypoint.com/archive/tags/Search Server/default.aspx">Search Server</category></item><item><title>Off Topic - In a Fix with Ford</title><link>http://www.thesanitypoint.com/archive/2009/09/12/off-topic-in-a-fix-with-ford.aspx</link><guid isPermaLink="False">/archive/2009/09/12/off-topic-in-a-fix-with-ford.aspx</guid><description><![CDATA[<div class="ExternalClassC78D5032E9A24810AC3B01D99C2EF744">
<h3><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/MCj039712600001_193315D9.png"><img style="border-right-width:0px;margin:0px 10px 10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="MCj03971260000[1]" border="0" alt="MCj03971260000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/MCj039712600001_thumb_193315D9.png" width="98" height="102"></a></h3>
<p><em>We interrupt this blog to bring you a small consumer rant. If you have no interest in cars or complaints, please disregard this post.</em></p>
<h3>On Being a Ford Guy</h3>
<p>Let me start this out by saying that I'm what they, in a past age, would have called &quot;A Ford Man&quot;. I've owned a lot of cars over the course of my life, and most of them have been by Ford Motor Company (memorable exceptions include my first car - a 67 Dodge Dart - and the dilapidated VW Beetle I had in college, but didn't everyone have one of those at some point?). This includes every one of the four cars I have purchased new. </p>
<p>This doesn't mean that I wouldn't consider other brands - I do a pretty thorough search and comparison before major purchases. It is just that when new car time rolls around, more often than not I find that one of their products best meets my needs. And if it is otherwise a tie, the Ford (or Mercury, or Lincoln) product will probably win by default.</p>
<h3>Falling for the Fusion</h3>
<p>A few years ago, Ford decided to split one of their best selling car lines of all time - the Taurus - into two: A slightly larger car called the 500 (which has since reclaimed the Taurus name, and just received a major makeover); and a somewhat smaller vehicle called the Fusion (for those reading this in Europe, the US Fusion is nothing like the car of the same name sold over there - the US car is more of a size and kind with the current Mondeo). </p>
<p>By sheer coincidence, the Fusion came out right at the time I was ready to replace my old car (a Focus). It was virtually everything I was looking for in a car at the time. Now, that doesn't mean I was &quot;first in line&quot; to buy one. I still did all of the appropriate comparisons, but buy one I did, and it is one of the earliest made (November 2005, according to the sticker - more on that later). I am now the owner of a 2006 Ford Fusion SE, in &quot;Red Fire&quot;: <br><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/fusion1_2_193315D9.jpg"><img style="border-right-width:0px;margin:10px 0px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="fusion1" border="0" alt="fusion1" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/fusion1_thumb_193315D9.jpg" width="516" height="345"></a> </p>
<p>In general, I have been very happy with my Fusion. It is comfortable, roomy, performs well with the 4 cylinder engine, and gets great mileage (well over 30 MPG on the highway). And, until recently, I haven't had any mechanical problems, either.</p>
<h3>In the Driver's Seat</h3>
<p>I don't buy a car to just look at. I buy it to drive. A <em>lot</em>. When you hear about warranties for &quot;X years or Y thousand miles&quot;, you can bet your bottom dollar that I'm going to hit the miles number first. I spend a lot of time behind the wheel of my cars, and I get to know them pretty darned well. I learn every every quirky noise, every bump in the seat, every crease of the dash, on a first name basis. </p>
<p>I've never gotten rid of a car with less than 6 figures (100,000 miles) on the odometer. I understand the concept of &quot;normal wear-and-tear&quot; as well as (if not better than) anybody. I accept them as a fact of life, and if my issues were in that category, there wouldn't be a need for me to write this article. In addition, I also always buy the &quot;best&quot; extended warranty plan available from the manufacturer (Ford calls this their &quot;ESP&quot;) to make sure I get to at least 100,000 miles without a major breakdown expense. Until now, I have not regretted it.</p>
<h3>&quot;You Will Know a Pioneer...&quot;</h3>
<p>I also understand the realities of product design and manufacturing. Nothing is perfect out of the gate. Issues are discovered, and changes are made. Most of the problems are caught early. Many are fixed at the factory before the cars are delivered, and 99% of the time, this fine-tuning goes unnoticed by the consumer.</p>
<p>But occasionally a problem isn't caught, or a design flaw that impacts durability <em>can't</em> be discovered, until well after the cars are sold and people are using them in the &quot;real world&quot;. Again, most of these issues are benign, and may never be noticed (e.g. a piece of misaligned trim on the bottom of the dashboard). Now and then, though, one rises to the level of consumer awareness.</p>
<p>In the case of problems that could affect safety, depending on how wide-spread it is, a general or specific recall is issued. Everyone impacted is alerted, and their cars are fixed. Period. Again, if my issues were in this category, I wouldn't be writing. Or would I?</p>
<p>And what about problems that aren't generally safety related? These aren't ignored, but they aren't exactly widely publicized either. They are handled through a process called the &quot;Technical Service Bulletin&quot; or TSB. Sometimes these are referred to as &quot;Hidden Warranties&quot;. Essentially, they only get fixed if the customer notices and complains about the specific issue covered. Of course, if you are within your normal &quot;bumper to bumper&quot; warranty period, this won't even be an issue. It will be fixed no questions asked. </p>
<p>But that would be the case even if there wasn't a &quot;known problem&quot; with the design, and it was simply a one-off defect in material or workmanship. A TSB might be issued with with a symptom description like &quot;premature wear&quot;. And when the fix involves a redesigned component, you can be pretty sure that the original design itself was faulty. </p>
<h3>A &quot;Key&quot; Problem</h3>
<p>Here is where my relationship with Ford starts to get a bit shaky. As I mentioned, my car was one of the first Fusions produced. Sometimes these design flaws take a while to manifest, and detecting the problems tends to be time, not mileage sensitive. But I drive a lot, so I hit the standard warranty mileage cap ages ago.</p>
<p>A few months back, I ran into a problem where my key wouldn't come out of the ignition. These days, leaving one's key in the car is not the wisest of actions, so of course I went to a dealer to get it fixed. Upon diagnosing the problem, the dealer noted that the issue and solution was described in a TSB, but because I was out of standard warranty by mileage, I would have to pay the ESP deductible of $100. (All the more frustrating because the repair itself would only have been within a few dollars of that).</p>
<p>While I had been aware of TSB's, this incident brought them to the forefront of my attention. First, I became upset that I had to pay at all to have what was clearly a design flaw remedied. Second, I was more frustrated because when I go in for ANY service, I regularly asked if there are any outstanding recalls or service bulletins that apply to my car.</p>
<h3>Chasing the Wild Goose</h3>
<p>So, I did what any self-respecting, Internet-savvy geek does these days - I Tweeted about it. I caught the attention of Ford's Social Media Guru, Scott Monty (@ScottMonty), who brought me into contact with Shawn @FordCustService. After taking my issue offline with Shawn, he eventually escalated me to Joe Wiegland, Program Manger for the ESP program. While he wouldn't do anything about getting my already-paid deductible refunded, he did ask me to contact him when I was ready to have some other chronic issues, that I had chalked up to either &quot;facts of life&quot; or &quot;normal&quot; wear and tear but my new research identified to be TSB items, addressed, and he would get things straightened out.</p>
<p>Here I must note - I appreciate Mr. Wiegland's involvement, but I believe this shouldn't even have been made an ESP issue. These are design flaws, not strictly material and workmanship defects, and should be repaired regardless of warranty status - normal or extended.</p>
<p>For various personal reasons, I was unable to return to these problems until a couple weeks ago. I called Mr. Wiegland's office, but was directed to his voicemail. I left a message reminding him of my situation, and requesting a callback. </p>
<p><em>That callback never came.</em></p>
<p>Nevertheless, armed with my list of applicable TSBs (see below), I paid the dealer (Don Hinds Ford, in Fishers, Indiana) another visit. For every issue, I was rebuffed. Frequently, it was &quot;cannot reproduce&quot;. But even when acknowledging a problem, they replied with either &quot;not covered&quot;, or that it would only be &quot;partially&quot; covered, even if they could reproduce it.</p>
<p>So, I took back to Twitter. Just a few posts saying that I wasn't pleased with Ford. This time, I got the attention of the newly created @Ford corporate account. They said, literally: <em><strong>If we had a clue as to why, we might be able to help.</strong></em> So, I followed them, and when they (presumably auto) followed me back, I provided contact information via a Direct Message in order to discuss it offline.</p>
<p><em>They never responded.</em></p>
<h3>A Blogger Scorned</h3>
<p>I had no desire to write this article. I tried to resolve my problems privately, but didn't get any satisfaction, so I'm turning to the bit-stream. I've laid out my story in language plain enough for anyone to understand. I'll bring it to the attention of the various Ford accounts on Twitter. I will update it with any resolution - or lack thereof -that may be forthcoming.</p>
<p><strong><em>Note: I still like Ford products in general, and my Fusion in particular. I just want it fixed.</em></strong></p>
<h3>Appendix - The Issues</h3>
<p>Here's a list of my issues, their TSB numbers, the dealer's response, and a few comments.</p>
<p><strong>Key stuck in ignition / Shifter binding condition</strong></p>
<p>My listing shows it as TSB 07-2-1, but the dealer worksheet shows 07-14-7</p>
<p>This is the one that started it all. The title is self-explanatory. The repair consisted of replacing the shifter handle with a redesigned unit. I got charged a deductible that I don't think I should have.</p>
<p><strong>2.3L Engine belt squeal - verify proper serpentine belt and tensioner</strong></p>
<p>This is TSB 06-22-13</p>
<p>While I was at the dealer the first time, I also mentioned a pretty noisy squeak/squeal that I get when the car is cold or the air is particularly damp. Unfortunately, the car is warmed up by the time I get to the shop, so the dealer couldn't reproduce the problem. </p>
<p>After I came in with my list of TSB's, however, this was the one where they said even if they could reproduce it, because the repair incorporated a part the ESP doesn't cover (a belt, which is usually considered a consumable), there would be a significant charge.</p>
<p>According to one source &quot;Ford has issued a newly designed shield, belt, and tensioner to correct the squealing problem. Alignment instructions for the new tensioner are included in the TSB&quot;</p>
<p>Redesign a part to correct a problem, the original design was bad. The belt is part of the redesign, and therefore should be covered.</p>
<p>Since it only happens when cold, here's a video I made that illustrates the noise. I kept the volume of the video down so that it isn't too bad in an office. Rest assured, that in person it is VERY loud, and I can be heard coming down the street from a block away.</p>
<p><a href="http://cid-773832677f575173.skydrive.live.com/self.aspx/.Public/FordFusion.wmv" target="_blank">Video Demonstrating Squeak and Window Issue</a></p>
<p>Note: this video also includes a segment demonstrating a crunching noise made by the driver's side window. As far as I know, there isn't a TSB on that, but it is also an intermittent issue that I wanted to get on record so maybe I can get it fixed before my real ESP extended warranty expires. My gut tells me this is a power-window failure waiting to happen. Unlike the squeaking, it is most obvious when it is hot out.</p>
<p><strong>Seat Bolster Wear</strong></p>
<p>This is TSB 07-13-3</p>
<p>Here's one that really bugs me. I brought this up well over a year ago to my local dealer's service department. At the time, it hadn't yet worn through the fabric. They said that it was normal wear that they couldn't do anything about. Now I have discovered that it is anything but.</p>
<p>The TSB description lists the cause as a wire inside the bolster cushion that causes &quot;premature wear&quot;. The solution is a new seat cover and a redesigned foam pad that the wire can't wear through.</p>
<p>Here is what I get to look at every time I get into my car, and this is the kind of thing that can only get worse.</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/seat_2_04419366.jpg"><img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="seat" border="0" alt="seat" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/seat_thumb_04419366.jpg" width="409" height="484"></a> </p>
<p>According to Hinds' service department, the ESP specifically excludes uphostery, and therefore even with this being a known issue, they can't cover it.</p>
<p>Again, redesign to fix means the design was flawed to begin with. <em>Please Ford, fix this!</em></p>
<p><strong>Rattle Noise Under Vehicle - Heat Shield</strong></p>
<p>TSB 07-11-7</p>
<p>I can't reproduce it &quot;on demand&quot; but it is very disturbing when it happens. Typically during sub-freezing weather. It sounds like I have a gremlin with a jack-hammer under the car.</p>
<p><strong>Cold Start Tip-in Hesitation</strong></p>
<p>TSB 05-26-20</p>
<p>Again, I can't reproduce it on demand, but it definitely happens. Press the accelerator, and the engine skips a beat before revving up. I originally thought it was just characteristic of this particular power-train. Apparently it only happens on <em>very</em> early Fusions, built before 12/9/05 (like mine), and there's a fix for it. <em>I want the fix.</em></p>
<p><strong>Front Floor Mat Wear</strong></p>
<p>TSB 06-18-14</p>
<p>Here's one that's been known for a long time. &quot;Premature front driver side floor mat wear&quot; according to the text of the bulletin. In fact, Ford did replace these for me once already. The fact that the replacements wore through just as fast means that the issue wasn't actually fixed at the time of my first replacement. Come on Ford, this is just floor mats! One would think these should have been mastered for decades...</p>
<p><a href="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/floormat_2_04419366.jpg"><img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="floormat" border="0" alt="floormat" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/59/floormat_thumb_04419366.jpg" width="644" height="338"></a></p>
<h3>That's It</h3>
<p><em>Thank you for your time and attention. We now return you to your regularly scheduled SharePoint Blog.</em></p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Sat, 12 Sep 2009 13:54:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Off-Topic/default.aspx">Off-Topic</category></item><item><title>Calculated Columns and SPD Workflow Part 2</title><link>http://www.thesanitypoint.com/archive/2009/09/03/calculated-columns-and-spd-workflow-part-2.aspx</link><guid isPermaLink="False">/archive/2009/09/03/calculated-columns-and-spd-workflow-part-2.aspx</guid><description><![CDATA[<div class="ExternalClass00E5CEE228C544E8B7BEFFAAB4E153BF">
<p><img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px" title="MCj02317860000[1]" border="0" alt="MCj02317860000[1]" align="left" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/MCj023178600001_32B09E0D.png" width="124" height="91"><em>In this two part series, I show you how to take advantage of SharePoint calculated columns in your SharePoint Designer workflows. <a href="http://www.thesanitypoint.com/archive/2009/08/25/advanced-calculations-in-sharepoint-designer-workflow.aspx">Part 1</a> introduced calculated columns. Part 2 will describe several string manipulation functions, and show you how to consolidate these calculated columns into a &quot;function library&quot; of sorts.</em></p>
<h3>Hide the Clutter</h3>
<p>In part 1, I showed you how to use a calculated column to enhance a SharePoint Designer workflow. This is all well and good, but what if you have interim calculations? What if you need to do this manipulation on values entered by your user in the workflow initiation form?  Or maybe you have other types of information you don't want getting in the way of your users when they view the list.</p>
<p>This is where that &quot;Function Library&quot; I talked about comes into play. Technically, in SharePoint terms, it is actually a function <em>list</em>. We will create a list in SharePoint that contains not just the calculated columns, but &quot;input&quot; columns for the functions as well. We will then hide the list in SharePoint designer. Your workflows can still access it, but your users won't even know it is there.</p>
<h3>Holiday for Strings</h3>
<p>String manipulation is a great application for calculated columns. </p>
<p>One common workflow scenario is processing the items sent to an email-enabled list. Typically, you will want to parse the subject line to find some routing information. This information may take several forms, including:</p>
<ul>
<li>The beginning of the subject up to a delimiter </li>
<li>The end of the subject following a delimiter </li>
<li>The information contained <em>within</em> a pair of delimiters </li>
<li>Everything <em>except</em> what is contained between a pair of delimiters </li></ul>
<p>Of course, there are other possibilities, but these should be enough to illustrate the concept.</p>
<h3>Building the List</h3>
<p>We're going to create a list that supports all of the calculations described in the previous section. To start, of course, we need to create the list. (Remember, SharePoint Designer 2007 doesn't have the ability to create or edit the columns in a MOSS 2007/WSS 3.0 list, so we'll do this in the web UI.)</p>
<ol>
<li>From Site Actions, select &quot;Create&quot; </li>
<li>From the Create page, select &quot;Custom List&quot; </li>
<li>Give it the name TextFormulas. Since we're ultimately going to hid the list, don't show it on the QuickLaunch <br><img style="border-bottom:0px;border-left:0px;margin:5px 0px 0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image8_32B09E0D.png" width="480" height="362"> </li>
<li>Click Create </li></ol>
<p>Now that we have a basic list, we need to create our input columns:</p>
<ol>
<li>Display the newly-created TextFormulas list. </li>
<li>From the Settings toolbar, select List Settings <br><img style="border-bottom:0px;border-left:0px;margin:5px 0px 0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image121_32B09E0D.png" width="255" height="176"> </li>
<li>There is a &quot;Title&quot; column created by default. Click on it, change the name to &quot;SourceString&quot;, and click OK. <br><em>Note: This step isn't technically required, but it helps things make sense in the Workflow Designer</em> <br><img style="border-bottom:0px;border-left:0px;margin:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image_39_32B09E0D.png" width="481" height="259"> </li>
<li>Click Create Column </li>
<li>Enter &quot;Delimiter1&quot; for the Column Name. </li>
<li>Make sure &quot;Single line of text&quot; is selected as the field type, and click OK. <br><img style="border-bottom:0px;border-left:0px;margin:5px 0px 0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image241_32B09E0D.png" width="283" height="102"> </li>
<li>Repeat steps 4-6, except use &quot;Delimiter2&quot; as the column name. </li></ol>
<p>Once you have your input columns defined, you might think it is time to create your calculated columns. While you could, there is one more step you might want to perform. Because the output from string calculations isn't always obvious, it can be helpful to have some sample data to work with so you can see if the formulas are doing what you want them to.</p>
<p>Add an item to your list:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image28_32B09E0D.png" width="622" height="234"> </p>
<p>This item will give you all of the possibilities that we might want to work with - text before, after, within, and outside of, delimiters.</p>
<p><em>Now</em> we're ready to create the calculated columns. </p>
<p>For the first column we just want the text to the left of the first delimiter. This has the simplest formula, but it isn't necessarily as obvious as you might think. The formula is &quot;<em>trim(left([SourceString],find([Delimiter1],[SourceString])-1))</em>&quot;</p>
<p>We're using three string functions: Trim(), Left(), and Find(). They're also &quot;nested&quot;, meaning that we're calling one function from within another function.</p>
<p>The obvious function is &quot;Left()&quot;. It takes two parameters, the string we want the left hand side of, and how much of the string we want. Unfortunately, since this is delimited rather than a fixed position, we need to &quot;Find()&quot; the position of the delimiter in the source string. </p>
<p>That's all well and good, but why are we then subtracting 1? That's because we would otherwise return the delimiter itself in our results. Find returns the position of the delimiter, and Left function expects a count of returned characters. Since we don't want the delimiter, we subtract 1 so that we get the position immediately before it.</p>
<p>The Trim() function gets rid of any leading and trailing spaces, as even if you don't see them, these can make comparisons fail.</p>
<p>Create your calculated columns in accordance with this table:</p>
<table border="1" cellspacing="0" cellpadding="2" width="612">
<tbody>
<tr>
<td valign="top" width="200" align="middle">Column Name</td>
<td valign="top" width="410" align="middle">Formula</td></tr>
<tr>
<td valign="top" width="200">BeforeDelimiter1</td>
<td valign="top" width="410">trim(left([SourceString],find([Delimiter1],[SourceString])-1))</td></tr>
<tr>
<td valign="top" width="200">AfterDelimiter1</td>
<td valign="top" width="410">trim(right([SourceString],len([SourceString])-len([BeforeDelimiter1])-2)</td></tr>
<tr>
<td valign="top" width="200">BetweenDelimiters</td>
<td valign="top" width="410">trim(left([AfterDelimiter1],find([Delimiter2],[AfterDelimiter1])-1))</td></tr>
<tr>
<td valign="top" width="200">AfterDelimiter2</td>
<td valign="top" width="410">trim(right([AfterDelimiter1],len([AfterDelimiter1])-len([BetweenDelimiters])-2)</td></tr>
<tr>
<td valign="top" width="200">OutsideDelimiters</td>
<td valign="top" width="410">[BeforeDelimiter1]&amp;&quot; &quot;&amp;[AfterDelimiter2]</td></tr></tbody></table>
<p>Notice that each formula builds on the one before it - we're using the results of some calculated columns as input to others. This helps us avoid the 8-deep function nesting limit, as well as the 1000 character formula length limit. It also makes them <strong>a lot</strong> easier to read!</p>
<p>Assuming the formulas are entered correctly, viewing your sample data item will give you these results:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image32_32B09E0D.png" width="421" height="192"></p>
<p>While the value for &quot;AfterDelimiter1&quot; doesn't look very useful in and of itself, that is only because of the particular SourceString we are using. In this case, it is simply an interim value for deriving the BetweenDelimiters result. With a different SourceString it could be the final answer you are looking for. For example, you may have a simple two-part source with a single delimiter, such as &quot;G131131|Memory Failure&quot;. That string, with just the pipe (|) as Delimiter1, will result in &quot;Memory Failure&quot; for the AfterDelimiter1 value.</p>
<h3>Back to SharePoint Designer</h3>
<p>Once you have your function list created, you can use it in your SharePoint Designer workflows. </p>
<p>For this example, we're going to create a workflow on an email-enabled Time Off list. When a new item arrives, we want to parse the subject line to get the reason for the absence and assign it to the reason field. The reason text follows a dash (-), so we're just going to use the &quot;AfterDelimiter1&quot; calculated value.</p>
<p><em>Note: You may need to enable email-based workflows with the following command before using this example: &quot;<b>stsadm -o setproperty -pn declarativeworkflowautostartonemailenabled -pv true</b>&quot; See <a href="http://support.microsoft.com/kb/953289" target="_blank">this KB Article</a> for details.</em></p>
<p>When you define your workflow, first check the &quot;Automatically start this workflow when a new item is created box, as shown below:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image_40_32B09E0D.png" width="615" height="484"> </p>
<p>Click Next. </p>
<p>From the Actions menu, select Create List Item. (Since the menu is built from recently used actions, you may need to select it from the &quot;More Actions&quot; dialog.) You will get a new line in the Actions block that looks like the one below. Click the &quot;this list&quot; link.</p>
<p> <img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image12_32B09E0D.png" width="382" height="42"> </p>
<p>Select the TextFormulas list from the dropdown:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image_41_32B09E0D.png" width="391" height="139"> </p>
<p>The SourceString (*) field will already be chosen, as it is a required field. (This will be the &quot;Title&quot; field if you didn't rename it earlier.)</p>
<p>Click the &quot;Modify...&quot; button. You want to use the E-Mail Subject field from the current item as the source.</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image151_32B09E0D.png" width="392" height="175"> </p>
<p>After you click OK, Click Add in the Create New List Item dialog, and add the Delimiter1 field. Enter the dash as the Value. When you click OK, the Create dialog should look like this:</p>
<p>
<p> <img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image18_32B09E0D.png" width="392" height="437"></p>
<p>Click OK. Notice SPD automatically generates a variable called &quot;Create&quot; as the output of this function. That variable will hold the item ID for the formula item we create. This will be needed later.</p>
<h4>A Pregnant Pause</h4>
<p>The next action may seem a little odd. We're going to select the &quot;Pause for Duration&quot; action, and then set it to 0 days, 0 hours, and 0 minutes. The reason for this is that the calculations in our function list item don't take place instantaneously. If we were to try to grab the result as the next step, all we would get is an empty string. By telling our workflow to Pause, we give SharePoint a chance to catch up.</p>
<p><em>Note: Even though we set everything in the pause to zero, the workflow will wait until the next event cycle to continue. This delay may be a minute or so.</em></p>
<h4>Back to Work</h4>
<p>Once the workflow comes back from its coffee break, we need to get our value back. </p>
<ol>
<li>From the Actions menu, select Set Field in Current Item. </li>
<li>Click the &quot;field&quot; link, and select Reason from the dropdown. </li>
<li>Click the &quot;value&quot; link, then click the <em>fx</em> button that appears. </li>
<li>Select TextFormulas for the Source, with the Field of AfterDelimiter1. </li></ol>
<p>Now we need to tell the workflow how to find the row we want. Here's where that &quot;create&quot; variable comes into play. </p>
<ol>
<li>Select the TextFormulas:ID field from the Field dropdown </li>
<li>Click the <em>fx</em> button beside the Value field. </li>
<li>Select Workflow Data for the Source, and Varable: create for the Field </li>
<li>If your lookup dialog looks like the one below, click OK <br><img style="border-bottom:0px;border-left:0px;margin:5px 0px 0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image_42_1DBF1B9A.png" width="392" height="175"> </li></ol>
<p>The reason lookup should now look like the capture below:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image_43_1DBF1B9A.png" width="564" height="409"> </p>
<p>Click OK.</p>
<h4>Cleaning Up</h4>
<p>Now it is time to clean up after ourselves.</p>
<p>Just as &quot;real&quot; SharePoint developers need to keep in mind the need to &quot;dispose&quot; objects they create once they are done with them, we need to delete the formula record we created now that we are done with it. Fortunately, SharePoint provides a &quot;Delete Item&quot; action item for us. Select it from the Actions menu, and click the &quot;this list&quot; link. As you might guess by now, we're going to use the same &quot;create&quot; variable as before to select the item to delete from the TextFormulas list.</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image_44_1DBF1B9A.png" width="392" height="221"> </p>
<p>Click OK, then click Finish in the Workflow Designer. SharePoint Designer will then validate the workflow and save it.</p>
<h4>Covering our Tracks</h4>
<p>Finally, as I mentioned way back at the beginning of this article, you may not want your users to readily see your formula list. Especially since the interim information will be hanging around during that pause. Although we suppressed the list from the Quick Launch when we created it, people can still see it from the &quot;View All Site Content&quot; link. To make it go away from there, we can take advantage of SharePoint Designer's ability to &quot;hide&quot; a list. </p>
<p>To hide a list, first open the Lists folder (you won't need this step for document libraries).</p>
<p>Right-click the list you want to hide and select Properties, as shown below:</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image4_1DBF1B9A.png" width="548" height="363"> </p>
<p>Click the &quot;General&quot; tab. Click on the checkbox labeled &quot;Hide from browsers&quot;.</p>
<p>Click OK</p>
<p><img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px" title="image" border="0" alt="image" src="http://www.thesanitypoint.com/Lists/Posts/Attachments/58/image81_1DBF1B9A.png" width="367" height="353"></p>
<p>
<p>
<p>
<p>
<p>
<p>
<p>
<p>
<p>Now the list will be &quot;invisible&quot; via most normal ways of discovering SharePoint content. That is also why we waited until after the workflow was done in order to hide it. Although you can still see and work with hidden lists in most parts of SharePoint Designer, the function called by the Workflow Designer to enumerate lists is the same one used by the web interface, so you wouldn't be able to select it.</p>
<h3>Conclusion</h3>
<p>This second part took a bit longer to write than I expected. I hope you found it worth the wait!</p>
<p>In these two articles, I have showed you the power of SharePoint calculated columns, and how to use them in a SharePoint Designer workflow. In the process, I have introduced a number of other concepts, including:</p>
<ul>
<li>String functions</li>
<li>Hidden lists</li>
<li>Email enabling lists</li>
<li>Using the output of one calculated column to feed another.</li>
<li>Workflow variables</li></ul>
<p>Even so, I have barely scratched the surface. I encourage you to explore further the capabilities of calculated columns and SharePoint Designer workflows.</p></div>]]></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Woody Windischman</dc:creator><pubDate>Thu, 03 Sep 2009 23:38:00 GMT</pubDate><category domain="http://www.thesanitypoint.com/archive/tags/Administration/default.aspx">Administration</category><category domain="http://www.thesanitypoint.com/archive/tags/Customization/default.aspx">Customization</category><category domain="http://www.thesanitypoint.com/archive/tags/Design/default.aspx">Design</category><category domain="http://www.thesanitypoint.com/archive/tags/Lists and Libraries/default.aspx">Lists and Libraries</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.thesanitypoint.com/archive/tags/SharePoint Designer/default.aspx">SharePoint Designer</category><category domain="http://www.thesanitypoint.com/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://www.thesanitypoint.com/archive/tags/WSS/default.aspx">WSS</category></item></channel></rss>