<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.conchango.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Paul Galvin's Blog</title><link>http://blogs.conchango.com/paulgalvin/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Awarded MVP for SharePoint</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/07/01/awarded-mvp-for-sharepoint.aspx</link><pubDate>Tue, 01 Jul 2008 19:29:59 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11626</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11626.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11626</wfw:commentRss><description>&lt;table cellspacing="1" cellpadding="2" width="711" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;p align="center"&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/AwardedMVPforSharePoint_CAA4/MVPLogo_2.gif"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="MVPLogo" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/AwardedMVPforSharePoint_CAA4/MVPLogo_thumb.gif" width="119" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td&gt; &lt;p&gt;This morning, Microsoft emailed to tell me I have given the Microsoft MVP award for SharePoint!&lt;/p&gt; &lt;p&gt;It's a lot to take in all at once.&amp;nbsp; When I've had a chance to properly reflect, I'll share more of my thoughts on the whole thing.&amp;nbsp; I know it's a subject of great interest to a lot of people.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I'm bursting with excitement.&amp;nbsp; The SharePoint MVP crew is a great group of men and women dedicated to building and expanding the community.&amp;nbsp; I've only met a handful and look forward to meeting more and helping to expand and improve community resources over the coming year.&amp;nbsp; It's going to be a while ride...&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11626" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/Personal/default.aspx">Personal</category></item><item><title>Adding to the Lore: SSRS Tells Me "rsAccessDenied", But ... I Really DO Have Access</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/06/23/adding-to-the-lore-ssrs-tells-me-quot-rsaccessdenied-quot-but-i-really-do-have-access.aspx</link><pubDate>Tue, 24 Jun 2008 03:03:16 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11547</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11547.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11547</wfw:commentRss><description>&lt;p&gt;A few weeks back, I was working with my developer colleague on a project involving SQL Server Reporting Services plug-in for MOSS.&amp;nbsp; He was developing a web part that provides a fancy front-end to the report proper (the main feature being a clever lookup on a parameter with several thousand searchable values behind it).&lt;/p&gt; &lt;p&gt;This was working great in the development environment but in the user acceptance testing (UAT) environment, it wouldn't work.&amp;nbsp; Firing up the debugger, we would see exception details like this:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The permissions granted to user ‘UAT_domain\mosssvc’ are insufficient for performing this operation.(rsAccessDenied).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;If you do a live search on the above error, you find it's quite common.&amp;nbsp; Scarily common.&amp;nbsp; The worst kind of common because it has many different potential root causes and everyone's suggested solution "feels" right.&amp;nbsp; We probably tried them all.&lt;/p&gt; &lt;p&gt;In our case, the problem was that we had done a backup/restore of DEV to UAT.&amp;nbsp; Somewhere in the data, something was still referring to "DEV_domain" (instead of the updated "UAT_Domain").&amp;nbsp; We created a new site, added the web part and that solved our problem.&lt;/p&gt; &lt;p&gt;Hopefully this will save someone an hour or two down the line.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f97dc328-1641-442e-acc1-4413ab29c494" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SSRS" rel="tag"&gt;SSRS&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11547" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Invoking SSRS Web Services From WSS / MOSS in FBA Environment</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/06/09/invoking-ssrs-web-services-from-wss-moss-in-fba-environment.aspx</link><pubDate>Mon, 09 Jun 2008 22:40:01 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11404</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11404.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11404</wfw:commentRss><description>&lt;p&gt;We needed to invoke the "CreateSubscription" method on an SSRS web service that is hosted in an FBA managed MOSS environment from a custom web part.&amp;nbsp; We kept getting variations of:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;401: Not authorized  &lt;li&gt;Object Moved&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The "object moved" message was most interesting because it was saying that the "object" (our SSRS service) had "moved" to login.aspx.&amp;nbsp; This clearly meant we had some kind of authentication problem.&lt;/p&gt; &lt;p&gt;I eventually realized that I had &lt;a href="http://www.portalsolutions.net/Blog/Lists/Posts/AllPosts.aspx" target="_blank"&gt;bookmarked a blog entry&lt;/a&gt; by Robert Garret that described how to invoke a general purpose WSS/MOSS web service living inside an FBA environment.&amp;nbsp; Note that I can't link directly to the article (as of 06/09/08) because it wants to authenticate.&amp;nbsp; The link I provide brings you to an "all posts" view and you can locate the specific article by searching for "Accessing MOSS Web Services using Forms Based Authentication".&lt;/p&gt; &lt;p&gt;Here's the code that worked for us:&lt;/p&gt; &lt;table bgcolor="lightgrey"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;pre class="code"&gt;&lt;span&gt;ReportingService2006 rs = &lt;/span&gt;&lt;span&gt;null; &lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;// Authenticate &lt;/span&gt;&lt;span&gt;Authentication auth = &lt;/span&gt;&lt;span&gt;new &lt;/span&gt;&lt;span&gt;Authentication(); &lt;br&gt;&lt;/span&gt;&lt;span&gt;auth.Url = &lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;&lt;a href="http://URL/_vti_bin/Authentication.asmx&amp;quot;;"&gt;http://URL/_vti_bin/Authentication.asmx&lt;/span&gt;&lt;span&gt;"; &lt;/a&gt;&lt;br&gt;auth.CookieContainer = &lt;/span&gt;&lt;span&gt;new &lt;/span&gt;&lt;span&gt;CookieContainer(); &lt;br&gt;&lt;/span&gt;&lt;span&gt;LoginResult result = auth.Login(&lt;/span&gt;&lt;span&gt;"userid", &lt;/span&gt;&lt;span&gt;"password"); &lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;if (result.ErrorCode == &lt;/span&gt;&lt;span&gt;LoginErrorCode.NoError) &lt;br&gt;{ &lt;br&gt;  &lt;/span&gt;&lt;span&gt;// No error, so get the cookies. &lt;br&gt;  &lt;/span&gt;&lt;span&gt;CookieCollection cookies = auth.CookieContainer.GetCookies(&lt;/span&gt;&lt;span&gt;new &lt;/span&gt;&lt;span&gt;Uri(auth.Url)); &lt;br&gt;  &lt;/span&gt;&lt;span&gt;Cookie authCookie = cookies[result.CookieName]; &lt;br&gt;  rs = &lt;/span&gt;&lt;span&gt;new &lt;/span&gt;&lt;span&gt;ReportingService2006(); &lt;br&gt;  rs.Url = &lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;&lt;a href="http://server/_vti_bin/ReportServer/ReportService2006.asmx&amp;quot;;"&gt;http://server/_vti_bin/ReportServer/ReportService2006.asmx&lt;/span&gt;&lt;span&gt;"; &lt;/a&gt;&lt;br&gt;  rs.CookieContainer = &lt;/span&gt;&lt;span&gt;new &lt;/span&gt;&lt;span&gt;CookieContainer(); &lt;br&gt;  rs.CookieContainer.Add(authCookie); &lt;br&gt;} &lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span&gt;try
{
  rs.CreateSubscription(report, extSettings, desc, eventType, matchData, parameters1);
}
&lt;/span&gt;&lt;span&gt;catch (&lt;/span&gt;&lt;span&gt;Exception ex)
{
  &lt;/span&gt;&lt;span&gt;Console.WriteLine(ex.Message.ToString());
}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I interpret things to work like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Our web part needs to dial up the authentication service and say, "Hey, Tony, it's me!". 
&lt;li&gt;Authentication service replies saying, "Hey, I know you.&amp;nbsp; How are the kids?&amp;nbsp; Here's a token." 
&lt;li&gt;We call up the SSRS service and say, "Tony sent me, here's the token."&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:216735ed-6b03-4295-b6bf-f56e42a2d336" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SSRS" rel="tag"&gt;SSRS&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Web%20Services" rel="tag"&gt;Web Services&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SharePoint%20Development" rel="tag"&gt;SharePoint Development&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11404" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SSRS/default.aspx">SSRS</category><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Development/default.aspx">SharePoint Development</category></item><item><title>Saving Older MS Office Files to SharePoint Using WebDAV -- Problems and Fixes</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/06/01/saving-older-ms-office-files-to-sharepoint-using-webdav-problems-and-fixes.aspx</link><pubDate>Sun, 01 Jun 2008 13:18:33 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11281</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11281.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11281</wfw:commentRss><description>&lt;p&gt;During the past week, my &lt;a href="http://spforsquirrels.blogspot.com/" target="_blank"&gt;colleague&lt;/a&gt; and I were doing some work for a client in NYC.&amp;nbsp; We were testing a different aspects of a MOSS implementation using their "standard" workstation build (as opposed to our laptops).&amp;nbsp; While doing that, we ran into a few errors by following these steps:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Open up an MS word document via windows explorer (which uses WebDAV).  &lt;li&gt;Make a change.  &lt;li&gt;Save it.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;We came to realize that some times (usually the first time) we saved the document, the save didn't "stick."&amp;nbsp; Save did not save.&amp;nbsp; We would pull that document back up and our changes simply were not there.&amp;nbsp; &lt;/p&gt; &lt;p&gt;We didn't understand the root issue at this point, but we figured that we should make sure that the latest MS Office service pack had been installed on that work station.&amp;nbsp; The IT folks went and did that.&amp;nbsp; We went through the test again and we discovered a new problem.&amp;nbsp; When we saved it, we now got this error:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/SavingOlderMSOfficeFilestoSharePointUsin_7551/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="294" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/SavingOlderMSOfficeFilestoSharePointUsin_7551/image_thumb.png" width="451" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This time, it seemed like every change was, in fact, saved, whether we answered Yes or No to the scripts question.&amp;nbsp; &lt;/p&gt; &lt;p&gt;We finally had a look at the actual version of Office and it turns out that the workstation was running MS Office 2000 with service pack 3 which shows up under Help -&amp;gt; About as "Office 2002".&lt;/p&gt; &lt;p&gt;The moral of the story: I will always use Office 2003 as my minimum baseline office version when using WebDAV and MOSS.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c95579d0-acf4-4d2a-8f44-41ae92913ccc" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/WebDAV" rel="tag"&gt;WebDAV&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;(For search engine purposes, this is the error's text):&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Line: 11807&lt;/p&gt; &lt;p&gt;Char: 2&lt;/p&gt; &lt;p&gt;Error: Object doesn't support this property or method&lt;/p&gt; &lt;p&gt;Code; 0&lt;/p&gt; &lt;p&gt;URL: &lt;a href="http://sharepoint01/DocumentReview/_vti_bin/owssvr.dll?location=Documents/1210/testworddocument.doc&amp;amp;dialogview=SaveForm"&gt;http://sharepoint01/DocumentReview/_vti_bin/owssvr.dll?location=Documents/1210/testworddocument.doc&amp;amp;dialogview=SaveForm&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Do you want to continue running scripts on this page?&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11281" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Configuration/default.aspx">SharePoint Configuration</category></item><item><title>Logging Workflow Activity in SharePoint Designer</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/05/18/logging-workflow-activity-in-sharepoint-designer.aspx</link><pubDate>Sun, 18 May 2008 12:51:13 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11132</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11132.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11132</wfw:commentRss><description>&lt;p&gt;Last week, I was working out how to &lt;a href="http://feeds.feedburner.com/~r/PaulGalvinsSharepointSpace/~3/290580322/cns!1CC1EDB3DAA9B8AA!1071.entry" target="_blank"&gt;loop and implement a state machine&lt;/a&gt; using SharePoint Designer and mentioned, as an aside, that I would probably write a blog post about better workflow logging.&lt;/p&gt; &lt;p&gt;Well, Sanjeev Rajput beat me to it.&amp;nbsp; &lt;a href="http://splittingshares.wordpress.com/2008/05/16/logging-workflows-for-troubleshooting/" target="_blank"&gt;Have a look&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Saving log data into a custom list seems superior to using the regular workflow history:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;It's just a custom list, so you can export it to excel very easily.  &lt;li&gt;You can create views, dynamically filter the data, etc.  &lt;li&gt;It's not subject to the auto-purge you get with regular workflow history.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There are some risks / downsides:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Many running workflows with a lot of logging could cause too much data to be written to the list.  &lt;li&gt;Maybe you *do* want automatic purging.&amp;nbsp; You don't get that feature with this approach (without coding).  &lt;li&gt;Security is tricky.&amp;nbsp; In order to write to the list, the user must have permission to do so.&amp;nbsp; That means that it's probably not suitable for any kind of "official" audit since the user could discover the list and edit it.&amp;nbsp; This could be overcome with some custom programming.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:750b67f1-540e-45cc-8821-e0385d5b4b0a" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint%20Workflow" rel="tag"&gt;SharePoint Workflow&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11132" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Workflow/default.aspx">SharePoint Workflow</category></item><item><title>The Trouble With Tribbles ... err .. KPIs</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/05/17/the-trouble-with-tribbles-err-kpis.aspx</link><pubDate>Sat, 17 May 2008 14:39:04 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11131</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11131.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11131</wfw:commentRss><description>&lt;p&gt;This past week I finished off a proof of concept project for a client in Manhattan.&amp;nbsp; While implementing the solution, I ran into another shortcoming of MOSS KPIs (&lt;a href="http://feeds.feedburner.com/~r/PaulGalvinsSharepointSpace/~3/237910104/cns!1CC1EDB3DAA9B8AA!748.entry" target="_blank"&gt;see here for a previous KPI issue and my workaround&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: We used SharePoint Designer workflow to model a fairly complex multi-month long business process.&amp;nbsp; As it chugged along, it would update some state information in a list.&amp;nbsp; KPIs use this data to do their mojo.&lt;/p&gt; &lt;p&gt;We decided to create a new site each time a new one of these business processes kicks off.&amp;nbsp; Aside from the workflow itself, these sites host several document libraries, use audience targeting and so forth.&amp;nbsp; Just a bunch of stuff to help with collaboration among the internal employees, traveling employees and the client's participating business partners.&lt;/p&gt; &lt;p&gt;We also wanted to show some KPIs that monitor the overall health of that specific business process as promoted by the workflow state data and viewed using the KPIs.&lt;/p&gt; &lt;p&gt;Finally, we used KPI list items that do a count on a view on a list in the site (as opposed to pulling from another data source, like excel or SQL).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;: As you can imagine, assuming we were to carry the basic idea forward into a production world, we would want a site template.&amp;nbsp; Provision a new site based off a "business process" template. &lt;/p&gt; &lt;p&gt;The problem is that you can't seem to get a functioning KPI that way.&amp;nbsp; When I create a new site based on a template with a KPI List and KPI web part, the new site's KPI data are broken.&amp;nbsp; The new site's KPI list points at whatever source you defined when you first saved it as a template.&lt;/p&gt; &lt;p&gt;By way of example:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create a new site and build it to perfection.&amp;nbsp; This site includes the KPI data.  &lt;li&gt;Save that as a template.  &lt;li&gt;Create a new site and base if off the template.  &lt;li&gt;This new site's KPI list items' sources point to the site template, not the current site.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The instantiation process does not correct the URL.&lt;/p&gt; &lt;p&gt;I tried to solve this by specifying a relative URL when defining the KPI list item.&amp;nbsp; However, I couldn't get any variation of that to work.&lt;/p&gt; &lt;p&gt;I always want to pair up these "problem" blog posts with some kind of solution, but in this case I don't have a good one.&amp;nbsp; The best I can figure is that you need to go in to the newly provisioned site and fix everything manually.&amp;nbsp; The UI makes this even harder because changing the URL of the source list causes a refresh, so you really have to redefine the whole thing from scratch.&lt;/p&gt; &lt;p&gt;If anyone knows a better way to handle this, please post a comment.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b0d2d9db-3161-401e-91bf-c76eaf37ad4f" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/KPI" rel="tag"&gt;KPI&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11131" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>MOSS Small Farm Installation and Configuration War Story</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/05/15/moss-small-farm-installation-and-configuration-war-story.aspx</link><pubDate>Fri, 16 May 2008 02:11:05 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11113</guid><dc:creator>paul.galvin</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11113.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11113</wfw:commentRss><description>&lt;p&gt;This week, I've struggled a bit with my team to get MOSS installed in a simple two-server farm.&amp;nbsp; Having gone through it, I have a greater appreciation for the kinds of problems people report on the MSDN forums and elsewhere.&lt;/p&gt; &lt;p&gt;The final farm configuration:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SQL/Index/Intranet WFE inside the firewall.  &lt;li&gt;WFE in the DMZ.  &lt;li&gt;Some kind of firewall between the DMZ and the internal server.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Before we started the project, we let the client know which ports needed to be open.&amp;nbsp; During the give and take, back and forth over that, we never explicitly said two important things:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;SSL means you need a certificate.  &lt;li&gt;The DMZ server must be part of a domain.&amp;nbsp; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Day one, we showed up to install MOSS and learned that the domain accounts for database and MOSS hadn't been created.&amp;nbsp; To move things along, we went ahead and installed everything with a local account on the intranet server.&amp;nbsp; &lt;/p&gt; &lt;p&gt;At this point, we discovered the confusion over the SSL certificate and, sadly, decided to have our infrastructure guy come back later that week to continue installing the DMZ server.&amp;nbsp;&amp;nbsp; In the mean time, we solution architects moved ahead with the business stuff.&lt;/p&gt; &lt;p&gt;A weekend goes by and the client obtains the certificate.&lt;/p&gt; &lt;p&gt;Our infrastructure guy shows up and discovers that the DMZ server is not joined to any domain (either a perimeter domain with limited trust or the intranet domain).&amp;nbsp; We wasted nearly a 1/2 day on that.&amp;nbsp; If we hadn't let the missing SSL certificate bog us down, we would have discovered this earlier.&amp;nbsp; Oh well....&lt;/p&gt; &lt;p&gt;Another day passes and the various security committees, interested parties and (not so) innocent bystanders all agree that it's OK to join the DMZ server with the intranet domain (this is a POC, after all, not a production solution).&lt;/p&gt; &lt;p&gt;Infrastructure guy comes in to wrap things up.&amp;nbsp; This time we successfully pass through the the modern-day gauntlet affectionately known as the "SharePoint Configuration Wizard."&amp;nbsp; We have a peek in central administration and ... yee haw! ... DMZ server is listed in the farm.&amp;nbsp; We look a little closer and realize we broke open the Champaign a mite bit early.&amp;nbsp; WSS services is stuck in a "starting" status.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Long story short, it turns out that we forgot to change the identity of the service account via central administration from the original local account to the new domain account.&amp;nbsp; We did that, re-ran the configuration wizard and voila!&amp;nbsp; We were in business.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8a6d95ad-20d0-47cb-b8c3-e9890f8fd915" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint%20Administration" rel="tag"&gt;SharePoint Administration&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11113" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Configuration/default.aspx">SharePoint Configuration</category></item><item><title>Mea Culpa -- SharePoint Designer *CAN* Create State Machine Workflows</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/05/14/mea-culpa-sharepoint-designer-can-create-state-machine-workflows.aspx</link><pubDate>Thu, 15 May 2008 02:27:31 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:11095</guid><dc:creator>paul.galvin</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/11095.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=11095</wfw:commentRss><description>&lt;p&gt;I've recently learned that it's possible and even fairly easy to create a state machine workflow using SharePoint Designer.&amp;nbsp; Necessity is the mother of invention and all that good stuff and I had a need this week that looked for an invention.&amp;nbsp; Coincidentally, I came across &lt;a href="http://forums.microsoft.com/forums/ShowPost.aspx?PostID=3340720&amp;amp;SiteID=1" target="_blank"&gt;this MSDN forum post&lt;/a&gt; as well.&amp;nbsp; My personal experience this week and that "independent confirmation" lends strength to my conviction.&amp;nbsp; I plan to write about this at greater length with a full blown example, but here's the gist of it:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The approach leverages the fact that a workflow can change a list item, thereby triggering a new workflow.&amp;nbsp; I've normally considered this to be a nuisance and even &lt;a href="http://feeds.feedburner.com/~r/PaulGalvinsSharepointSpace/~3/276493484/cns!1CC1EDB3DAA9B8AA!995.entry" target="_blank"&gt;blogged about using semaphores&lt;/a&gt; to handle it.  &lt;li&gt;SharePoint allows multiple independent workflows to be active against a specific list item. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;To configure it:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Design your state machine (i.e., the states and how states transition from one to the next).  &lt;li&gt;Implement each state as separate workflow.  &lt;li&gt;Configure each of these state workflows to execute in response to any change in the list item. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Each state workflow follows this rough pattern:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Upon initialization, determine whether it should really run by inspecting state information in the "current item".&amp;nbsp; Abort if not.  &lt;li&gt;Do the work.  &lt;li&gt;Update the "current item" with new state information.&amp;nbsp; This triggers an update to the current item and fires off all the state workflows. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Aside from the obvious benefit that one can create a declarative state machine workflow, all that state information is terrific for building KPIs and interesting views.&lt;/p&gt; &lt;p&gt;It does have a fairly substantial drawback -- standard workflow history tracking is even more useless than normal :)&amp;nbsp; That's easily remedied, however.&amp;nbsp; Store all of your audit type information in a custom list.&amp;nbsp; That's probably a good idea even for vanilla sequential workflow, but that's for another blog post :)&lt;/p&gt; &lt;p&gt;I call this a "mea culpa" because I have, unfortunately, said more than once on forums and elsewhere that one must use visual studio to create a state machine workflow.&amp;nbsp; That simply isn't true.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:99c9dc03-60fd-4422-a6a8-ff0bc0879aba" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Workflow" rel="tag"&gt;Workflow&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=11095" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Workflow/default.aspx">SharePoint Workflow</category></item><item><title>Quick and Simple: Make an InfoPath Form Read Only (InfoPath Forms Services in MOSS)</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/04/25/quick-and-simple-make-an-infopath-form-read-only-infopath-forms-services-in-moss.aspx</link><pubDate>Fri, 25 Apr 2008 13:10:40 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:10809</guid><dc:creator>paul.galvin</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/10809.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=10809</wfw:commentRss><description>&lt;p&gt;There's a common business scenario like this:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;User fills out an InfoPath form.  &lt;li&gt;Submits form.  &lt;li&gt;Long-running workflow process kicks off.  &lt;li&gt;While the workflow is running, we don't want anyone to change the content of the form. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://office.microsoft.com/en-us/infopath/HA102112281033.aspx" target="_blank"&gt;This office.microsoft.com example&lt;/a&gt; describes how to create a separate "view" and mark the whole view as read-only.&amp;nbsp; This is a workable approach but has the drawback that you've effectively created two entire versions of the same form and must now keep them in sync manually.&amp;nbsp; If you add a field to the editable view, you must then add it to the non-editable view as well.&amp;nbsp; Over time, with different developers, there can be some divergence.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This alternative might work better in some cases:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Add a new field to the form called "IsEditable".  &lt;li&gt;Set its default value to true.  &lt;li&gt;Promote it when publishing to MOSS.  &lt;li&gt;In the workflow, set the value of IsEditble to false.  &lt;li&gt;Go back to the form.  &lt;li&gt;Add a rule that "upon open of the form", disable your save button when IsEditable is false. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The drawback to this approach is that all the fields will still be editable on the screen.&amp;nbsp; The user can get a false impression that they can actually change content.&amp;nbsp; You can mitigate that by putting in some text that the form is disabled, possibly in big red letters across the top of the page.&lt;/p&gt; &lt;p&gt;In one project, I created a "workflow status" view.&amp;nbsp; As the workflow progressed, it would update specific status fields that had been promoted from the form.&amp;nbsp; When the user opened the form, the "open form" rule automatically switched to that view and the user had a nice little summary status.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ec1484ef-9eff-42bf-b5a5-7f8927a6b7aa" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/InfoPath%202007" rel="tag"&gt;InfoPath 2007&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SharePoint%20Workflow" rel="tag"&gt;SharePoint Workflow&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=10809" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Workflow/default.aspx">SharePoint Workflow</category><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/InfoPath/default.aspx">InfoPath</category></item><item><title>Use Semaphores in SharePoint Designer Workflow to Prevent Endless Loops</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/04/23/use-semaphores-in-sharepoint-designer-workflow-to-prevent-endless-loops.aspx</link><pubDate>Thu, 24 Apr 2008 00:07:47 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:10780</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/10780.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=10780</wfw:commentRss><description>&lt;p&gt;It's possible to cause an endless loop in a SharePoint Designer workflow.&amp;nbsp; A common implementation pattern like this causes the problem:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create a workflow and associate with a list.  &lt;li&gt;Indicate that it should start on create of new items and update of existing items.  &lt;li&gt;A step in the workflow updates a field in "Current Item".  &lt;li&gt;Since the current item changed, the workflow starts anew.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;To prevent this endless loop, implement a simple semaphore:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Add a site column (or column to the list/library if you're not using content types).  &lt;li&gt;Hide it from the edit page (easy to do if a site column via its properties, not as easy if a list column).  &lt;li&gt;In the workflow, check to see if the value of the semaphore column is blank.  &lt;li&gt;If it is blank, set it to a non-blank value and proceed.  &lt;li&gt;If is is not blank, exit immediately.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This can become a fairly nuanced solution, depending on business requirements and so forth, but it's been a workable pattern when I've needed it.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6860f90f-05ec-4f4b-9680-0e1158ff47b5" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint%20Workflow" rel="tag"&gt;SharePoint Workflow&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=10780" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Workflow/default.aspx">SharePoint Workflow</category></item><item><title>Developers: How Do I Learn SharePoint?</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/04/22/developers-how-do-i-learn-sharepoint.aspx</link><pubDate>Tue, 22 Apr 2008 13:35:14 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:10754</guid><dc:creator>paul.galvin</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/10754.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=10754</wfw:commentRss><description>&lt;p&gt;In the last several months, a dozen or more folks from across the planet have been emailing me and asking the general question, "How do I learn SharePoint?"&lt;/p&gt; &lt;p&gt;I'm hardly authoritative, but I've had some success (and trying to get better all the time) so I thought I'd document my personal road map.&amp;nbsp; Others may find it valuable.&lt;/p&gt; &lt;p&gt;Before I do that, I just want to observe that it's obvious to me, based on these personal emails and the even greater number of MSDN / SharePoint University posts of the same nature, that there is huge developer interest in getting up to speed with WSS/MOSS.&amp;nbsp; I wonder what it's going to be like a year from now ... easier to find good SharePoint talent?&amp;nbsp; The same?&amp;nbsp; Are folks committing themselves to the platform at a rate sufficient to keep up with demand for good resources?&amp;nbsp; How could you even figure something like that out short of a WAG?&lt;/p&gt; &lt;h2&gt;Paul's Roadmap&lt;/h2&gt; &lt;p&gt;I was full time employed by the good folk at Conchango while I followed this road map.&amp;nbsp; This means that from a learning perspective, I was actively engaged in projects as I followed the steps I outline below.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;Some Basic Terms&lt;/h3&gt; &lt;p&gt;For people entering this world, there are two key acronyms:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;WSS&lt;/strong&gt;: Windows SharePoint Services  &lt;li&gt;&lt;strong&gt;MOSS&lt;/strong&gt;: Microsoft Office SharePoint Server&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;WSS is "free" in that it's bundled with windows server 2003 (or at least can be downloaded from MS).&amp;nbsp; I put quotes around free because you need a box, a valid O/S license and probably SQL (though there's a "free" kind of SQL as well).&amp;nbsp; &lt;/p&gt; &lt;p&gt;MOSS is built on top of WSS and extends it.&amp;nbsp; There is no MOSS without WSS.&amp;nbsp; MOSS is not free.&lt;/p&gt; &lt;p&gt;Perhaps not day one, but soon after you've got some basic familiarity with the platform, it's important to learn the differences.&amp;nbsp; For example, a powerful web part, the Content Query Web Part, is a MOSS feature and not available WSS.&amp;nbsp; People often make the incorrect assumption that CQWP is available in WSS and then end up scrambling for a stop-gap measure when they realize their error.&lt;/p&gt; &lt;h3&gt;Hit the Books&lt;/h3&gt; &lt;p&gt;I started working with WSS/MOSS on about 01/02/2007.&amp;nbsp; I had a little prior experience with SPS 2003 but very little.&amp;nbsp; To get myself started, I purchased the &lt;a href="http://paulgalvin.spaces.live.com/lists/cns!1CC1EDB3DAA9B8AA!203/" target="_blank"&gt;two books listed here&lt;/a&gt; (&lt;a title="http://paulgalvin.spaces.live.com/lists/cns!1CC1EDB3DAA9B8AA!203/" href="http://paulgalvin.spaces.live.com/lists/cns!1CC1EDB3DAA9B8AA!203/"&gt;http://paulgalvin.spaces.live.com/lists/cns!1CC1EDB3DAA9B8AA!203/&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;I started with the big blue administration book.&amp;nbsp; Naturally, it covers administration.&amp;nbsp; At the same time, it provides a survey of all MOSS features (and WSS features as well).&lt;/p&gt; &lt;p&gt;For me, it's not so important to remember all the various details (until it's time to get certified) but it's good to know the boundaries.&amp;nbsp; (I follow this same approach in 1st person shooters I play on the xbox or PC -- I enter a room and tend to make a counter-clockwise loop until I get back where I started.&amp;nbsp; I just feel better knowing the shape of the box I'm in.)&lt;/p&gt; &lt;p&gt;After reading the big blue book, I would read the entire Inside WSS book.&amp;nbsp; It dives deeply into issues that developers care most about.&lt;/p&gt; &lt;h3&gt;Create a Virtual Environment&lt;/h3&gt; &lt;p&gt;In order to do any development or properly use the environment, you need a full blown windows server operating system with SharePoint Designer, Visual Studio 2005 (2008 works, but some useful tools have yet to be ported as of the writing of this article), InfoPath 2007 and some other stuff.&amp;nbsp; There are many good blog entries describing this process.&amp;nbsp; I'd have a look at these two:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.pptspaces.com/sharepointreporterblog/Lists/Posts/Post.aspx?ID=28" target="_blank"&gt;How to Create a MOSS 2007 VPC Image: The Whole 9 Yards - SharePoint Reporter Blog&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.sharepointforum.com/en-US/Blog/Lists/Posts/Post.aspx?ID=6" target="_blank"&gt;How to build an optimal developer VPC for SharePoint Development - Blog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In addition, Andrew Connell shared his experiences with VMWare here:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.andrewconnell.com/blog/archive/2007/05/22/6052.aspx" target="_blank"&gt;Microsoft's virtualization products vs. VMWare's offerings&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Use your favorite search engine to see what other people do.&amp;nbsp; It's a useful learning exercise in and of itself.&lt;/p&gt; &lt;p&gt;Spend a few minutes angrily denouncing the fact that you need a server environment on which to do development.&amp;nbsp; But ... don't bother blogging about it or posting it to MSDN forums.&amp;nbsp; &lt;a href="http://codebetter.com/blogs/jeffrey.palermo/archive/2007/09/13/sharepoint-is-not-a-good-development-platform.aspx" target="_blank"&gt;It's already been done :)&lt;/a&gt;.&amp;nbsp; Instead, embrace it and move on.&amp;nbsp; You'll be better off for it.&lt;/p&gt; &lt;h3&gt;Get Certified&lt;/h3&gt; &lt;p&gt;I believe that the MS SharePoint certification path, which consists four exams, is exhaustive.&amp;nbsp; I suggest that you follow their online preparation guide and do your best to understand each of the areas of the test.&lt;/p&gt; &lt;p&gt;I &lt;em&gt;do not&lt;/em&gt; suggest that you take the exam just to pass it.&amp;nbsp; I &lt;em&gt;do not&lt;/em&gt; suggest that you use one of the "brain dump" style 3rd party "tools" for passing MS tests.&amp;nbsp; If you can take the test, pass it based on a combination of your own directed study and hands-on experience, you'll be a stronger developer and job candidate for it.&lt;/p&gt; &lt;p&gt;There are four tests in two "tracks":&lt;/p&gt; &lt;p&gt;Developer:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/learning/exams/70-541.mspx" target="_blank"&gt;TS: Microsoft Windows SharePoint Services 3.0 - Application Development&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/learning/exams/70-542.mspx" target="_blank"&gt;TS: Microsoft Office SharePoint Server 2007 – Application Development&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Admin:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/learning/exams/70-631.mspx" target="_blank"&gt;TS: Windows SharePoint Services 3.0, Configuring&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.microsoft.com/learning/exams/70-630.mspx" target="_blank"&gt;TS: Microsoft Office SharePoint Server 2007, Configuring&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I recommend that developers study for all of these exams.&amp;nbsp; You'll be strong for them, though I suppose if you skipped the admin exams, you would get by.&lt;/p&gt; &lt;p&gt;I found the WSS version to be considerably more challenging than the corresponding MOSS versions, much to my surprise.&amp;nbsp; I was in a class recently and several others made the same point.&lt;/p&gt; &lt;p&gt;While I was studying for the 70-542 exam (MOSS development) I tracked my study resources.&amp;nbsp; These may be helpful to you as well: &lt;a title="http://paulgalvin.spaces.live.com/Blog/cns!1CC1EDB3DAA9B8AA!192.entry" href="http://paulgalvin.spaces.live.com/Blog/cns!1CC1EDB3DAA9B8AA!192.entry"&gt;http://paulgalvin.spaces.live.com/Blog/cns!1CC1EDB3DAA9B8AA!192.entry&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Plug Yourself Into the Community&lt;/h3&gt; &lt;p&gt;The SharePoint community is vibrant, strong and growing larger all the time.&lt;/p&gt; &lt;p&gt;You want to look at the following to start:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Blogs  &lt;li&gt;Forums  &lt;li&gt;Codeplex  &lt;li&gt;Twitter&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Blogs&lt;/h3&gt; &lt;p&gt;If you don't understand RSS, stop everything and learn it.&amp;nbsp; It will take 10 minutes to learn it, maybe another 10 minutes to find a web based RSS reader (I like google's reader, &lt;a href="http://www.google.com/reader"&gt;www.google.com/reader&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Start by adding this blog to your RSS reader :)&lt;/p&gt; &lt;p&gt;Next, add &lt;a href="http://www.sharepointblogs.com"&gt;www.sharepointblogs.com&lt;/a&gt; to your reader.&amp;nbsp; They aggregate many blogs into a single feed.&lt;/p&gt; &lt;p&gt;Over time, you'll find blogs that are not aggregated that way.&amp;nbsp; Just add them individually.&lt;/p&gt; &lt;p&gt;I subscribe to a few dozen blogs which I've accumulate over the last year.&amp;nbsp; If you want, I can export my list and email it.&lt;/p&gt; &lt;p&gt;Eventually, you may want to start your own blog.&amp;nbsp; I personally think that a series of blog entries describing a "newbie's" progress learning WSS/MOSS would be an interesting series. I wish I had done that myself.&lt;/p&gt; &lt;h3&gt;Forums&lt;/h3&gt; &lt;p&gt;I actively participate in two forum groups: MSDN and SharePoint University.&lt;/p&gt; &lt;p&gt;Forums are excellent places to learn.&amp;nbsp; People ask questions ranging from the very simple ("How do I create a site column") to the panicked ("My server is down!") to more hypothetical design questions.&lt;/p&gt; &lt;p&gt;Once you get a flavor of the environment, venture out and start replying.&amp;nbsp; Short of directly interacting with a customer, nothing is better than this for hands on experience.&lt;/p&gt; &lt;h3&gt;Codeplex&lt;/h3&gt; &lt;p&gt;Go to &lt;a href="http://www.codeplex.com"&gt;www.codeplex.com&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Check it out and search for SharePoint projects.&lt;/p&gt; &lt;p&gt;Subscribe to the daily summary Codeplex feed in your feed reader.&lt;/p&gt; &lt;p&gt;Add any new SharePoint projects to your feed reader.&lt;/p&gt; &lt;p&gt;Eventually, after reading the forums and facing down your own WSS/MOSS demons, consider putting together your own codeplex project.&lt;/p&gt; &lt;h3&gt;Twitter&lt;/h3&gt; &lt;p&gt;As I write this blog entry, a lot of SharePoint folk have started using &lt;a href="http://twitter.com/pagalvin" target="_blank"&gt;Twitter&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;It's hard to characterize Twitter.&amp;nbsp; You'll just have to check it out yourself.&lt;/p&gt; &lt;h2&gt;Conclusion&lt;/h2&gt; &lt;p&gt;That wraps up my roadmap and makes me current.&amp;nbsp; I just started using Twitter two weeks ago.&lt;/p&gt; &lt;p&gt;WSS/MOSS is a very cool platform and the community is growing all the time.&amp;nbsp; Use community resources to improve your skills and enjoy the journey!&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:83ab22b5-7ecc-4aa0-ad12-9afcf80c2d3c" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Learning%20SharePoint" rel="tag"&gt;Learning SharePoint&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=10754" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Data Protection Manager: Seems Like a Great SharePoint Backup/Restore Solution</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/04/17/data-protection-manager-seems-like-a-great-sharepoint-backup-restore-solution.aspx</link><pubDate>Thu, 17 Apr 2008 11:52:08 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:10683</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/10683.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=10683</wfw:commentRss><description>&lt;p&gt;At the &lt;a href="http://nj.sharepointgroups.org/default.aspx" target="_blank"&gt;New Jersey SharePoint User Group&lt;/a&gt; meeting last night, Microsoft Sr. product specialist DuWayne Harrison presented &lt;a href="http://www.microsoft.com/systemcenter/dpm/default.mspx" target="_blank"&gt;Microsoft Data Protection Manager 2007&lt;/a&gt;.&amp;nbsp; DuWayne was great (and he was supported by one or two colleagues from the audience whose names I don't recall).&amp;nbsp; &lt;/p&gt; &lt;p&gt;Up until last night, I have never heard of DPM.&lt;/p&gt; &lt;p&gt;I'm not a system admin type person, so I'm writing this from SharePoint consultant's perspective and may get some of the words wrong.&amp;nbsp; To me, DPM is a backup/restore solution for Microsoft "stuff":&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Files  &lt;li&gt;SQL  &lt;li&gt;O/S  &lt;li&gt;Virtual machines (live backup of the VM, even if the VM itself is running Unix).  &lt;li&gt;Bare metal recovery (i.e. catastrophic hardware failure).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Beyond that stuff, which I would consider to be minimal requirements for any kind of "real" backup/restore product, DPM also has built-in intelligence for SharePoint.&amp;nbsp; It understands about server farms and lets you restore:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Entire databases (e.g. content, config, etc).  &lt;li&gt;Site collections  &lt;li&gt;Individual sites  &lt;li&gt;Individual items (e.g. documents).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The actual restore process involves extracting the target data from the backup and save it into a "restore farm" and then from there, moving it to the production environment (or wherever you want to restore).&amp;nbsp; I think this is seamless, but there was a lot of emphasis on the need for a "restore farm".&amp;nbsp; The restore farm does not need to match the production environment in every particular (mainly in physical topology) but does need to match in terms of templates, versions, etc.&lt;/p&gt; &lt;p&gt;I didn't see a full end to end demo, but DuWayne did show screen shots and some live demos.&amp;nbsp; It seems to be as good as it needs to be, at least for a moderate sized environment.&lt;/p&gt; &lt;p&gt;I was particularly struck by the pricing.&amp;nbsp; Obviously, don't hold me to this, but I believe that the most expensive pricing is roughly as follows (in USD):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;$600 for DPM itself.  &lt;li&gt;Hardware for a DPM server (and associated stuff for media and all that).  &lt;li&gt;$450 for each server you want to back up ("enterprise" license).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;A five server farm would cost at most:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;$600 for DPM  &lt;li&gt;$450 x 5 servers = $2,250&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Total cost in licenses: $2,850&lt;/p&gt; &lt;p&gt;In practice, it would be less.&amp;nbsp; You wouldn't necessarily need to have DPM installed on each web front end, for example.&amp;nbsp; You don't necessarily need enterprise licenses either.&lt;/p&gt; &lt;p&gt;The user interface is seems very simple probably would not require any special training to get up to speed.&amp;nbsp; I did ask about that specifically and there is apparently a 1.5 day class available, though it's not obvious to me that anyone would really need to take it.&lt;/p&gt; &lt;p&gt;All in all, I think it's certainly worth investigating if you're out there looking for a data protection solution for SharePoint.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0e55368f-7c93-4bf2-889a-07d7d430e15f" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=10683" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Backup_2F00_Restore/default.aspx">SharePoint Backup/Restore</category></item><item><title>Walk-through: Fix Employee Training Template Available Seats Unregister Bug</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/04/16/walk-through-fix-employee-training-template-available-seats-unregister-bug.aspx</link><pubDate>Wed, 16 Apr 2008 17:04:19 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:10662</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/10662.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=10662</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://forums.microsoft.com/forums/ShowPost.aspx?PostID=3183194&amp;amp;SiteID=1" target="_blank"&gt;As many people know&lt;/a&gt;, the Employee Training template &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5807b5ef-57a1-47cb-8666-78c1363f127d&amp;amp;DisplayLang=en" target="_blank"&gt;provided by Microsoft here&lt;/a&gt; has a bug that we can reproduce following these steps:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create a class with a max size of 10 students.  &lt;li&gt;Register --&amp;gt; Total available seats properly decrements by one.&amp;nbsp; Result: 9 available seats.  &lt;li&gt;Unregister: --&amp;gt; Bug.&amp;nbsp; Total available seats should increment by one.&amp;nbsp; It does not.&amp;nbsp; Result: 9 available seats as per SharePoint, but in fact, there are 10 available seats.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Solution: Use SharePoint Designer to correct the workflow.&lt;/p&gt; &lt;p&gt;First, open up the site.&amp;nbsp; The folder list for me looks like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="390" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_thumb.png" width="369" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If we have a look at the "Attendee registration" workflow, we see that there is a step labeled "Enforce seating policy".&amp;nbsp; It looks like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="515" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_thumb_1.png" width="774" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This step in the workflow updates the item by incrementing the "Filled Seats" metadata column on the course.&amp;nbsp; If we pull that up in more detail, we see this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="425" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_thumb_2.png" width="669" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;That's all the information we need to fix the unregistration workflow. &lt;/p&gt; &lt;p&gt;If we flip over to the unregistration workflow, there is no similar workflow step.&amp;nbsp; Add it as follows:&lt;/p&gt; &lt;p&gt;1: Expand "Attendee unregistration" and open up the XOML (see first screen shot if you're lost).&lt;/p&gt; &lt;p&gt;2: Add a new workflow variable, "New Filled Seats" of type "Number".&lt;/p&gt; &lt;p&gt;3: Assign a value to "New Filled Seats" as shown:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="296" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_thumb_5.png" width="416" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;4: Decrement the Filled Seats by 1:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_14.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="36" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_thumb_6.png" width="510" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;5: Update the related Course item:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_16.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="492" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_thumb_7.png" width="433" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;6: Make sure all the steps are in the right sequence.&amp;nbsp; For me, it looks like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_20.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="541" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/WalkthroughFixEmployeeTrainingTemplateDe_9EE3/image_thumb_9.png" width="795" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;7: Finish the workflow to re-build it.&lt;/p&gt; &lt;p&gt;8: Test.&lt;/p&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6636dd62-aff9-4ff8-bd7c-8f9818842721" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Workflow" rel="tag"&gt;Workflow&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=10662" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint+Workflow/default.aspx">SharePoint Workflow</category></item><item><title>Content Query Web Part: Speaking at New York SharePoint Users Group</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/04/10/content-query-web-part-speaking-at-new-york-sharepoint-users-group.aspx</link><pubDate>Thu, 10 Apr 2008 12:36:03 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:10553</guid><dc:creator>paul.galvin</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/10553.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=10553</wfw:commentRss><description>&lt;p&gt;I will be speaking with my colleague, &lt;a href="http://spforsquirrels.blogspot.com/" target="_blank"&gt;Natalya Voskresenskaya&lt;/a&gt;, at the &lt;a href="http://www.sharepointusergroup.com/NewYork/default.aspx" target="_blank"&gt;New York SharePoint Users Group&lt;/a&gt; meeting Wednesday May 7th.&lt;/p&gt; &lt;p&gt;Thanks to &lt;a href="http://bobfox.securespsite.com/FoxBlog/default.aspx" target="_blank"&gt;Bob Fox&lt;/a&gt; for throwing our names into the hat and helping us get this opportunity!&lt;/p&gt; &lt;p&gt;Our overall topic is the Content Query Web Part and we hope to give some useful information to two distinct audiences: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Business users (non-developers): Show how CQWP can be configured to solve certain common business problems without any coding. &lt;br&gt; &lt;li&gt;Developers: Show how CQWP can be extended to do some pretty interesting things that a business user wouldn't normally feel comfortable doing themselves.&amp;nbsp; This part of the presentation will help business users understand what's possible using this web part so that they can provide better and more realistic requirements to their developer partners. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Here is the notice NYSPUG mailed out earlier this week:&lt;/p&gt; &lt;p align="center"&gt;"Using Content Query Web Part to Solve Business Problems". &lt;/p&gt; &lt;p&gt;MOSS 2007's Content Query Web Part (CQWP) enables users to create custom views of data queried from many sources, and present that data in one place. Despite its powerful query &amp;amp; content refinement options, CQWP is often an underrated and overlooked feature. CQWP is both a "data extraction engine" (find documents or list items anywhere in a site collection) and also a first-class presentation tool that enables users to control how content is presented by wrapping HTML and styles to format the display nearly any way you wish. &lt;/p&gt; &lt;p&gt;In this demo-heavy session, they will show how to use the CQWP to solve business problems by showing off core features. &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;use default CWQP features, including audience targeting&lt;/p&gt; &lt;li&gt; &lt;p&gt;use CWQP as a reporting tool anywhere in a site collection via filter criteria such as "all documents created today".&lt;/p&gt; &lt;li&gt; &lt;p&gt;change look &amp;amp; feel of query results to highlight business data, show additional columns of information, display information in a grid format, and others.&lt;/p&gt; &lt;li&gt; &lt;p&gt;show how CQWP can aid in content type administration (i.e. find all documents of a particular content type so as to understand potential impact of changing a CT definition).&lt;/p&gt; &lt;li&gt; &lt;p&gt;describe some limitations of CQWP&lt;/p&gt; &lt;li&gt; &lt;p&gt;provide a list of resources for advanced CQWP techniques, including blogs, ECQWP Codeplex project &amp;amp; MSDN documentation.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:de97fdf5-fb31-42b5-8281-cacb2a9195db" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Public%20Speaking" rel="tag"&gt;Public Speaking&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=10553" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/Public+Speaking/default.aspx">Public Speaking</category></item><item><title>FAST SharePoint Integration: Execute a Simple Query</title><link>http://blogs.conchango.com/paulgalvin/archive/2008/04/08/fast-sharepoint-integration-execute-a-simple-query.aspx</link><pubDate>Tue, 08 Apr 2008 21:06:02 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:10539</guid><dc:creator>paul.galvin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/paulgalvin/comments/10539.aspx</comments><wfw:commentRss>http://blogs.conchango.com/paulgalvin/commentrss.aspx?PostID=10539</wfw:commentRss><description>&lt;p&gt;This is a continuation in my FAST coding mini-series for SharePoint folk.&amp;nbsp; The bit of code below executes a search for the term "test" in FAST via a Console application.&amp;nbsp; Obviously, it's a hop, skip and jump away to wrap this logic inside a web part or application page:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;using&lt;/span&gt; System;
&lt;span&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span&gt;using&lt;/span&gt; System.Linq;
&lt;span&gt;using&lt;/span&gt; System.Text;
&lt;span&gt;using&lt;/span&gt; System.Collections.Specialized;
&lt;span&gt;using&lt;/span&gt; Com.FastSearch.Esp.Search;
&lt;span&gt;using&lt;/span&gt; Com.FastSearch.Esp.Search.Http;
&lt;span&gt;using&lt;/span&gt; Com.FastSearch.Esp.Search.Navigation;
&lt;span&gt;using&lt;/span&gt; Com.FastSearch.Esp.Search.Query;
&lt;span&gt;using&lt;/span&gt; Com.FastSearch.Esp.Search.Result;
&lt;span&gt;using&lt;/span&gt; Com.FastSearch.Esp.Search.View;
&lt;span&gt;using&lt;/span&gt; System.Collections;

&lt;span&gt;namespace&lt;/span&gt; Conchango
{
    &lt;span&gt;class&lt;/span&gt; &lt;span&gt;InvokeSimpleFASTQuery
&lt;/span&gt;    {
        &lt;span&gt;static&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; Main(&lt;span&gt;string&lt;/span&gt;[] args)
        {

&lt;span&gt;            #region&lt;/span&gt; Initialize our communication with FAST
            &lt;span&gt;ISearchFactory&lt;/span&gt; searchFactory;

            &lt;span&gt;NameValueCollection&lt;/span&gt; nameValueCollection = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;NameValueCollection&lt;/span&gt;();

            nameValueCollection.Add(&lt;span&gt;"fastsearchengine"&lt;/span&gt;, &lt;span&gt;"Com.FastSearch.Esp.Search.Http.HttpSearchFactory"&lt;/span&gt;);
            nameValueCollection.Add(&lt;span&gt;"Com.FastSearch.Esp.Search.Http.QRServers"&lt;/span&gt;, &lt;span&gt;"fastdemoback:15100"&lt;/span&gt;);
            nameValueCollection.Add(&lt;span&gt;"Com.FastSearch.Esp.Search.Http.RequestMethod"&lt;/span&gt;, &lt;span&gt;"GET"&lt;/span&gt;);

            searchFactory = &lt;span&gt;SearchFactory&lt;/span&gt;.NewInstance(nameValueCollection);

&lt;span&gt;            #endregion

            #region&lt;/span&gt; Launch a query 
            
            &lt;span&gt;string&lt;/span&gt; queryString = &lt;span&gt;"test"&lt;/span&gt;;

            &lt;span&gt;Query&lt;/span&gt; query = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;Query&lt;/span&gt;(queryString);

            query.SetParameter(&lt;span&gt;BaseParameter&lt;/span&gt;.CLUSTERING, &lt;span&gt;false&lt;/span&gt;);
            query.SetParameter(&lt;span&gt;BaseParameter&lt;/span&gt;.NAVIGATION, &lt;span&gt;true&lt;/span&gt;);
            query.SetParameter(&lt;span&gt;BaseParameter&lt;/span&gt;.NAVIGATION_DEEPHITS, 100);

            &lt;span&gt;ISearchView&lt;/span&gt; searchView;
            searchView = searchFactory.GetSearchView(&lt;span&gt;"sharepointconn"&lt;/span&gt;);

            &lt;span&gt;IQueryResult&lt;/span&gt; result = searchView.Search(query);

            &lt;span&gt;Console&lt;/span&gt;.WriteLine(&lt;span&gt;"Total results from search: ["&lt;/span&gt; + result.DocCount + &lt;span&gt;"]."&lt;/span&gt;);

            &lt;span&gt;int&lt;/span&gt; docCounter = 0;

            &lt;span&gt;while&lt;/span&gt; (docCounter &amp;lt; result.DocCount)
            {

                docCounter++;

                &lt;span&gt;IDocumentSummary&lt;/span&gt; thisDocSummary = result.GetDocument(docCounter);

                &lt;span&gt;Console&lt;/span&gt;.WriteLine(&lt;span&gt;"["&lt;/span&gt; + docCounter + &lt;span&gt;"]: "&lt;/span&gt; + thisDocSummary.GetSummaryField(&lt;span&gt;"url"&lt;/span&gt;).StringValue);

            } // while

            &lt;span&gt;Console&lt;/span&gt;.ReadLine();
&lt;span&gt;            #endregion

&lt;/span&gt;        }
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;It generates the following result:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/FASTSharePointIntegrationExecuteaSimpleQ_E9CC/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="351" alt="image" src="http://blogs.conchango.com/blogs/paulgalvin/WindowsLiveWriter/FASTSharePointIntegrationExecuteaSimpleQ_E9CC/image_thumb.png" width="578" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/end&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png"&gt;&lt;/a&gt;&lt;a title="Subscribe to my feed" href="http://feeds.feedburner.com/PaulGalvinsSharepointSpace" rel="alternate"&gt;Subscribe to my blog.&lt;/a&gt; &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:724db904-8bd4-41fb-b216-d451a1c14e73" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/FAST" rel="tag"&gt;FAST&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Search" rel="tag"&gt;Search&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=10539" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.conchango.com/paulgalvin/archive/tags/FAST/default.aspx">FAST</category></item></channel></rss>