<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marc D Anderson&#039;s Blog</title>
	<atom:link href="http://sympmarc.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sympmarc.com</link>
	<description>A Knowledge Management Zealot Speaks Out</description>
	<lastBuildDate>Fri, 27 Jan 2012 13:05:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<atom:link rel='hub' href='http://sympmarc.com/?pushpress=hub'/>
		<item>
		<title>New SPServices Page on Facebook</title>
		<link>http://sympmarc.com/2012/01/27/new-spservices-page-on-facebook/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-spservices-page-on-facebook</link>
		<comments>http://sympmarc.com/2012/01/27/new-spservices-page-on-facebook/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 13:05:38 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14647</guid>
		<description><![CDATA[Yesterday, due to a suggestion from Stefan Bauer (@StfBauer) (though he wasn&#8217;t the first, truth be told), I created a Facebook page for SPServices. I&#8217;ll use it to post some of the same information that you see here, but obviously it&#8217;ll be more SPServices-focused. Christian Stahl (@CStahl) pointed out that it&#8217;ll be a great place &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/01/27/new-spservices-page-on-facebook/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"></div>
<p><a style="color: #ff4b33; font-size: 13px;" href="http://spservices.codeplex.com" target="_blank"><img style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" title="SPServices" src="http://sympmarc.com/wp-content/uploads/2012/01/logo250x150.jpg" alt="SPServices" width="250" height="68" align="right" border="0" /></a>Yesterday, due to a suggestion from Stefan Bauer (<a title="@StfBauer" href="http://twitter.com/StfBauer" target="_blank">@StfBauer</a>) (though he wasn&#8217;t the first, truth be told), I created a <a title="SPServices on Facebook" href="http://www.facebook.com/pages/SPServices/286155178106865" target="_blank">Facebook page</a> for <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a>. I&#8217;ll use it to post some of the same information that you see here, but obviously it&#8217;ll be more SPServices-focused.</p>
<p>Christian Stahl (<a title="@CStahl" href="http://twitter.com/CStahl" target="_blank">@CStahl</a>) pointed out that it&#8217;ll be a great place for folks to post information about how they are using SPServices in the wild, and I totally agree. Sometimes people use the discussions on the Codeplex site to do this, but I doubt that very many people see the posts. Perhaps using the ubiquitousness of Facebook will help get the word out more.</p>
<p>Let me know what other things you might find useful on the Facebook page, and enjoy!</p>
<div class="mceTemp"></div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/01/27/new-spservices-page-on-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SPServices v0.7.1ALPHA13 Available for Testing</title>
		<link>http://sympmarc.com/2012/01/20/spservices-v0-7-1alpha13-available-for-testing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spservices-v0-7-1alpha13-available-for-testing</link>
		<comments>http://sympmarc.com/2012/01/20/spservices-v0-7-1alpha13-available-for-testing/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 21:25:57 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[SPCascadeDropdowns]]></category>
		<category><![CDATA[SPDisplayRelatedInfo]]></category>
		<category><![CDATA[SPFilterDropdown]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[SPXmlToJson]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14638</guid>
		<description><![CDATA[Faster and more furious, that&#8217;s what I always aim for. I&#8217;ve been working hard on this next release of SPServices. I&#8217;ve been lucky to have some down time between projects to do it. Yes, I&#8217;m happy to have the gap so that I can do more and do it better; I&#8217;ve been able to make &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/01/20/spservices-v0-7-1alpha13-available-for-testing/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://sympmarc.com/2012/01/11/spservices-v0-7-1alpha8-available-for-testing/">Faster and more furious</a>, that&#8217;s what I always aim for.</p>
<p><a style="color: #ff4b33; font-size: 13px;" href="http://spservices.codeplex.com" target="_blank"><img style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" title="SPServices" src="http://sympmarc.com/wp-content/uploads/2012/01/logo250x150.jpg" alt="SPServices" width="250" height="68" align="right" border="0" /></a></p>
<div>
<p>I&#8217;ve been working hard on this next release of <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a>. I&#8217;ve been lucky to have some down time between projects to do it. Yes, I&#8217;m happy to have the gap so that I can do more and do it better; I&#8217;ve been able to make even more significant improvements because I&#8217;ve has the focused time. It&#8217;s a great feeling to look at my old code and know that I can do a lot better now. This version of SPServices is going to be leaner and faster than ever before. As I tweeted the other day:</p>
<!-- tweet id : 159710194287378432 --><style type='text/css'>#bbpBox_159710194287378432 a { text-decoration:none; color:#0084B4; }#bbpBox_159710194287378432 a:hover { text-decoration:underline; }</style><div id='bbpBox_159710194287378432' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Developing, documenting & maintaining open source software is a hell of a good way to become a better developer.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://sympmarc.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on January 18, 2012 1:54 pm' href='http://twitter.com/#!/sympmarc/status/159710194287378432' target='_blank'>January 18, 2012 1:54 pm</a> via <a href="http://www.hootsuite.com" rel="nofollow" target="blank">HootSuite</a><a href='https://twitter.com/intent/tweet?in_reply_to=159710194287378432&related=sympmarc' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=159710194287378432&related=sympmarc' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=159710194287378432&related=sympmarc' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=sympmarc'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1124059643/Marc_hi-res_-_Copy_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=sympmarc'>@sympmarc</a><div style='margin:0; padding-top:2px'>Marc D Anderson</div></div><div style='clear:both'></div></div></div><!-- end of tweet -->
<p>Alpha13, which I just posted is, I think, a good one to think of as RC1. Before I get too busy again with client work, I want to get it out there for some of you to test. If you are an SPServices user and can do some testing, especially regression testing, I&#8217;d really appreciate it.</p>
<p>There&#8217;s also some new stuff that I&#8217;ve built into the last few alphas:</p>
<ul>
<li>Better error messages for SPCascadeDropdowns, SPDisplayRelatedInfo, and SPFilterDropdown. If you have debug mode on and the listName is incorrect, you&#8217;ll get a clearer message.</li>
<li>Improvements to the new <a title="SPXmlToJson" href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPXmlToJson" target="_blank">SPXmlToJson</a> function. All of the documented options now work as advertised and I&#8217;ve optimized the code quite a bit.</li>
<li>SPCascadeDropdowns and SPDisplayRelatedInfo now have a matchOnId option. If matchOnId is set to true, the ID of the Lookup column is used rather than the text value. This can be handy where the same text value means different things, like the place-name of <a title="Springfield" href="http://en.wikipedia.org/wiki/Springfield_(toponym)" target="_blank">Springfield</a>, which can be found in 34 of the US States. By default the behavior of the function remains the same, of course.</li>
<li>New operations: Lists.ApplyContentTypeToList, Lists.CreateContentType, Lists.DeleteContentType, Lists.GetListItemChanges, Lists.UndoCheckOut, Lists.UpdateContentType, SiteData.GetWeb</li>
<li>Numerous (and I do mean numerous) improvements for efficiency.</li>
</ul>
<p>Enjoy, and let me know if you have a chance to try it out.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/01/20/spservices-v0-7-1alpha13-available-for-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SPServices v0.7.1ALPHA8 Available for Testing</title>
		<link>http://sympmarc.com/2012/01/11/spservices-v0-7-1alpha8-available-for-testing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spservices-v0-7-1alpha8-available-for-testing</link>
		<comments>http://sympmarc.com/2012/01/11/spservices-v0-7-1alpha8-available-for-testing/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 20:56:20 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[SPCascadeDropdowns]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14627</guid>
		<description><![CDATA[Yup, the alphas are coming fast and furious these days. I just posted a new alpha of SPServices v0.7.1. The most significant change in this alpha is the ability to have multiple child columns for a parent column in SPCascadeDropdowns. This was something I always intended it to do, but the last time I tried &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/01/11/spservices-v0-7-1alpha8-available-for-testing/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Yup, the alphas are coming fast and furious these days.</p>
<p><a href="http://spservices.codeplex.com" target="_blank"><img style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" title="SPServices" src="http://sympmarc.com/wp-content/uploads/2012/01/logo250x150.jpg" alt="SPServices" width="250" height="68" align="right" border="0" /></a>I just posted a new alpha of <a href="http://spservices.codeplex.com/releases/view/77486" target="_blank">SPServices v0.7.1</a>. The most significant change in this alpha is the ability to have multiple child columns for a parent column in <a title="SPCascadeDropdowns" href="http://spservices.codeplex.com/wikipage?title=$().SPServices.SPCascadeDropdowns" target="_blank">SPCascadeDropdowns</a>. This was something I always intended it to do, but the last time I tried to work through it, probably well over a year ago, I wasn&#8217;t up to the challenge. This time I was, and I think that the function may also even be a teeny bit faster than it was in ALPHA7.</p>
<p>Here&#8217;s an example. In this simple list form, I&#8217;ve got a parent column called State and two child columns, one called City and the other called Second City.</p>
<p><img class="aligncenter size-full wp-image-14629" title="1-11-2012 15-44-28" src="http://sympmarc.com/wp-content/uploads/2012/01/1-11-2012-15-44-28.png" alt="" width="630" height="226" /></p>
<p>By making two calls to SPCascadeDropdowns, both City and Second City are filtered based on the choice of State. I&#8217;ve also chosen to convert Second City from a &#8220;complex&#8221; dropdown to a &#8220;simple&#8221; dropdown by setting the simpleChild option to true.</p>
<pre class="brush: jscript; title: ; notranslate">
$().SPServices.SPCascadeDropdowns({
  relationshipList: &quot;Cities&quot;,
  relationshipListParentColumn: &quot;State&quot;,
  relationshipListChildColumn: &quot;Title&quot;,
  parentColumn: &quot;State&quot;,
  childColumn: &quot;City&quot;, // Child 1
  debug: true
});
$().SPServices.SPCascadeDropdowns({
  relationshipList: &quot;Cities&quot;,
  relationshipListParentColumn: &quot;State&quot;,
  relationshipListChildColumn: &quot;Title&quot;,
  parentColumn: &quot;State&quot;,
  childColumn: &quot;Second City&quot;, // Child 2
  simpleChild: true,
  debug: true
});
</pre>
<p>Enjoy, and let me know if you have a chance to try it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/01/11/spservices-v0-7-1alpha8-available-for-testing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trials and Tribulations: Migrating My Demos Site to Office365</title>
		<link>http://sympmarc.com/2012/01/10/trials-and-tribulations-migrating-my-demos-site-to-office365/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trials-and-tribulations-migrating-my-demos-site-to-office365</link>
		<comments>http://sympmarc.com/2012/01/10/trials-and-tribulations-migrating-my-demos-site-to-office365/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 17:02:47 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Middle Tier]]></category>
		<category><![CDATA[Office365]]></category>
		<category><![CDATA[SharePoint Online]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14610</guid>
		<description><![CDATA[Over a year ago, I built myself a virtual machine in VMWare Workstation so that I could hack around with it. I&#8217;ve used it for some client development, but mostly it&#8217;s where I work on the demos I use when I speak at events. Recently, when FPWeb decided to get out of the Exchange hosting &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/01/10/trials-and-tribulations-migrating-my-demos-site-to-office365/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Over a year ago, I <a href="http://sympmarc.com/2010/11/13/building-a-new-sharepoint-2010-virtual-machine-from-scratch-even-i-can-do-it/" target="_blank">built myself a virtual machine</a> in <a href="http://www.vmware.com/products/workstation/" target="_blank">VMWare Workstation</a> so that I could hack around with it. I&#8217;ve used it for some client development, but mostly it&#8217;s where I work on the demos I use when I speak at events.</p>
<p>Recently, when <a href="http://fpweb.net" target="_blank">FPWeb</a> decided to get out of the Exchange hosting business (I was sad to leave them – they are awesome to work with) I set up an <a title="Office365" href="http://www.microsoft.com/en-us/office365" target="_blank">Office365</a> account with Microsoft, at first just for Exchange. Not only did I feel that it was a good value, I also wanted to be able to eat some of the dog food that I talk about all the time. I like <a title="Exchange Online" href="http://www.microsoft.com/en-us/office365/exchange-online.aspx" target="_blank">Exchange</a> over plain old free POP or IMAP email services because I get the same view on all of my devices; the synching provides just the right solution for me and I&#8217;m willing to pay for it. (No free ride for us <a href="http://sympmarc.com/2012/01/06/sharepoint-server-mvp-again-for-2012/" target="_blank">Microsoft MVPs</a>, sadly.)</p>
<p>Office365 is pretty cool to work with. It&#8217;s got a little bit too much of a system administrator feeling, but not nearly as much as I had worried about. The menus and pages are cleanly laid out (more of that fresh Metro UI-ish goodness, though I&#8217;m sure we&#8217;ll all be tired of it in due course) and generally pretty easy to figure out. It may be that&#8217;s because I know the underlying products reasonably well, but it&#8217;s certainly a giant leap forward from what Microsoft has done with admin interfaces in the past. I don&#8217;t think that the average small company person could figure out how to use it all, but it suits me just fine.</p>
<p>Now that I&#8217;ve got things set up, I wanted to port my demo stuff to SharePoint Online from my VM. The VM works just fine, but porting is a useful exercise, plus I would like to move my <a href="http://sympraxisconsulting.com" target="_blank">Sympraxis Consulting</a> Internet site to SharePoint Online at Office365 at some point, so this is a good first step. (I still have my Sympraxis site hosted with FPWeb in WSS 3.0, believe it or not. It&#8217;s good enough for now, frankly.)</p>
<p>It seemed as though this should be a fairly easy process. I&#8217;ve got a few sites in a separate Site Collection for the demos, and all I thought I&#8217;d need to do is to save them each as a Site Template (actually, a Solution – the Save &#8220;Site as Template&#8221; item wording doesn&#8217;t match the gallery name that it ends up in – the Solution Gallery) and then rehydrate it in SharePoint Online. The way I work in <a href="http://sympmarc.com/2010/04/14/the-middle-tier-manifesto-an-alternative-approach-to-development-with-microsoft-sharepoint/" target="_blank">SharePoint&#8217;s Middle Tier</a>, I don&#8217;t need to activate any wacky features, so how hard could it be?</p>
<p>I already had a Solution saved for my Middle Tier site, so I uploaded that to the Solution Gallery in SharePoint Online and activated it with no problem.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/01/image.png"><img class="aligncenter" style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-top: 0px; margin-bottom: 0px; display: inline; background-image: none;" title="image" src="http://sympmarc.com/wp-content/uploads/2012/01/image_thumb.png" alt="image" width="650" height="358" border="0" /></a></p>
<p>It can be pretty easy to forget to activate the Solution, so I&#8217;ve highlighted the button above.</p>
<p>Once the Solution was activated, I went to create a new site with it.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/01/image1.png"><img class="aligncenter" style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-top: 0px; margin-bottom: 0px; display: inline; background-image: none;" title="image" src="http://sympmarc.com/wp-content/uploads/2012/01/image_thumb1.png" alt="image" width="1010" height="634" border="0" /></a></p>
<p>Hey, this was going well. It was really easy!</p>
<p>WHAM! The easy stage was over.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/01/image2.png"><img class="aligncenter" style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-top: 0px; margin-bottom: 0px; display: inline; background-image: none;" title="image" src="http://sympmarc.com/wp-content/uploads/2012/01/image_thumb2.png" alt="image" width="539" height="181" border="0" /></a></p>
<p>OK, so somehow I&#8217;ve got a feature activated in my VM that isn&#8217;t activated in my SharePoint Online site. No big deal, right? I can just go and find the {b5934f65-<br />
a844-4e67-82e5-92f66aafe912} feature and activate it for SharePoint Online. But what the heck is the {b5934f65- a844-4e67-82e5-92f66aafe912} feature?</p>
<p>I Bingled the GUID (see my <a title="Copying Text From an Image Using OneNote" href="http://sympmarc.com/2011/05/12/copying-text-from-an-image-using-onenote/" target="_blank">post</a> on using OneNote to get the text from a screen grab for a tip &#8211; for some reason you can&#8217;t copy the text in the error to the clipboard) and found the <a href="http://www.wssdemo.com/Lists/Features/DispForm.aspx?ID=181" target="_blank">answer</a> on <a title="Ian Morrish" href="http://www.wssdemo.com/pages/aboutian.aspx" target="_blank">Ian Morrish</a>&#8216;s excellent <a title="WSSDEMO" href="http://www.wssdemo.com" target="_blank">WSSDEMO</a> site.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/01/1-10-2012-12-14-33.png"><img class="aligncenter size-full wp-image-14617" title="{b5934f65- a844-4e67-82e5-92f66aafe912} feature" src="http://sympmarc.com/wp-content/uploads/2012/01/1-10-2012-12-14-33.png" alt="{b5934f65- a844-4e67-82e5-92f66aafe912} feature" width="419" height="138" /></a></p>
<p>Well, not the actual answer, but something sort of informative. Since the DisplayName is <strong>ReviewWordflowsSPD</strong> and the Title1 is <strong>Routing Workflows &#8211; SharePoint 2010</strong>, I could reasonably assume that it had something to do with workflows. I compared the two environments and realized that I needed to activate the Wordflows (Aggregated set of out-of-box workflow features provided by SharePoint) Site Collection Feature:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/01/1-10-2012-12-28-29.png"><img class="aligncenter size-full wp-image-14620" title="Workflows Feature" src="http://sympmarc.com/wp-content/uploads/2012/01/1-10-2012-12-28-29.png" alt="Workflows Feature" width="491" height="55" /></a></p>
<p>Well, maybe this wouldn&#8217;t be so bad, after all, I thought. I activated the feature and went to create the site again. WHAM! Out of the fast lane again.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/01/1-10-2012-12-31-42.png"><img class="aligncenter size-full wp-image-14621" title="{af6d9aec-7c38-4dda-997f-cc1ddbb87c92} error" src="http://sympmarc.com/wp-content/uploads/2012/01/1-10-2012-12-31-42.png" alt="{af6d9aec-7c38-4dda-997f-cc1ddbb87c92} error" width="541" height="181" /></a></p>
<p>This is where I got a little annoyed and tweeted:</p>
<!-- tweet id : 156604388775956481 --><style type='text/css'>#bbpBox_156604388775956481 a { text-decoration:none; color:#0084B4; }#bbpBox_156604388775956481 a:hover { text-decoration:underline; }</style><div id='bbpBox_156604388775956481' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Moving existing sites to <a href="http://twitter.com/search?q=%23Office365" title="#Office365">#Office365</a> not easy. Feature GUIDs will be my undoing. Looks like af6d9aec-7c38-4dda-997f-cc1ddbb87c92 isn't there.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://sympmarc.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on January 10, 2012 12:12 am' href='http://twitter.com/#!/sympmarc/status/156604388775956481' target='_blank'>January 10, 2012 12:12 am</a> via <a href="http://www.hootsuite.com" rel="nofollow" target="blank">HootSuite</a><a href='https://twitter.com/intent/tweet?in_reply_to=156604388775956481&related=sympmarc' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=156604388775956481&related=sympmarc' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=156604388775956481&related=sympmarc' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=sympmarc'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1124059643/Marc_hi-res_-_Copy_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=sympmarc'>@sympmarc</a><div style='margin:0; padding-top:2px'>Marc D Anderson</div></div><div style='clear:both'></div></div></div><!-- end of tweet -->
<p>and then later</p>
<!-- tweet id : 156711623631962112 --><style type='text/css'>#bbpBox_156711623631962112 a { text-decoration:none; color:#0084B4; }#bbpBox_156711623631962112 a:hover { text-decoration:underline; }</style><div id='bbpBox_156711623631962112' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>No end user should ever have to look at a GUID or figure out what it means. What's so wrong with words?</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://sympmarc.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on January 10, 2012 7:18 am' href='http://twitter.com/#!/sympmarc/status/156711623631962112' target='_blank'>January 10, 2012 7:18 am</a> via <a href="http://www.hootsuite.com" rel="nofollow" target="blank">HootSuite</a><a href='https://twitter.com/intent/tweet?in_reply_to=156711623631962112&related=sympmarc' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=156711623631962112&related=sympmarc' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=156711623631962112&related=sympmarc' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=sympmarc'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1124059643/Marc_hi-res_-_Copy_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=sympmarc'>@sympmarc</a><div style='margin:0; padding-top:2px'>Marc D Anderson</div></div><div style='clear:both'></div></div></div><!-- end of tweet -->
<p>So far, I haven&#8217;t been able to figure out what the {af6d9aec-7c38-4dda-997f-cc1ddbb87c92} feature is. The hits I get by searching tell me things about the Help Desk Template from the Fantastic (not so much) 40 templates, but I&#8217;ve never had that in any of my environments. One of the <a title="{af6d9aec-7c38-4dda-997f-cc1ddbb87c92}" href="http://sympmarc.com/2011/06/05/sptechcon-boston-2011-wrap-up/" target="_blank">hits</a> I got from searching was right back on my own blog (always a delicious irony).</p>
<p>So I&#8217;m stuck, and there&#8217;s no obvious way to figure out what that feature actually is. The point is that the GUID is pretty uninformative. SharePoint shouldn&#8217;t give me such unactionable, vague information. Even if I can find the GUID written up somewhere (as in Ian&#8217;s helpful site above), it&#8217;s not always obvious what to do with the information.</p>
<p>I&#8217;ve talked to quite a few people about the fact that I think one of the critical success factors for Office365 will be <strong>portability</strong>. What I was trying to do was pretty basic. I wanted to understand how Office365 might work for me if I wanted to use it for hosting my stuff. We all need to be able to move content in and out of The Cloud at will.</p>
<p>This is probably the first thing that any large enterprise would want to do as well. &#8220;Hey, let&#8217;s get Sandie down in the SharePoint admin pit to copy some of our typical sites over to SharePoint Online and see how they work.&#8221; At least, that&#8217;s what I&#8217;d do if I were a CIO thinking about moving some of my stuff to The Cloud. I&#8217;d want to see how easy it was to do something basic. Poor Sandie probably doesn&#8217;t have much of a chance of completing the task, though. As CIO, I&#8217;d want to know that I can *reasonably* easily move my stuff into the Cloud and back again. This would give me a comfortable feeling that I could trust Office365 with my stuff and not worry about changing my mind (or having my business requirements change it for me) down the road.</p>
<p>I&#8217;m pretty sure that I&#8217;m going to work out my little problem with good old {af6d9aec-7c38-4dda-997f-cc1ddbb87c92} &#8211; after all, I can hit up some of the best SharePoint minds on the planet through the MVP network &#8211; but I&#8217;m not so sure that Sandie and her CIO will get past these types of things as they look at using Office365. My suggestion to the Microsoft folks is to come up with some really brain dead easy tools to facilitate this sort of thing. (I know for a fact that my friends at <a title="MetaVis" href="http://metavistech.com/" target="_blank">MetaVis</a> have a great toolset to enable this, but should I need to work that hard?)</p>
<p>Even better: stop putting GUIDs in front of end users and expecting them to know what to do with them.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/01/10/trials-and-tribulations-migrating-my-demos-site-to-office365/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>SPServices v0.7.1ALPHA7 Available for Testing</title>
		<link>http://sympmarc.com/2012/01/09/spservices-v0-7-1alpha7-available-for-testing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spservices-v0-7-1alpha7-available-for-testing</link>
		<comments>http://sympmarc.com/2012/01/09/spservices-v0-7-1alpha7-available-for-testing/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 16:06:05 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[SPCascadeDropdowns]]></category>
		<category><![CDATA[SPDisplayRelatedInfo]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14596</guid>
		<description><![CDATA[I posted a new alpha of SPServices v0.7.1 today. Even though I just released v0.7.0 in early December, I&#8217;ve been working steadily to get some great new functionality and performance improvements into v0.7.1 as well as to fix some rather obscure bugs. You can see the details of what is included in this alpha on &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/01/09/spservices-v0-7-1alpha7-available-for-testing/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I posted a new alpha of <a href="http://spservices.codeplex.com/releases/view/77486" target="_blank">SPServices v0.7.1</a> today.<a href="http://spservices.codeplex.com" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;" title="logo250x150" src="http://sympmarc.com/wp-content/uploads/2012/01/logo250x150.jpg" alt="logo250x150" width="250" height="68" align="right" border="0" /></a></p>
<p>Even though I just released v0.7.0 in early December, I&#8217;ve been working steadily to get some great new functionality and performance improvements into v0.7.1 as well as to fix some rather obscure bugs.</p>
<p>You can see the details of what is included in this alpha on the <a href="http://spservices.codeplex.com/releases/view/77486" target="_blank">download page</a>, but perhaps what will be of widest interest are some significant performance improvements to <a href="http://spservices.codeplex.com/wikipage?title=$().SPServices.SPCascadeDropdowns" target="_blank">SPCascadeDropdowns</a> and <a href="http://spservices.codeplex.com/wikipage?title=$().SPServices.SPDisplayRelatedInfo" target="_blank">SPDisplayRelatedInfo</a>. If you use those functions, I&#8217;d really appreciate you trying the alpha out and letting me know whether the improvements are noticeable to you. The initial setup time in the form won&#8217;t be faster, but the cascading in the page ought to be. (The better tuned your SharePoint farm and the more horsepower you have, the less improvement you are likely to see.)</p>
<p>I&#8217;ve also added a new function called <a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPXmlToJson">SPXmlToJson</a>. With it, I hope to offer a generic XML to JSON conversion utility. The first focus is on the XML returned by GetListItems, but I plan to expand upon it as people request additional capabilities. If you&#8217;re into playing with JSON, please take a look and give me your thoughts and suggestions. Be kind and remember that this is just an alpha.</p>
<div class="mceTemp">
<dl class="wp-caption alignright zemanta-img" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://en.wikipedia.org/wiki/File:JQuery_logo.svg"><img class="zemanta-img-inserted zemanta-img-configured" title="JQuery" src="http://upload.wikimedia.org/wikipedia/en/thumb/9/9e/JQuery_logo.svg/300px-JQuery_logo.svg.png" alt="JQuery" width="300" height="73" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution">Image via Wikipedia</dd>
</dl>
<p>The main reason for getting v0.7.0 (the prior release) out there was to release a version which was compatible with <a href="http://blog.jquery.com/2011/11/03/jquery-1-7-released/" target="_blank">jQuery 1.7.x</a>. As goeth jQuery, so goeth SPServices; the jQuery team doesn&#8217;t sit still for long, so I can&#8217;t really, either. In fact, jQuery 1.7.1 has already been out for a while and we can see 1.8 on the horizon. As part of the new jQuery releases, there are always some significant performance improvements as well as new capabilities. As with most software, there are also capabilities which are deprecated, which may by removed in the future.</div>
<p>Because of all of these changes to jQuery itself, along with my accompanying changes to SPServices, I would strongly encourage you to try to keep up with the releases as best you can. I know that this can be difficult, especially in large enterprise environments where the release cycles can be complex and time consuming.</p>
<p>Given the constraints that many people probably have when it comes to upgrading SPServices, I&#8217;m wondering what a good release cycle would be. There have already been over 2000 downloads of v0.7.0, yet I&#8217;m getting near the time when I might want to put v0.7.1 out there. What would work best for you? Fewer releases with more changes or more releases with fewer changes? There are many considerations to this, I know. If nothing else, the documentation can only represent one point in time (I&#8217;m loathe to try to keep historical versions; maintenance would be a nightmare). If you are using an older version of SPServices, like say v0.5.8, then the docs are pretty far off for you, as will be my blog posts and articles elsewhere. Let me know what you think!</p>
<div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: currentColor; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=b887b848-e614-4759-a1ac-82a9ce9e2517" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/01/09/spservices-v0-7-1alpha7-available-for-testing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SharePoint Server MVP Again for 2012</title>
		<link>http://sympmarc.com/2012/01/06/sharepoint-server-mvp-again-for-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-server-mvp-again-for-2012</link>
		<comments>http://sympmarc.com/2012/01/06/sharepoint-server-mvp-again-for-2012/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 19:19:37 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Most Valuable Professional]]></category>
		<category><![CDATA[MVP]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14588</guid>
		<description><![CDATA[On January 1, promptly at 13:00 EST (that&#8217;s 1pm to us Yanks), I got the email from Microsoft informing me that I had received the MVP Award for SharePoint Server again for 2012. As in 2011, I feel tremendously honored and humbled to receive the MVP. I view it as a statement by my peers &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/01/06/sharepoint-server-mvp-again-for-2012/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">On January 1, promptly at 13:00 EST (that&#8217;s 1pm to us Yanks), I got the email from Microsoft informing me that I had received the MVP Award for SharePoint Server again for 2012.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/01/SNAGHTML2422119a.png"><img class="aligncenter" style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="SNAGHTML2422119a" src="http://sympmarc.com/wp-content/uploads/2012/01/SNAGHTML2422119a_thumb.png" alt="SNAGHTML2422119a" width="765" height="350" border="0" /></a></p>
<p>As in <a href="http://sympmarc.com/2011/01/02/ive-received-the-the-2011-microsoft-mvp-award-for-sharepoint/" target="_blank">2011</a>, I feel tremendously honored and humbled to receive the MVP. I view it as a statement by my peers that what I do in the community has value, even if that isn&#8217;t the real reason I received it.</p>
<p>Yes, there&#8217;s some controversy around the MVP award. I&#8217;ve seen the good (many of these), the <a href="http://www.windows8update.com/2012/01/05/my-year-as-a-microsoft-mvp-and-the-7-reasons-microsoft-need-to-fix-their-mvp-program/" target="_blank">bad</a>, and the <a href="http://devlicio.us/blogs/rob_eisenberg/archive/2012/01/04/how-i-lost-regained-and-then-turned-down-an-mvp-award.aspx" target="_blank">ugly</a> in posts about it over the last week or so. I can understand and echo some of the bad and the ugly, frankly. If there&#8217;s a point to the whole MVP program, I&#8217;m not sure what it is, either. No client of mine really cares about it if they know what it even is, other than to give me a gibe or two about it from time to time. Microsoft really doesn&#8217;t choose to share much with me that I can&#8217;t learn by following links on Twitter. The group of us who are MVPs represent vastly different skills sets, attitudes, and – dare I say it – aptitudes &#8211; me included, of course.</p>
<p>What the MVP *has* meant for me over the last year, though, is that I&#8217;ve gotten to interact with that incredibly interesting, diverse, and talented bunch of my fellow MVPs. We don&#8217;t all see eye to eye all the time, but that&#8217;s part of the fun of it. We have interesting conversations and debates about how SharePoint works, how we can best solve problems with it, and where we hope it goes as a technology. At the MVP Summit in Redmond last year &#8211; and I look forward to it again in February &#8211; I was surrounded with the best and the brightest in the SharePoint world. That interaction alone is worth being proud of the award. Whether or not Microsoft cares about us or wants our input is certainly moot, but I&#8217;ve written that part off by now.</p>
<p>So, thank you Microsoft for seeing something in me that deserved the MVP award, and I look forward to more and more opportunities to learn from my fellow MVPs and the rest of the SharePoint community in 2012. I&#8217;m having a ball.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/01/06/sharepoint-server-mvp-again-for-2012/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Finding the Distribution of Column Types in a SharePoint List with SPServices</title>
		<link>http://sympmarc.com/2012/01/03/finding-the-distribution-of-column-types-in-a-sharepoint-list-with-spservices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=finding-the-distribution-of-column-types-in-a-sharepoint-list-with-spservices</link>
		<comments>http://sympmarc.com/2012/01/03/finding-the-distribution-of-column-types-in-a-sharepoint-list-with-spservices/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 17:47:42 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[GetList]]></category>
		<category><![CDATA[GetListItems]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[SPXmlToJson]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14570</guid>
		<description><![CDATA[I just went through a little exercise that was simple, but fun, and I thought I&#8217;d share. As part of building my new SPXmlToJson function for SPServices, I wanted to spin through some of my lists to see what the various types of columns were and count the occurrences. Sure, I could have probably just &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/01/03/finding-the-distribution-of-column-types-in-a-sharepoint-list-with-spservices/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I just went through a little exercise that was simple, but fun, and I thought I&#8217;d share. As part of building my new <a title="SPXmlToJson" href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPXmlToJson" target="_blank">SPXmlToJson</a> function for <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a>, I wanted to spin through some of my lists to see what the various types of columns were and count the occurrences. Sure, I could have probably just looked in the SDK somewhere for the exhaustive list, but I though it would be a useful exercise to code something. The idea was to call <a title="GetList" href="http://spservices.codeplex.com/wikipage?title=GetList" target="_blank">GetList</a> on a particular list, go through all of the columns in the results, and list out the number of times each column type shows up.</p>
<p>Since I am building a function to emit JSON, knowing what type of objects I need to create is important. Each column has a type, of course, which you select when you create the column. In the UI, the column types are things like &#8220;Single line of text&#8221;, &#8220;Choice&#8221;, or &#8220;Lookup&#8221;, as you&#8217;re probably used to seeing:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-23-41.png"><img class="aligncenter size-full wp-image-14574" title="Create a List Column - Column Types" src="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-23-41.png" alt="Create a List Column - Column Types" width="312" height="341" /></a>However, those aren&#8217;t the values that SharePoint stores in the list settings. If you work with the SharePoint Object Model with managed code, you&#8217;re used to seeing <a title="SPFieldType" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtype.aspx" target="_blank">SPFieldType</a> (yup, that link is where I could have gone to see the full list without resorting to my code).</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-34-11.png"><img class="aligncenter size-large wp-image-14575" title="SPFieldType in the SharePoint SDK" src="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-34-11-1024x532.png" alt="SPFieldType in the SharePoint SDK" width="360" height="187" /></a></p>
<p>In the Web Services (at least GetList), we see an attribute simply named &#8220;Type&#8221; for each &#8220;Field&#8221;. Yes, fields are columns. Isn&#8217;t it grand how inconsistent some of the naming in SharePoint is?</p>
<p>Here&#8217;s the script I ended up with.  Since I&#8217;m focused on JSON, I wanted to play around with the various options for storing the data. I ended up with an array of typeName/typeCount values, which I could then sort in various ways. My first cut was to sort the types alphabetically and show them as simple list bullets.</p>
<pre class="brush: jscript; title: ; notranslate">
$(divId).html(waitMessage).SPServices({
  operation: &quot;GetList&quot;,
  listName: &quot;Sales Opportunities&quot;,
  completefunc: function (xData, Status) {

    var types = [];
    $(xData.responseXML).find(&quot;Fields &gt; Field&quot;).each(function() {

      // If we already have this type in the array, increment the count...
      var match = false;
        for(i = 0; i &lt; types.length; i++) {
          if(types[i].typeName === $(this).attr(&quot;Type&quot;)) {
            types[i].typeCount++;
            // No need to loop further
            match = true;
          }
        }

      // ...otherwise, add it to the array with a count of 1
      if(!match) {
        var thisType = {typeName: $(this).attr(&quot;Type&quot;), typeCount: 1};
        types.push(thisType);
      }
    });

    types.sort(function(a, b){
      var typeA = a.typeName.toLowerCase(), typeB = b.typeName.toLowerCase();
      // We want to sort the type strings, ascending
      if (typeA &lt; typeB) return -1;
      if (typeA &gt; typeB) return 1;
      // If they are equal, return 0 (no sorting)
      return 0;
    });

    var out = &quot;&lt;ul&gt;&quot;;
    for(i=0; i &lt; types.length; i++) {
      out += &quot;&lt;li&gt;&quot; + types[i].typeName + &quot; = &quot; + types[i].typeCount + &quot;&lt;/li&gt;&quot;;
    }
    out += &quot;&lt;/ul&gt;&quot;;

    $(divId).html(&quot;&quot;).append(&quot;&lt;b&gt;This is the output from the GetList operation:&lt;/b&gt;&quot; + out);
  }
});
</pre>
<p>What I ended up with is something like this:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-13-06.png"><img class="aligncenter size-full wp-image-14572" title="Column Types Sorted Alphabetically" src="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-13-06.png" alt="Column Types Sorted Alphabetically" width="266" height="303" /></a>To see the column type sorted by number of occurrences, I simply changed the sort function to this:</p>
<pre class="brush: jscript; title: ; notranslate">
types.sort(function(a, b){
  // To sort descending, subtract a from b; ascending would be the reverse
  return b.typeCount - a.typeCount;
});
</pre>
<p>This gave me output like this:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-12-13.png"><img class="aligncenter size-full wp-image-14571" title="Column Types Sorted by Number of Occurences" src="http://sympmarc.com/wp-content/uploads/2012/01/1-3-2012-12-12-13.png" alt="Column Types Sorted by Number of Occurences" width="265" height="303" /></a>Since I&#8217;ve found the SDK page for SPFieldType, this is throwaway code, but it&#8217;s not throwaway learning. It&#8217;s a little snippet of script that taught me a few things about formatting data for working storage on the client in script and also showed me what the internal types were for the columns which I use most often in my testing for SPServices. Note that while I&#8217;m using SPServices, and therefore <a title="jQuery" href="http://jquery.com" target="_blank">jQuery</a>, most of the heavy lifting in my script is plain old JavaScript.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/01/03/finding-the-distribution-of-column-types-in-a-sharepoint-list-with-spservices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding JSON Capability to SPServices</title>
		<link>http://sympmarc.com/2011/12/30/adding-json-capability-to-spservices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adding-json-capability-to-spservices</link>
		<comments>http://sympmarc.com/2011/12/30/adding-json-capability-to-spservices/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 19:05:17 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14554</guid>
		<description><![CDATA[For quite a while, I&#8217;ve gotten requests to offer some sort of JSON conversion capability in SPServices. The requests have often been fairly non-specific, meaning that they haven&#8217;t mentioned a particular Web Service operation, like GetListItems or GetWeb. However, I think that most people want to be able to get convert the XML they get &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/12/30/adding-json-capability-to-spservices/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/44792728@N00/3762360637"><img class="zemanta-img-inserted zemanta-img-configured" title="JSON Card -- Front" src="http://farm4.static.flickr.com/3423/3762360637_6b851c9478_m.jpg" alt="JSON Card -- Front" width="240" height="128" /></a><p class="wp-caption-text">Image by superfluity via Flickr</p></div>
<p>For quite a while, I&#8217;ve gotten requests to offer some sort of <a title="JSON at Wikipedia" href="http://en.wikipedia.org/wiki/Json" target="_blank">JSON</a> conversion capability in <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a>. The requests have often been fairly non-specific, meaning that they haven&#8217;t mentioned a particular Web Service operation, like GetListItems or GetWeb. However, I think that most people want to be able to get convert the XML they get back from GetListItems to JSON. This would be useful because a lot of the other jQuery plugins out there want JSON to work with.</p>
<p>I&#8217;ve written the beginnings of a function I will include in the next release of SPServices, and I wanted to offer it up for suggestions and requests. I want this converter function, which I&#8217;ve called SPXmlToJson, to be generally useful within an SPServices context. I don&#8217;t want to build a general-purpose converter; there are quite a few good ones out there. Generally, the data returned from SharePoint&#8217;s SOAP Web Services operations is fairly &#8220;flat&#8221;. By &#8220;flat&#8221;, I mean that there isn&#8217;t a huge amount of nesting. For example, GetListItems (which I expect to be the main context for using this function) simple passes back a z:row element for each item in the list with all of the column values as attributes.</p>
<p>Here&#8217;s an example:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;GetListItemsResponse xmlns=&quot;http://schemas.microsoft.com/sharepoint/soap/&quot;&gt;
&lt;GetListItemsResult&gt;
    &lt;listitems xmlns:s=&quot;uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882&quot; xmlns:dt=&quot;uuid:C2F41010-65B3-11d1-A29F-00AA00C14882&quot; xmlns:rs=&quot;urn:schemas-microsoft-com:rowset&quot; xmlns:z=&quot;#RowsetSchema&quot;&gt;
      &lt;rs:data ItemCount=&quot;22&quot;&gt;
        &lt;z:row ows_DocIcon=&quot;gif&quot; ows_FileSizeDisplay=&quot;21530&quot; ows_LinkFilename=&quot;cascaded_multiselect.GIF&quot; ows_Title=&quot;3&quot; ows_Modified=&quot;2011-07-05 12:17:54&quot; ows_Editor=&quot;3;#Marc D Anderson&quot; ows_Edit=&quot;0&quot; ows_TestColumn=&quot;bar&quot; ows__ModerationStatus=&quot;3&quot; ows__Level=&quot;255&quot; ows_ID=&quot;58&quot; ows_owshiddenversion=&quot;5&quot; ows_UniqueId=&quot;58;#{DF636FD7-2B27-4826-9E44-33E1F68F7EC4}&quot; ows_FSObjType=&quot;58;#0&quot; ows_Created_x0020_Date=&quot;58;#2011-04-13 00:35:51&quot; ows_ProgId=&quot;58;#&quot; ows_FileLeafRef=&quot;58;#cascaded_multiselect.GIF&quot; ows_CheckoutUser=&quot;3;#Marc D Anderson&quot; ows_FileRef=&quot;58;#Intranet/cascaded_multiselect.GIF&quot; ows_MetaInfo=&quot;58;#vti_parserversion:SR|12.0.0.6421 vti_lmt:SW|Thu, 22 Oct 2009 03:42:52 GMT Order:DW|5800.00000000000 TestColumn:SW|bar vti_author:SR|SERVER\\username vti_lastwidth:IX|641 vti_winfileattribs:SW|00000000 vti_modifiedby:SR|SERVER\\username ContentTypeId:SW|0x01010077FE74FF93862D419170F4A09DD0BBC5 vti_ct:SW|Thu, 22 Oct 2009 03:42:52 GMT vti_lat:SW|Wed, 13 Apr 2011 04:34:58 GMT ContentType:SW|Document vti_title:SW|3 vti_sourcecontrolmultiuserchkoutby:VR|FSERVER\\\\username vti_lastheight:IX|286 &quot; ows_Last_x0020_Modified=&quot;58;#2011-07-05 13:10:22&quot;&gt;&lt;/z:row&gt;
        &lt;z:row ows_DocIcon=&quot;rtf&quot; ows_FileSizeDisplay=&quot;1322&quot; ows_LinkFilename=&quot;ChatLog.rtf&quot; ows_Title=&quot;4&quot; ows_Modified=&quot;2011-07-05 12:17:55&quot; ows_Editor=&quot;3;#Marc D Anderson&quot; ows_Edit=&quot;0&quot; ows_TestColumn=&quot;bar&quot; ows__ModerationStatus=&quot;3&quot; ows__Level=&quot;255&quot; ows_ID=&quot;59&quot; ows_owshiddenversion=&quot;5&quot; ows_UniqueId=&quot;59;#{7C8C1F98-E56C-4B8C-9BFB-50A4948BDC7D}&quot; ows_FSObjType=&quot;59;#0&quot; ows_Created_x0020_Date=&quot;59;#2011-04-13 00:35:52&quot; ows_ProgId=&quot;59;#&quot; ows_FileLeafRef=&quot;59;#ChatLog.rtf&quot; ows_CheckoutUser=&quot;3;#Marc D Anderson&quot; ows_FileRef=&quot;59;#Intranet/ChatLog.rtf&quot; ows_MetaInfo=&quot;59;#vti_parserversion:SR|12.0.0.6421 vti_lmt:SW|Mon, 11 Apr 2011 17:09:08 GMT Order:DW|5900.00000000000 ContentTypeId:SW|0x01010077FE74FF93862D419170F4A09DD0BBC5 vti_ct:SW|Mon, 11 Apr 2011 17:09:08 GMT vti_lat:SW|Wed, 13 Apr 2011 04:34:59 GMT ContentType:SW|Document TestColumn:SW|bar vti_sourcecontrolmultiuserchkoutby:VR|SERVER\\\\username vti_title:SW|4 vti_author:SR|SERVER\\username vti_winfileattribs:SW|00000000 vti_modifiedby:SR|SERVER\\username &quot; ows_Last_x0020_Modified=&quot;59;#2011-07-05 13:10:22&quot;&gt;&lt;/z:row&gt;
      &lt;/rs:data&gt;
    &lt;/listitems&gt;
  &lt;/GetListItemsResult&gt;
&lt;/GetListItemsResponse&gt;
</pre>
<p>Once you get past the enclosing &#8220;wrapper&#8221;, it&#8217;s very flat data: just a single element per item. Most of the other operations return similar structures (thought there&#8217;s precious little consistency). What I am thinking of is having the SPXmlToJson function accept a flat nodeset, which it will convert and return a JSON object. This ought to provide a very basic conversion capability that I can build on over time, as needed.</p>
<p>Here&#8217;s the function as it stands, and I&#8217;ve also made it available on the SPServices site in the <a title="SPServices 0.7.1ALPHA3" href="http://spservices.codeplex.com/releases/view/77486" target="_blank">latest alpha for v0.7.1</a>. Please let me know what you think. Will this be enough? If not, what other options would you like to have available? What other operations are you likely to use SPXmlToJson with? Try it out and let me know your ideas.</p>
<p>Thanks for Paul Tavares and others for the help and nudging to get me to this point.</p>
<pre class="brush: jscript; title: ; notranslate">
// This function converts a nodeset to JSON
$.fn.SPServices.SPXmlToJson = function(options) {

  var opt = $.extend({}, {
  ns: &quot;&quot;    // A flat XML nodeset (as from GetListItems)
  }, options);

  var json = [];

  opt.ns.each(function() {
  var row = {};
  var rowAttrs = this.attributes;
  for (var e=0; e &lt; rowAttrs.length; e++) {
    var thisNodeName = rowAttrs[e].name;
    var trimmedNodeName = thisNodeName.indexOf(&quot;ows_&quot;) !== -1 ? thisNodeName.substring(4) : thisNodeName;
    row[trimmedNodeName] = rowAttrs[e].value;
  }
  json.push(row);
  });
  return json;
}; // End $.fn.SPServices.SPXmlToJson
</pre>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=0ec9d38c-232b-498e-b9a6-d567586d70a2" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/12/30/adding-json-capability-to-spservices/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Why Marketers Should Learn To Program &#8211; But Wait, There&#8217;s More</title>
		<link>http://sympmarc.com/2011/12/28/why-marketers-should-learn-to-program-but-wait-theres-more/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-marketers-should-learn-to-program-but-wait-theres-more</link>
		<comments>http://sympmarc.com/2011/12/28/why-marketers-should-learn-to-program-but-wait-theres-more/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 04:57:36 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[Christian Buckley]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Renaissance man]]></category>
		<category><![CDATA[Scott Brinker]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14546</guid>
		<description><![CDATA[Image via Wikipedia A little while ago, Christian Buckley (@buckleyplanet) retweeted a link to an intriguing blog post from Scott Brinker (@chiefmartec) entitled Why marketers should learn how to program.  Scott&#8217;s main points center around the idea that for Marketers to be truly successful these days, they should learn at least the rudiments of software &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/12/28/why-marketers-should-learn-to-program-but-wait-theres-more/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">
<dl class="wp-caption alignright zemanta-img" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://commons.wikipedia.org/wiki/File:Da_Vinci_Vitruve_Luc_Viatour.jpg"><img class="zemanta-img-inserted zemanta-img-configured" title="Vitruvian Man by Leonardo da Vinci, Galleria d..." src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Da_Vinci_Vitruve_Luc_Viatour.jpg/300px-Da_Vinci_Vitruve_Luc_Viatour.jpg" alt="Vitruvian Man by Leonardo da Vinci, Galleria d..." width="300" height="408" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via Wikipedia</dd>
</dl>
<p>A little while ago, Christian Buckley (<a href="http://twitter.com/buckleyplanet" target="_blank">@buckleyplanet</a>) retweeted a link to an intriguing blog post from <a title="Scott Brinker" href="http://www.linkedin.com/in/sjbrinker" target="_blank">Scott Brinker</a> (<a href="http://twitter.com/chiefmartec" target="_blank">@chiefmartec</a>) entitled <a href="http://www.chiefmartec.com/2011/12/why-marketers-should-learn-how-to-program.html" target="_blank">Why marketers should learn how to program</a>.  Scott&#8217;s main points center around the idea that for Marketers to be truly successful these days, they should learn at least the rudiments of software programming. This will give them new tools to succeed in an ever increasingly technology-driven discipline. I was motivated to comment on Scott&#8217;s post and wanted to capture and add to my comments here as well.</p>
</div>
<p>Understanding enough about the other disciplines related to succeeding at one&#8217;s own discipline shouldn&#8217;t be important just for Marketing folks. As the pace of innovation and change in the workplace continues to accelerate, it has become more and more important to have people available who can straddle many different disciplines.</p>
<p>In the past – perhaps way back in the 1990s or so &#8211; we were used to building teams that had one person representing each discipline. The teams had fairly long lifespans and knowledge areas were sacrosanct. Crossing the lines was frowned upon. Each team member was on the team because they were in a certain department, had a specific knowledge area, or needed to be on the team for political reasons.</p>
<p>Today all that is less often the case. We need teams to coalesce, accomplish, and dismantle in faster and faster cycle times. By building those teams with fewer people who have wider knowledge spans, we can reduce the communication requirements and accelerate accomplishment, thus innovation. Fewer team members with wider knowledge spans is simply a more efficient way to operate. This is especially true because those team members are increasingly likely to be spread widely across geographies and may even work for different organizations.</p>
<p>So, maybe Marketers should learn to program, but Developers should learn good design, Designers should learn basic accounting, Accountants should learn about organizational behavior, HR people should learn something about Marketing, and so forth.</p>
<p>It&#8217;s yet another time in history where the &#8220;Renaissance man&#8221; ought to be in high demand, and therefore should be able to call his (or her, of course) own shots.</p>
<div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: currentColor; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=832c8bec-0c33-4a67-a1d1-242ef532b371" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/12/28/why-marketers-should-learn-to-program-but-wait-theres-more/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rotating Announcements with a Data View Web Part and jQuery</title>
		<link>http://sympmarc.com/2011/12/22/rotating-announcements-with-a-data-view-web-part-and-jquery/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rotating-announcements-with-a-data-view-web-part-and-jquery</link>
		<comments>http://sympmarc.com/2011/12/22/rotating-announcements-with-a-data-view-web-part-and-jquery/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 15:45:43 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Data View Web Part]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14526</guid>
		<description><![CDATA[Oftentimes people go searching for plugins and already-written code to accomplish their goals. I find that it often gets people into more trouble than it&#8217;s worth as they usually don&#8217;t understand what they have deployed and it doesn&#8217;t work well in their specific situation. Of course, here I am posting something that those of you &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/12/22/rotating-announcements-with-a-data-view-web-part-and-jquery/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Oftentimes people go searching for plugins and already-written code to accomplish their goals. I find that it often gets people into more trouble than it&#8217;s worth as they usually don&#8217;t understand what they have deployed and it doesn&#8217;t work well in their specific situation. Of course, here I am posting something that those of you reading can use in exactly that way. My advice is to always look at these posts as *examples* of how you might do something. Make sure you understand what you get and how you need it to work on your end.</p>
<p>In this particular case, the search team wanted to show one random item from an Announcements list on the Search Results page and allow the users to cycle through all of the other available (unexpired) items. Each item will explain something new about what&#8217;s going on with search enhancements or give a tip on how to search more effectively.</p>
<p>The natural inclination, like I mention above, might be to go and look for a &#8220;rotating news item&#8221; jQuery plugin. But it was far easier to use a Data View Web Part (DVWP) along with a very small amount of script to make it happen. This is a method that I like to use often: have the DVWP &#8220;paint&#8221; the content onto the screen and then use jQuery to add some behavior to it. That way, you&#8217;re having the server do the heavy lifting, but also enhancing the user experience with the script. I also could have done this entirely with client side script using <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a>, but it doesn&#8217;t make sense to do so if you can keep the appropriate amount of processing on the server.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2011/12/12-22-2011-9-05-44-AM.png"><img class="size-full wp-image-14527 aligncenter" title="Rotating Announcements" src="http://sympmarc.com/wp-content/uploads/2011/12/12-22-2011-9-05-44-AM.png" alt="Rotating Announcements" width="382" height="143" /></a></p>
<p style="text-align: left;">In my particular case, the Announcments list that I wanted to use as the DataSource was in a different Site Collection. No worries, I just used the Lists Web Service as the DataSource in the DVWP. What you see below is just the DataSource section of my DVWP. Those of you who have used the Lists Web Service before, whether with <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a> or directly, will recognize the SOAP request and all its trappings. When you set up a SOAP DataSource in SharePoint Designer (SPD), this is what SPD creates for you. (I&#8217;ve cleaned up the XML that SPD generates to make it easier to read, including removing the escaping in the parameter values.)</p>
<pre class="brush: xml; title: ; notranslate">
&lt;DataSources&gt;
  &lt;SharePoint:SoapDataSource runat=&quot;server&quot; SelectUrl=&quot;http://[full path]/_vti_bin/lists.asmx&quot; SelectAction=&quot;http://schemas.microsoft.com/sharepoint/soap/GetListItems&quot; SelectPort=&quot;ListsSoap&quot; SelectServiceName=&quot;Lists&quot; AuthType=&quot;None&quot; WsdlPath=&quot;http://[full path]//_vti_bin/lists.asmx?WSDL&quot; XPath=&quot;&quot; ID=&quot;SoapDataSource1&quot;&gt;
    &lt;SelectCommand&gt;
      &lt;soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;
        &lt;soap:Body&gt;
          &lt;GetListItems xmlns=&quot;http://schemas.microsoft.com/sharepoint/soap/&quot;&gt;
            &lt;listName&gt;Announcements&lt;/listName&gt;
            &lt;query&gt;&lt;Query&gt;&lt;OrderBy&gt;&lt;FieldRef Name=&quot;Created Date&quot; Ascending=&quot;FALSE&quot;&gt;&lt;OrderBy&gt;&lt;GroupBy&gt;&lt;GroupBy&gt;&lt;Where&gt;&lt;Or&gt;&lt;Gt&gt;&lt;FieldRef Name=&quot;Expires&quot;&gt;&lt;Value Type=&quot;DateTime&quot;&gt;&lt;Today&gt;&lt;Value&gt;&lt;Gt&gt;&lt;IsNull&gt;&lt;FieldRef Name=&quot;Expires&quot;&gt;&lt;IsNull&gt;&lt;Or&gt;&lt;Where&gt;&lt;Query&gt;&lt;/query&gt;
            &lt;viewFields&gt;&lt;ViewFields&gt;&lt;FieldRef Name=&quot;Title&quot;&gt;&lt;FieldRef Name=&quot;Abstract&quot;&gt;&lt;ViewFields&gt;&lt;/viewFields&gt;
            &lt;rowLimit&gt;0&lt;/rowLimit&gt;
          &lt;/GetListItems&gt;
        &lt;/soap:Body&gt;
      &lt;/soap:Envelope&gt;
    &lt;/SelectCommand&gt;
    &lt;InsertCommand&gt;
    &lt;/InsertCommand&gt;
    &lt;UpdateCommand&gt;
    &lt;/UpdateCommand&gt;
    &lt;DeleteCommand&gt;
    &lt;/DeleteCommand&gt;
  &lt;/SharePoint:SoapDataSource&gt;
&lt;/DataSources&gt;
</pre>
<p>You&#8217;ll note that I&#8217;ve added my own filtering for the Expires column, since we don&#8217;t get that &#8220;for free&#8221; like we do with a standard Announcements list view. We also have added an Abstract column to the Announcements list, since the Body of each Announcement tends to be pretty long. Showing a few short sentences is enough to give the users the gist of what the post is about. If they want to read more, they can click on the Title, which takes them to the full Annoucement. I&#8217;ve also requested only the columns that I need to try to reduce the number of bits through the wire. In this instance, the volume will never be that large, but it can&#8217;t hurt.</p>
<p>Next comes the XSL in the DVWP. What we wanted on the page was fairly simple, so the XSL is pretty straightforward. That said, it&#8217;s entirely custom: SPD has no idea how to do things like this, so it&#8217;s a coding exercise.</p>
<pre class="brush: xml; title: ; notranslate">
  &lt;xsl:output method=&quot;html&quot; indent=&quot;no&quot;/&gt;
  &lt;xsl:param name=&quot;URL&quot;/&gt;
  &lt;xsl:param name=&quot;SERVER_NAME&quot;/&gt;

  &lt;xsl:template match=&quot;/&quot; xmlns:x=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:d=&quot;http://schemas.microsoft.com/sharepoint/dsp&quot; xmlns:asp=&quot;http://schemas.microsoft.com/ASPNET/20&quot; xmlns:__designer=&quot;http://schemas.microsoft.com/WebParts/v2/DataView/designer&quot; xmlns:SharePoint=&quot;Microsoft.SharePoint.WebControls&quot; xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:ddw1=&quot;http://schemas.microsoft.com/sharepoint/soap/&quot; xmlns:rs=&quot;urn:schemas-microsoft-com:rowset&quot; xmlns:z=&quot;#RowsetSchema&quot;&gt;
    &lt;xsl:call-template name=&quot;dvt_1&quot;/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;dvt_1&quot;&gt;
    &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/soap:Envelope/soap:Body/ddw1:GetListItemsResponse/ddw1:GetListItemsResult/ddw1:listitems/rs:data/z:row&quot;/&gt;
    &lt;xsl:variable name=&quot;TotalItems&quot; select=&quot;count($Rows)&quot;/&gt;
    &lt;xsl:variable name=&quot;ShowItem&quot; select=&quot;ddwrt:Random(1, $TotalItems)&quot;/&gt;
    &lt;div class=&quot;search-news&quot;&gt;
      &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
        &lt;xsl:call-template name=&quot;dvt_1.rowview&quot;&gt;
          &lt;xsl:with-param name=&quot;TotalItems&quot; select=&quot;TotalItems&quot;/&gt;
          &lt;xsl:with-param name=&quot;ShowItem&quot; select=&quot;$ShowItem&quot;/&gt;
        &lt;/xsl:call-template&gt;
      &lt;/xsl:for-each&gt;
    &lt;/div&gt;
    &lt;div class=&quot;search-news-footer&quot;&gt;
      &lt;span class=&quot;search-news-prev&quot;&gt;&lt;a onclick=&quot;showPrevNewsItem();&quot;&gt;&amp;lt; Previous&lt;/a&gt;&lt;/span&gt;
      &lt;span class=&quot;search-news-counts&quot;&gt;&lt;span id=&quot;search-news-active-item&quot;&gt;&lt;xsl:value-of select=&quot;$ShowItem&quot;/&gt;&lt;/span&gt; of &lt;xsl:value-of select=&quot;$TotalItems&quot;/&gt;&lt;/span&gt;
      &lt;span class=&quot;search-news-next&quot;&gt;&lt;a onclick=&quot;showNextNewsItem();&quot;&gt;Next &amp;gt;&lt;/a&gt;&lt;/span&gt;
    &lt;/div&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;dvt_1.rowview&quot;&gt;
    &lt;xsl:param name=&quot;ShowItem&quot;/&gt;
    &lt;div class=&quot;search-news-item&quot;&gt;
      &lt;xsl:attribute name=&quot;style&quot;&gt;
        &lt;xsl:if test=&quot;position() != $ShowItem&quot;&gt;display:none;&lt;/xsl:if&gt;
      &lt;/xsl:attribute&gt;
      &lt;div class=&quot;search-news-title&quot;&gt;
        &lt;a target=&quot;_blank&quot; href=&quot;http://[full path]/Lists/Announcements/DispForm.aspx?ID={@ows_ID}&amp;amp;Source={concat('http://', $SERVER_NAME, $URL)}&quot;&gt;
          &lt;h3&gt;&lt;xsl:value-of select=&quot;@ows_Title&quot;/&gt;&lt;/h3&gt;
        &lt;/a&gt;
        &lt;xsl:value-of select=&quot;ddwrt:FormatDate(string(@ows_Created), 1033, 1)&quot;/&gt;
      &lt;/div&gt;
      &lt;div class=&quot;search-news-abstract&quot;&gt;
        &lt;xsl:value-of select=&quot;@ows_Abstract&quot; disable-output-escaping=&quot;yes&quot;/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/xsl:template&gt;
</pre>
<p>Notice that I&#8217;m emitting nice DIVs rather than SharePoint&#8217;s dreaded tables. Say what you will about which is better, but when you use a DVWP, the markup is entirely up to you.</p>
<p>There are several interesting bits in this XSL. First, becasue we wanted to display a random item on every page load, I needed a way to come up with which item to display. In lines 16 and 17, I calculate how many items are available and generate a random number between 1 and that number of items. The value of the ShowItem variable drives which item is visible on page load. In fact, all of the items are loaded in the page, but only that one item is visible. This sets things up for the capability to cycle through all of the current news items.</p>
<p>Lines 22-24 build the &#8220;footer&#8221; of the DVWP. In the footer, there are Previous and Next links, as well as a counter which displays which items the user is currently viewing and the total number of items. Since the number of items will be variable, and we hope that users will take the time to cycle through them, we wanted to give them a feel for how many items are available to them. If you look at the Previous link, you&#8217;ll see that onclick I&#8217;ve added a call to showPrevNewsItem();. Next has a call to showNextNewsItem();. Here&#8217;s what that script looks like:</p>
<pre class="brush: jscript; title: ; notranslate">
function showPrevNewsItem() {
  var newsItems = $(&quot;div.search-news-item&quot;);
  var newsItem = $(&quot;div.search-news-item:visible&quot;);
  newsItem.each(function() {
    $(this).hide();
    if($(this).index() &gt; 0) {
      $(this).prev().show();
    } else {
      newsItems.last().show();
    }
  });
  var activeItem = $(&quot;div.search-news-item:visible&quot;).index() + 1;
  $(&quot;#search-news-active-item&quot;).html(activeItem);
}

function showNextNewsItem() {
  var newsItems = $(&quot;div.search-news-item&quot;);
  var newsItem = $(&quot;div.search-news-item:visible&quot;);
  newsItem.each(function() {
    $(this).hide();
    if($(this).index() &lt; (newsItems.length - 1)) {
      $(this).next().show();
    } else {
      newsItems.first().show();
    }
  });
  var activeItem = $(&quot;div.search-news-item:visible&quot;).index() + 1;
  $(&quot;#search-news-active-item&quot;).html(activeItem);
}
</pre>
<p>In each function (yes, I could probably combine them into one function that takes a parameter for which way to move, but I find it easier to think through this way), I find the currently visible news item, hide it, and then show the previous or next one. If we&#8217;ve reached the &#8220;top&#8221; or the &#8220;bottom&#8221; of the items, I wrap around to the end or the beginning. This allows the user to cycle through the items in a continuous loop if they choose to. The last thing I do in each function is figure out which item we&#8217;re displaying and update the active item number in the footer of the DVWP.</p>
<p>The last piece is the CSS to make it all look pretty.</p>
<pre class="brush: css; title: ; notranslate">
/* Search News */
div.search-help {
  padding:5px;
  height:20px;
  background-color:#FFFFD9;
  text-align:center;
  vertical-align:middle;
}
div.search-help a, div.search-help a:visited {
  font-family:&quot;News Gothic MT&quot;, verdana, sanserif;
  font-size:12px;
  color:#E04805;
}
div.search-news-container {
  margin-top:10px;
  margin-bottom:10px;
  border:2px #f5f3f0 solid;
  border-radius:15px 15px 10px 10px;
  -moz-border-radius:15px 15px 10px 10px;
}
div.search-news-container .ms-WPHeaderTd {
  background-color:#f5f3f0;
  border-radius:10px 10px 0 0;
  -moz-border-radius:10px 10px 0 0;
  border:0;
  padding-left:15px;
}
div.search-news-container .ms-wpTdSpace, div.search-news-container .ms-WPHeaderTdSelection {
  display:none;
}
div.search-news {
  min-height:75px;
}
.search-news-prev, .search-news-next {
  cursor:pointer;
}
.search-news-prev a:hover, .search-news-next a:hover {
  color:#E04805;
}
.search-news-prev {
  float:left;
}
.search-news-next {
  float:right;
}
.search-news-footer {
  margin-top:20px;
  text-align:center;
}
/* Search News */
</pre>
<p>As you can see in the screenshot of the end result above, I&#8217;m using some nice rounded corners for the header and the border around the whole thing. This is a CSS3 capability, and since we have a mixed browser environment, I have to cover all of the bases, including older versions of Mozilla (Firefox) and Chrome. The majority of the users have IE8, so they don&#8217;t get the rounded corner goodness yet (as you can see below), but they will all soon be getting IE9, at which point they will have prettiness, too.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/12/12-22-2011-10-27-18-AM.png"><img class="aligncenter size-full wp-image-14536" title="Rotating Announcements in IE8" src="http://sympmarc.com/wp-content/uploads/2011/12/12-22-2011-10-27-18-AM.png" alt="Rotating Announcements in IE8" width="380" height="144" /></a></p>
<p>And there you go. A nice, simple little rotating announcements view. Users love this sort of thing, and it helps to get the news out there in a new and interesting way (at least for SharePoint).</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/12/22/rotating-announcements-with-a-data-view-web-part-and-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Library for SharePoint Web Services (SPServices) v0.7.0 Beta 1 Available</title>
		<link>http://sympmarc.com/2011/11/23/jquery-library-for-sharepoint-web-services-spservices-v0-7-0-beta-1-available/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jquery-library-for-sharepoint-web-services-spservices-v0-7-0-beta-1-available</link>
		<comments>http://sympmarc.com/2011/11/23/jquery-library-for-sharepoint-web-services-spservices-v0-7-0-beta-1-available/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 04:07:56 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14506</guid>
		<description><![CDATA[Tonight I posted the first (we always hope the only) beta for SPServices v0.7.0. Initially I was calling this release v0.6.3, but when jQuery 1.7 was released and it caused problems with SPServices, I decided to bump the version so that the sevens matched. Get it? 1.7 and v0.7.0? Such are the complex decisions we &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/23/jquery-library-for-sharepoint-web-services-spservices-v0-7-0-beta-1-available/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Tonight I posted the first (we always hope the only) beta for <a title="SPServices 0.7.0BETA1" href="http://spservices.codeplex.com/releases/view/68781" target="_blank">SPServices v0.7.0</a>. Initially I was calling this release v0.6.3, but when <a title="jQuery 1.7" href="http://blog.jquery.com/2011/11/03/jquery-1-7-released/" target="_blank">jQuery 1.7</a> was released and it caused problems with SPServices, I decided to bump the version so that the sevens matched. Get it? 1.7 and v0.7.0? Such are the complex decisions we make about software version numbering. (Those of you who wonder why I still am using sub- version 1.0 numbering &#8211; it&#8217;s just because I feel like it. No real reason.)</p>
<p><a href="http://spservices.codeplex.com/"><img style="display: inline; float: left; margin: 0 10px 0 0;" title="logo.jpg" src="http://sympmarc.com/wp-content/uploads/2010/03/logo3.jpg" alt="" width="312" height="85" align="left" /></a>One of the biggest things in this new beta is compatibility with jQuery 1.7. In a <a title="Problem with jQuery 1.7+ and SPServices" href="http://sympmarc.com/2011/11/08/problem-with-jquery-1-7-and-spservices/" target="_blank">previous post</a>, I talked about the fact that the <code>.find("[nodeName='z:row']")</code> syntax no longer worked with jQuery 1.7. This was a real annoyance, but due to some great work by Steve Workman, I think there&#8217;s an <a href="http://www.steveworkman.com/html5-2/javascript/2011/improving-javascript-xml-node-finding-performance-by-2000/" target="_blank">even better selection method</a> in v0.7.0. Unfortunately, if you&#8217;d like to move to jQuery 1.7 in your environment, you&#8217;ll have to change the syntax in all of your code as well. What the jQuery team decides to change is out of my hands, of course, so occasionally this sort of thing will happen.</p>
<p>There&#8217;s an new function in SPServices called SPFilterNode, which is really quite simple, but it solves the problem, based on Steve&#8217;s work.</p>
<pre class="brush: jscript; title: ; notranslate">
// This method for finding specific nodes in the returned XML was developed by Steve Workman. See his blog post
// http://www.steveworkman.com/html5-2/javascript/2011/improving-javascript-xml-node-finding-performance-by-2000/
// for performance details.
$.fn.SPFilterNode = function(name) {
  return this.find('*').filter(function() {
    return this.nodeName === name;
  });
};
</pre>
<p>Here is an example of the syntax for calling this new function:</p>
<pre class="brush: jscript; title: ; notranslate">
$(xData.responseXML).SPFilterNode(&quot;z:row&quot;).each(function() {
</pre>
<p>There are several benefits to having this function. First, it works in jQuery 1.7 as well as an earlier versions, going back at least to version 1.4.2, which is as far back as I tested. Second, as you can see if you read through <a href="http://www.steveworkman.com/html5-2/javascript/2011/improving-javascript-xml-node-finding-performance-by-2000/" target="_blank">Steve&#8217;s benchmarking results</a>, it&#8217;s very efficient, even more efficient than the <code>.find("[nodeName='z:row']")</code> syntax. Third, if there is a change like this in a future version of jQuery, I can simply replace the function&#8217;s workings and all will continue to function well. Note that you only need to use SPFilterNode, and the <code>.find("[nodeName='z:row']")</code> syntax for that matter, when SharePoint&#8217;s Web Services return namespaced elements in the XML *and* you want to ensure cross-browser compatibility. If the nodes have names like &#8220;item&#8221; or &#8220;region&#8221;, or any other simple name which isn&#8217;t preceded with something and a colon, then .find(&#8220;item&#8221;) or .find(&#8220;region&#8221;) works fine. Of course, SPFilterNode will also work, but it&#8217;s not necessary.</p>
<p>If you are using SPServices and can do some regression testing, I&#8217;d certainly appreciate it, as will the other almost 8000 people who have downloaded <a title="SPServices v0.6.2" href="http://spservices.codeplex.com/releases/view/64390" target="_blank">SPServices v0.6.2</a> and may want to upgrade. Just be sure that you use the new SPFilterNode function if you are retrieving data from GetListItems with jQuery 1.7 or else it will seem as though you aren&#8217;t get anything back from the call.</p>
<p>I&#8217;ll publish the rest of the release notes when I release a stable version of v0.7.0, but if you&#8217;d like to see what&#8217;s in this version, check out the <a title="SPServices 0.7.0BETA1" href="http://spservices.codeplex.com/releases/view/68781" target="_blank">download page</a>. As usual, it&#8217;s a mix of bug fixes, performance enhancements, and new features,.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/23/jquery-library-for-sharepoint-web-services-spservices-v0-7-0-beta-1-available/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Base Your SharePoint Database Architecture on Business Requirements First, Database Concerns Second</title>
		<link>http://sympmarc.com/2011/11/21/base-your-sharepoint-database-architecture-on-business-requirements-first-database-concerns-second/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=base-your-sharepoint-database-architecture-on-business-requirements-first-database-concerns-second</link>
		<comments>http://sympmarc.com/2011/11/21/base-your-sharepoint-database-architecture-on-business-requirements-first-database-concerns-second/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 12:11:03 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[database design]]></category>
		<category><![CDATA[single version of the truth]]></category>
		<category><![CDATA[Site Collection]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14495</guid>
		<description><![CDATA[Sometimes when I&#8217;m speaking at SharePoint events, I&#8217;ll mention something about the fact that &#8220;the geeks&#8221; make decisions about Site Collections and database boundaries that are a detriment to the users. I got a question about this the other day: &#8230;you mentioned something that I wanted to follow up on: basically it was a warning &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/21/base-your-sharepoint-database-architecture-on-business-requirements-first-database-concerns-second/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes when I&#8217;m speaking at SharePoint events, I&#8217;ll mention something about the fact that &#8220;the geeks&#8221; make decisions about Site Collections and database boundaries that are a detriment to the users. I got a question about this the other day:</p>
<blockquote><p>&#8230;you mentioned something that I wanted to follow up on: basically it was a warning to avoid setting up the information architecture (site collections and thus ability to shuffle between databases) based on “the geeks”.  I would love to find out what the issues you’ve seen or experienced that were caused by breaking up data across site collections.  I image it might be the cross site query web parts and such.</p></blockquote>
<p>The main thing I am referring to is the promise of being able to promote content from private or local contexts into wider contexts, therefore maintaining the <a href="http://en.wikipedia.org/wiki/Single_version_of_the_truth" target="_blank">single version of the truth</a>that Microsoft sometimes talks about. This single version of the truth ought to apply not just to content when considered from a database perspective, but also from a Content Management perspective. A particular version of a document ought to exist in exactly one place. Of course, that&#8217;s far more easily said than done, but it&#8217;s a Content Management goal.</p>
<p>Note that when I talk about “the geeks”, I mean those of us (yes, I sometimes belong in this group, too) who view the technology for technology&#8217;s sake over what its function for the users should be. If you’re an admin who never talks to end users about what they need, then you probably are in this group, though you might not be because you are able to extrapolate their needs well.</p>
<p>Take the example where an Intranet has a root Site Collection and then a Site Collection per Department. (A simplified example, sure, but not that uncommon.) If there is a document in the HR site that we want to promote to the root site, there are no good mechanisms to do it. Site Collection boundaries are primarily security boundaries from the end user standpoint, so we can run into permission issues. We also don’t have a good way to keep a pointer on the root site to the actual document in synch. That means there can’t easily be one version of the truth.</p>
<p>CQWPs and DVWPs in CrossList mode are also out of the question for doing things like rolling up Announcements, for example, which is an extremely common use case. Again, Site Collections are permission boundaries, so those Web Parts don’t work across them. We have to resort to all sorts of tomfoolery using the Web Services or third party tools.</p>
<p>Of course, to the geeks, it makes total sense to make the Departments individual Site Collections. They want to be able to manage the content that way so that they can go to one Department if that Department’s content is getting out of hand to make them clean it up. But it often doesn’t work from a user perspective.</p>
<p>A more complex example would be a smaller organization (as a larger one is unlikely to find the idea palatable) which wants to use SharePoint for its Intranet, Extranet, and Internet sites. Ideally one could create work output in a Team Site in the Intranet somewhere and upon completion, promote it to expose it more widely on the Intranet. That itself if often a problem. But what if we then want to expose that piece of content in multiple Extranet sites? Or we want to expose it as part of the content corpus on the Intranet? Now, one can easily respond with all sorts of enterprise-class concerns about security, but that’s up to the customer. These scenarios come up with my clients all the time, and if they want to make them happen, it’s their choice.  The geeks will usually set things up to preclude any of this because of the content database concerns they have.</p>
<p>The business sometimes simply can’t do what it wants to do because of decisions based on database concerns, and SharePoint is blamed for a shortcoming which it doesn’t actually have. That&#8217;s not a good thing for any of us.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/21/base-your-sharepoint-database-architecture-on-business-requirements-first-database-concerns-second/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SPSUK and SEF11 Wrap Up</title>
		<link>http://sympmarc.com/2011/11/18/spsuk-and-sef11-wrap-up/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spsuk-and-sef11-wrap-up</link>
		<comments>http://sympmarc.com/2011/11/18/spsuk-and-sef11-wrap-up/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 18:27:22 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[England]]></category>
		<category><![CDATA[Humandata]]></category>
		<category><![CDATA[SEF 2011]]></category>
		<category><![CDATA[SharePoint Saturday]]></category>
		<category><![CDATA[SharePoint Saturday UK]]></category>
		<category><![CDATA[Sweden]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14486</guid>
		<description><![CDATA[It was a great pleasure to be able to make a small swoop through Europe this last week to present at SharePoint Saturday UK (SPSUK) in Nottingham, England and at the SharePoint and Exchange Forum 2011 (SEF11) in Stockholm, Sweden. Both events were well-attended, with something like 250-350 eager learners at each. it&#8217;s always interesting &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/18/spsuk-and-sef11-wrap-up/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.seforum.se/"><img style="margin: 0px 0px 0px 10px; display: inline; float: right;" src="http://www.seforum.se/Style%20Library/SEF/Images/sef2011_small.jpg" alt="" align="right" border="0" /></a>It was a great pleasure to be able to make a small swoop through Europe this last week to present at <a href="http://sharepointsaturday.org/uk" target="_blank">SharePoint Saturday UK</a> (SPSUK) in Nottingham, England and at the <a href="http://seforum.se/" target="_blank">SharePoint and Exchange Forum 2011 (SEF11)</a> in Stockholm, Sweden. Both events were well-attended, with something like 250-350 eager learners at each.</p>
<p><a href="http://sharepointsaturday.org/uk" target="_blank"><img src="http://www.sharepointsaturday.org/uk/SiteImages/SharePointSaturdayBanner.jpg" alt="SharePoint Saturday UK 12th November 2011" /></a></p>
<p>it&#8217;s always interesting to see what the differences are across the crowds at different events where I speak. There are stereotypical things one might expect, of course, but very often they turn out to more true than not. The UK crowd was vocal, but probably more polite in their questions than an American audience might be. &#8220;Excuse me, but might you please explain why you&#8217;ve decided that&#8230;&#8221;, as opposed to &#8220;What on earth made you think&#8230;&#8221; I was told that the Swedes would be extremely polite and ask no questions until after the session. I was glad to find that wasn&#8217;t fully true. There were fewer &#8220;inline&#8221; questions, but they were good ones. And perhaps a few more after the sessions than during because of it.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/IMG_22121-e1321641103740.jpg"><img class="size-medium wp-image-14489 alignright" title="IMG_2212[1]" src="http://sympmarc.com/wp-content/uploads/2011/11/IMG_22121-e1321641103740-300x145.jpg" alt="" width="300" height="145" /></a>The organizers of both events did a marvelous job. For SPSUK, it was Tony Pounder, Mark, McCrea, and Brett Lonsdale. It being a SharePoint Saturday, there was also a large team of red-shirted volunteers. I didn&#8217;t get a chance to meet them all, of course, but without a great team, an event like that can&#8217;t go off without a hitch, like it did. From the Speaker Dinner at the Hall of Justice (where they purportedly held &#8220;Robin Hood&#8221;, though there wasn&#8217;t just one) to the SharePint at the Cross Keys Pub, everything was grand. That&#8217;s Robin Hood on the right, introducing the keynote speaker, Todd Flint.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/IMG_2224.jpg"><img style="background-image: none; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;" title="IMG_2224" src="http://sympmarc.com/wp-content/uploads/2011/11/IMG_2224_thumb.jpg" alt="IMG_2224" width="240" height="179" align="right" border="0" /></a>In Stockholm, the inimitable Göran Husman was the ringmaster, but I got the impression that his daughter Beatrice was the real powerhouse behind it all. Ever humble, Beatrice chose to leave the event before it finished lest we try to call attention to her and her efforts. Beatrice, we all thank you! I also would like to give special thanks to my compatriot Christian Stahl, who invited me to the event. Christian and I have &#8220;known&#8221; each other for quite some time over the InterWebs, but it was great to be able to spend some significant quality time with him discussing Data View Web Parts (DVWPs), CSS, jQuery, SPServices, and all manner of development opportunities they provide when added together. I look forward to corresponding with Christian even more in the future now that we&#8217;ve met in person. Everyone at <a href="http://www.humandata.se" target="_blank">Humandata</a>, which put on the conference, was wonderful to meet and work with.</p>
<p>The sessions I did at the two events overlapped, so I can offer the material here together. At SPSUK, it was &#8220;Developing in SharePoint&#8217;s Middle Tier&#8221; (<a href="http://sympmarc.com/wp-content/uploads/2011/11/SPSUK-Developing-in-SharePonts-Middle-Tier.pptx" target="_blank">slides</a>), which I repeated at SEF11 (<a href="http://sympmarc.com/wp-content/uploads/2011/11/Anderson-Developing-in-SharePoints-Middle-Tier.pptx" target="_blank">slides</a>). I also was happy to do a session entitled &#8220;SharePoint Solutions with SPServices&#8221; at SEF11. In both locations, I used a SharePoint 2010 site which has quite a few demos in it. I&#8217;m happy to make the entire site available to you <a href="http://sympmarc.com/wp-content/uploads/2011/11/Middle-Tier-2011-11.zip" target="_blank">here</a>. It includes all of the demo stuff I showed in the &#8220;Developing in SharePoint&#8217;s Middle Tier&#8221; session, plus a few other goodies if you poke around a little. Remember that everything there is demo code, so think carefully before using it in your own environment. It may well need some significant changes to be valuable for you. Hopefully as a learning tool, the value is already there.</p>
<p>For the &#8220;SharePoint Solutions with SPServices&#8221; session, I didn&#8217;t have any specific demo materials other than the <a href="http://spservices.codeplex.com/" target="_blank">SPServices site</a> and my own WSS-based development site where I do all the magic to make SPServices work for you. Packaging that up would just be an embarrassment, as it includes every messy, blind alley thing I&#8217;ve done over the last two-plus years in building SPServices. If there&#8217;s anything specific you&#8217;d like to get your hands on that you saw in the session, just ping me through the Contact tab above and we&#8217;ll get it sorted out for you. I do have a demo site in the same environment that you can reach via the Web <a href="http://www.sympraxisconsulting.com/demos" target="_blank">here</a> that has some of the pages I showed.</p>
<p>Thanks again to all for a wonderful European week I leave you with a photo of my friend Christian leading the Humandata band in a rousing rendition of a Nirvana song whose name I forget, but they played it well.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/IMG_2267.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="IMG_2267" src="http://sympmarc.com/wp-content/uploads/2011/11/IMG_2267_thumb.jpg" alt="IMG_2267" width="640" height="478" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/18/spsuk-and-sef11-wrap-up/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adding a Tabbed View to A Web Part Page Using jQueryUI</title>
		<link>http://sympmarc.com/2011/11/09/adding-a-tabbed-view-to-a-web-part-page-using-jqueryui/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adding-a-tabbed-view-to-a-web-part-page-using-jqueryui</link>
		<comments>http://sympmarc.com/2011/11/09/adding-a-tabbed-view-to-a-web-part-page-using-jqueryui/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 20:34:19 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[CEWP]]></category>
		<category><![CDATA[Content Editor Web Part]]></category>
		<category><![CDATA[easy]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[share]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14453</guid>
		<description><![CDATA[Sometimes I work on something and blindly stumble into a neat trick. The other day I was trying to figure out how to reliably add a tabbed view to a SharePoint Web Part Page. I was working in SharePoint Designer, so I had total freedom to try whatever I wanted. The idea was to show &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/09/adding-a-tabbed-view-to-a-web-part-page-using-jqueryui/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes I work on something and blindly stumble into a neat trick. The other day I was trying to figure out how to reliably add a tabbed view to a SharePoint Web Part Page. I was working in SharePoint Designer, so I had total freedom to try whatever I wanted.</p>
<p>The idea was to show a set of tabs, each of which could contain at least a Content Editor Web Part (CEWP) initially. We wanted it to look something like this:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/11-9-2011-11-23-55-AM.png"><img class="aligncenter size-full wp-image-14457" title="Tabs Mock Up" src="http://sympmarc.com/wp-content/uploads/2011/11/11-9-2011-11-23-55-AM.png" alt="Tabs Mock Up" width="427" height="138" /></a>Aside: Wireframes drive me a little batty because they turn into the goal rather than just a useful development tool. Mock ups like this using something like <a title="Balsamiq" href="http://www.balsamiq.com/" target="_blank">Balsamiq</a> make far more sense to me. The Comic Sans makes it very clear to everyone that this is the basic idea, and we&#8217;re not talking about pixel placement.</p>
<p>My first thought was of course to use Christophe Humbert&#8217;s most excellent <a title="Easy Tabs" href="http://pathtosharepoint.com/pages/easyTabs.aspx" target="_blank">Easy Tabs</a>, but for some reason that wasn&#8217;t working in the page. Since we&#8217;re already using jQueryUI for some other things &#8211; this is a highly customized environment &#8211; I figured that it would be a good alternative and would probably give me more control of the display.</p>
<p>If you look at the jQueryUI documentation, you&#8217;ll see that there is some specific markup required to get the .tabs() widget to function:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;tabs&quot;&gt;
   &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#tabs-1&quot;&gt;Nunc tincidunt&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#tabs-2&quot;&gt;Proin dolor&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#tabs-3&quot;&gt;Aenean lacinia&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;div id=&quot;tabs-1&quot;&gt;
      &lt;p&gt;Tab 1 content&lt;/p&gt;
   &lt;/div&gt;
   &lt;div id=&quot;tabs-2&quot;&gt;
      &lt;p&gt;Tab 2 content&lt;/p&gt;
   &lt;/div&gt;
   &lt;div id=&quot;tabs-3&quot;&gt;
      &lt;p&gt;Tab 3 content&lt;/p&gt;
   &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Once you have that basic markup in place, you can make this simple call to activate the tabs:</p>
<pre class="brush: xml; title: ; notranslate">
$(&quot;#tabs&quot;).tabs();
</pre>
<p>There are multiple options, of course, but that gets you the basics.</p>
<p>I tried a number of things, but the main difficulty I had was that Web Part Zones cannot contain markup; they can only contain Web Parts. SharePoint Designer strips out any markup that you add manually inside a Web Part Zone.</p>
<p>Somehow I though of trying to wrap the Web Part Zone with the markup I needed to make the tabs work instead. Even better, each tab could have its own Web Part Zone so that we could edit existing Web Parts and add new Web Parts to the tabs at will. That markup ended up like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;team-tabs&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-how-we-help&quot;&gt;How we can help&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-case-studies&quot;&gt;Case studies&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-projects&quot;&gt;Current projects&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-applications&quot;&gt;Applications we support&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;div id=&quot;tabs-how-we-help&quot;&gt;
    &lt;WebPartPages:WebPartZone runat=&quot;server&quot; Title=&quot;loc:HowWeHelp&quot; ID=&quot;HowWeHelp&quot; FrameType=&quot;TitleBarOnly&quot;&gt;&lt;ZoneTemplate&gt;
    &lt;/ZoneTemplate&gt;&lt;/WebPartPages:WebPartZone&gt;
  &lt;/div&gt;
  &lt;div id=&quot;tabs-case-studies&quot;&gt;
    &lt;WebPartPages:WebPartZone runat=&quot;server&quot; Title=&quot;loc:CaseStudies&quot; ID=&quot;CaseStudies&quot; FrameType=&quot;TitleBarOnly&quot;&gt;&lt;ZoneTemplate&gt;
    &lt;/ZoneTemplate&gt;&lt;/WebPartPages:WebPartZone&gt;
  &lt;/div&gt;
  &lt;div id=&quot;tabs-projects&quot;&gt;
    &lt;WebPartPages:WebPartZone runat=&quot;server&quot; Title=&quot;loc:Projects&quot; ID=&quot;Projects&quot; FrameType=&quot;TitleBarOnly&quot;&gt;&lt;ZoneTemplate&gt;
    &lt;/ZoneTemplate&gt;&lt;/WebPartPages:WebPartZone&gt;
  &lt;/div&gt;
  &lt;div id=&quot;tabs-applications&quot;&gt;
    &lt;WebPartPages:WebPartZone runat=&quot;server&quot; Title=&quot;loc:Applications&quot; ID=&quot;Applications&quot; FrameType=&quot;TitleBarOnly&quot;&gt;&lt;ZoneTemplate&gt;
    &lt;/ZoneTemplate&gt;&lt;/WebPartPages:WebPartZone&gt;
  &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>This markup gives us this nice UI. I&#8217;ve blurred out the specific content in the CEWP, but you should get the idea.<a><img class="aligncenter size-full wp-image-14454" title="jQueryUI Tabs Example" src="http://sympmarc.com/wp-content/uploads/2011/11/11-9-2011-10-33-58-AM.png" alt="jQueryUI Tabs Example" width="483" height="119" /></a></p>
<p>The really nifty thing about all of this is that editing the content of each Web Part Zone seems to work just fine in the context of each tab. In other words, not only do we get the user experience (UX) goodness from the tabs for the end user, we also get it for the few people who will be editing the tab content.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/11-9-2011-11-36-46-AM.png"><img class="aligncenter size-full wp-image-14458" title="Editing Web Part Zone Content" src="http://sympmarc.com/wp-content/uploads/2011/11/11-9-2011-11-36-46-AM.png" alt="Editing Web Part Zone Content" width="700" height="164" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/09/adding-a-tabbed-view-to-a-web-part-page-using-jqueryui/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Problem with jQuery 1.7+ and SPServices</title>
		<link>http://sympmarc.com/2011/11/08/problem-with-jquery-1-7-and-spservices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=problem-with-jquery-1-7-and-spservices</link>
		<comments>http://sympmarc.com/2011/11/08/problem-with-jquery-1-7-and-spservices/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 18:41:36 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[z:row]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14446</guid>
		<description><![CDATA[&#60;UPDATE dateTime=&#8221;2001-11-15T11:59GMT-1&#8243;&#62; Steve Workman has come up with a much improved way to do the selecting for things like z:row in general &#8211; it&#8217;s much faster, as Steve&#8217;s statistics show &#8211; and it also works with jQuery 1.7. I&#8217;ve added it to the latest alpha for v1.6.3 (which I will probably rename v0.7.0). More details &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/08/problem-with-jquery-1-7-and-spservices/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>&lt;UPDATE dateTime=&#8221;2001-11-15T11:59GMT-1&#8243;&gt;</p>
<p>Steve Workman has come up with a <a href=" http://www.steveworkman.com/html5-2/javascript/2011/improving-javascript-xml-node-finding-performance-by-2000/ " target="_blank">much improved way</a> to do the selecting for things like z:row in general &#8211; it&#8217;s much faster, as Steve&#8217;s statistics show &#8211; and it also works with jQuery 1.7. I&#8217;ve added it to the <a href="http://spservices.codeplex.com/releases/view/68781" target="_blank">latest alpha for v1.6.3</a> (which I will probably rename v0.7.0). More details to come, but this issue is going to be resolved in the upcoming release of SPServices.</p>
<p>&lt;/UPDATE&gt;</p>
<p>Alert reader Dustin Meany pinged me yesterday with a brief email through this blog:</p>
<blockquote><p><a href="http://bugs.jquery.com/ticket/10377">http://bugs.jquery.com/ticket/10377</a> &#8212; I think you should update the documentation for SPServices&#8230;</p></blockquote>
<p>Ah, if the issue were only as small as his email. The ticket on the jQuery site talks about the fact that the notation that I&#8217;ve been recommending to parse through the results of a call to the Web Services, like:</p>
<pre class="brush: jscript; title: ; notranslate">
$(xData.responseXML).find(&quot;[nodeName='z:row']&quot;).each(function() {
  // Do something
});
</pre>
<p>is no longer valid in <a title="jQuery 1.7" href="http://blog.jquery.com/2011/11/03/jquery-1-7-released/" target="_blank">jQuery 1.7</a>.</p>
<p>I&#8217;ve confirmed in my main test pages that jQuery 1.7 no longer matches on any z:rows in calls to GetListItems. That breaks the majority of the &#8220;value added&#8221; functions in SPServices. The <code>[nodeName='z:row']</code> notation has proved highly useful to ensure cross-browser compatibility, and that was the reason I&#8217;ve been recommending it in the first place. Because GetListItems uses the somewhat odd namespace of z:row, <a href="http://sympmarc.com/2009/11/08/sharepoints-web-services-jquery-and-the-zrow-namespace-in-safari-and-chrome/" target="_blank">not all browsers react the same way</a>. Of course GetListItems is the single most used Web Service operation with SPServices. Most of the other operations, which are used less often, do not use this type of namespace.</p>
<p>So the question is how we as a development community handle this. Based on the suggestion in the jQuery ticket, I could implement a function in SPServices itself that probably will solve the issues for the SPServices value-added functions. There are only ten calls in SPServices at the moment that use the <code>[nodeName='z:row']</code> notation. However, there are thousands of you out there who have your own custom scripts written on top of SPServices that will break if you move to jQuery 1.7+.</p>
<p>The suggestion of switching to the <code>.find("z\\:row, row")</code> notation may work. I&#8217;ve quickly tested it with IE9, Chrome 15, Safari 5.1, and Firefox 7.0, all on my Windows 7 laptop. I don&#8217;t trust my cursory test, of course; there&#8217;s more work to do.</p>
<p>I hold no sway over the jQuery development team. They make their decisions without any knowledge of my little SPServices library or probably even SharePoint.</p>
<p>This, along with the XSL timeout issue I wrote about yesterday, may prove to be a big blow to those of us who choose to develop in <a title="The Middle Tier Manifesto: An Alternative Approach to Development with Microsoft SharePoint" href="http://sympmarc.com/2010/04/14/the-middle-tier-manifesto-an-alternative-approach-to-development-with-microsoft-sharepoint/" target="_blank">SharePoint&#8217;s Middle Tier</a>. As the standard bearer for this little movement, I can only do so much to make noise about how important and useful these development techniques are. When these types of roadblocks are put up, there&#8217;s little I can do to change things.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/08/problem-with-jquery-1-7-and-spservices/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>August Cumulative Update Causing Stack Overflows with DVWPs Running Over One Second</title>
		<link>http://sympmarc.com/2011/11/07/august-cumulative-update-causing-stack-overflows-with-dvwps-running-over-one-second/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=august-cumulative-update-causing-stack-overflows-with-dvwps-running-over-one-second</link>
		<comments>http://sympmarc.com/2011/11/07/august-cumulative-update-causing-stack-overflows-with-dvwps-running-over-one-second/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 22:01:05 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[cumulative updates]]></category>
		<category><![CDATA[Data View Web Part]]></category>
		<category><![CDATA[DVWP]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14441</guid>
		<description><![CDATA[Today is one of those days where I try to figure out a bunch of odd situations in various places. The oddest was one involving a Data View Web Part (DVWP) I wrote about a year ago. It&#8217;s been running just fine ever since &#8211; until about a month or so ago. I didn&#8217;t hear &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/07/august-cumulative-update-causing-stack-overflows-with-dvwps-running-over-one-second/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Today is one of those days where I try to figure out a bunch of odd situations in various places. The oddest was one involving a Data View Web Part (DVWP) I wrote about a year ago. It&#8217;s been running just fine ever since &#8211; until about a month or so ago. I didn&#8217;t hear about the issues until last week, and they didn&#8217;t make much sense to me.</p>
<p>Most of the time, the DVWP was loading just fine. Occasionally, rather than the spendiferous expected output (it really is a cool DVWP), users would see the wonderful error:</p>
<blockquote><p>Unable to display this Web Part. To troubleshoot the problem, open this Web page in a Microsoft SharePoint Foundation-compatible HTML editor such as Microsoft SharePoint Designer. If the problem persists, contact your Web server administrator.</p></blockquote>
<p>along with a correlation ID. Of course, that error can mean just about anything, as we DVWP lovers all know. The error is sporadic and there&#8217;s nothing obvious going on. No data or code has changed, so my theory was that there must be something going on with the server at the time of the error.</p>
<p>In looking at the logs, we saw that a stack overflow had occurred, but there wasn&#8217;t much else to go on. So why would the same code with the same underlying data sometimes cause a stack overflow and sometimes not? I looked through the code and didn&#8217;t see anything that I&#8217;d done which was dumb.</p>
<p>After going back and forth on this a bit, I remembered reading that there was a change in the August CU that set a limit on the amount of time that an XSL transform was allowed to take. As I understand it, it went from 5s in the June or July CU to 1s in the August CU. This can many times not be enough time if there is a server load.  Ostensibly this is to protect against denial of service (DoS) attacks. And even better, if the 1s is exceeded, a stack overflow is forced even though there is no actual error. This means that if there is a server load, the DVWPs can be forced to a stack overflow needlessly. I’m piecing all of this together based on multiple blog posts and such, of course, so I’m not certain that it’s all correct.</p>
<p>With Glyn Clough&#8217;s (<a title="Glyn Clough at Twitter" href="http://twitter.com/#!/GlynClough" target="_blank">@glynclough</a>) help</p>
<p><!-- tweet id : 133583966694412288 --><style type='text/css'>#bbpBox_133583966694412288 a { text-decoration:none; color:#0084B4; }#bbpBox_133583966694412288 a:hover { text-decoration:underline; }</style><div id='bbpBox_133583966694412288' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=sympmarc" class="twitter-action">sympmarc</a> yep - we've run into a few issues with it. Here's a KB on workarounds: <a href="http://t.co/fCRCE85O" rel="nofollow">http://t.co/fCRCE85O</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://sympmarc.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on November 7, 2011 11:37 am' href='http://twitter.com/#!/GlynClough/status/133583966694412288' target='_blank'>November 7, 2011 11:37 am</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=133583966694412288&related=sympmarc' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=133583966694412288&related=sympmarc' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=133583966694412288&related=sympmarc' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=GlynClough'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1148963834/Glyn-Clough_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=GlynClough'>@GlynClough</a><div style='margin:0; padding-top:2px'>Glyn Clough</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><strong><br />
</strong></p>
<p><strong></strong> I was able to track down KB Article <a title="KB Article 2639184" href="http://support.microsoft.com/kb/2639184" target="_blank">2639184</a> which stated the problem, and gives some possible workarounds. I don&#8217;t find the workarounds to be all that palatable, though, especially the first one:</p>
<blockquote><p>Simplify the custom XSL that was added to the DataForm web part.</p></blockquote>
<p>If I could simplify the XSL, then wouldn&#8217;t I have done that when I wrote it to be efficient?</p>
<p>I&#8217;m hoping that there will be a longer term fix for this, ideally a way to set the 1s parameter to something more reasonable. I&#8217;ve emailed the MVP mailing list to see if there&#8217;s anything positive from the Product Team and I&#8217;ll update this post if I hear anything useful.</p>
<p>In the meantime, I&#8217;m not sure what we&#8217;ll do other than tell our users that they need to refresh any pages that have DVWPs on them until the error disappears. I&#8217;m sure that will make me popular.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/07/august-cumulative-update-causing-stack-overflows-with-dvwps-running-over-one-second/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Managing SharePoint Site User Memberships in Multiple Groups Using SPServices</title>
		<link>http://sympmarc.com/2011/11/03/managing-sharepoint-site-user-memberships-in-multiple-groups-using-spservices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=managing-sharepoint-site-user-memberships-in-multiple-groups-using-spservices</link>
		<comments>http://sympmarc.com/2011/11/03/managing-sharepoint-site-user-memberships-in-multiple-groups-using-spservices/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 22:51:29 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14428</guid>
		<description><![CDATA[I got an email yesterday from Geoff Oliver. He said he had done something pretty useful with SPServices and wondered if I would be interested in seeing it. I manage about 115 groups in a single site collection&#8230;and that number is expected to grow.  I found that when a new user came on board or &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/03/managing-sharepoint-site-user-memberships-in-multiple-groups-using-spservices/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I got an email yesterday from Geoff Oliver. He said he had done something pretty useful with <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a> and wondered if I would be interested in seeing it.</p>
<blockquote><p>I manage about 115 groups in a single site collection&#8230;and that number is expected to grow.  I found that when a new user came on board or changed duty positions, getting them into the right SP groups was slow and cumbersome through the SP interface.</p>
<p>Using the SPServices libraries, I was able to create a simple interface to add/remove a single user to/from multiple groups at once.  When you identify/select a user, it will show you two select lists. The right side will list all of the groups the current user is a member of while the left box shows all the groups the user is NOT a member of.  Between the two select lists are buttons to &#8216;move&#8217; the groups from one side to the other for the identified user (while modifying their memberships appropriately in the process).  The select boxes are configured to allow multiple select so you can usually perform the maintenance in just a couple clicks.  The code fits neatly into a CEWP.</p></blockquote>
<p>Of course I wanted to see it. Geoff&#8217;s code sounded exactly like the kind of thing that I think SPServices is good for: a useful solution that solves a business problem better than SharePoint out of the box without needing to deploy anything to the server.</p>
<p>Geoff describes himself as:</p>
<blockquote><p>&#8230;a Civilian Project Manager for the Air Force, developing a SharePoint site to assist a large organization with information management and integration with Microsoft Office (sharing/synchronizing data between SharePoint sites and Word/Excel/Access files).  I&#8217;ve been doing MS Office automation (using VBA) for about 15 years now and SharePoint site development for 7.</p></blockquote>
<p>The code uses a number of <a title="SPServices Users and Groups" href="http://spservices.codeplex.com/wikipage?title=Users%20and%20Groups" target="_blank">Users and Groups Web Service</a> operations that are wrapped in SPServices:</p>
<ul>
<li>GetUserCollectionFromSite</li>
<li>GetGroupCollectionFromUser</li>
<li>GetGroupCollectionFromSite</li>
<li>AddUserToGroup</li>
<li>RemoveUserFromGroup</li>
</ul>
<p>Here&#8217;s Geoff&#8217;s code. It&#8217;s amazingly compact and gets the job done well.</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
  //Populate the users pick list
  var strHTMLSiteUsers = &quot;&quot;;
  $().SPServices({
      operation: &quot;GetUserCollectionFromSite&quot;,
      async: false,
      completefunc: function(xData, Status) {
        $(xData.responseXML).find(&quot;User&quot;).each(function() {
          strHTMLSiteUsers += &quot;&lt;option value='&quot; + $(this).attr(&quot;LoginName&quot;) + &quot;'&gt;&quot; + $(this).attr(&quot;Name&quot;) + &quot;&lt;/option&gt;&quot;;
        });
        $(&quot;#my_SiteUsers&quot;).append(strHTMLSiteUsers);
      }
  });
  RefreshGroupLists();
});

function RefreshGroupLists(){
  var strHTMLAvailable = &quot;&quot;;
  var strHTMLAssigned = &quot;&quot;;
  var arrOptionsAssigned = new Array();
  var intOpts = 0;
  var booMatch;
  var booErr = &quot;false&quot;;

  $(&quot;#my_SPGroupsAssigned&quot;).html(&quot;&quot;);
  $(&quot;#my_SPGroupsAvailable&quot;).html(&quot;&quot;);

  if($(&quot;#my_SiteUsers&quot;).attr(&quot;value&quot;) == 0){
    alert(&quot;You must select a user&quot;);
    return;
  }

  //Populate the Groups Assigned
  $().SPServices({
      operation: &quot;GetGroupCollectionFromUser&quot;,
      userLoginName: $(&quot;#my_SiteUsers&quot;).attr(&quot;value&quot;),
      async: false,
      completefunc: function(xData, Status) {
        $(xData.responseXML).find(&quot;errorstring&quot;).each(function() {
          alert(&quot;User not found&quot;);
          booErr = &quot;true&quot;;
          return;
        });
        $(xData.responseXML).find(&quot;Group&quot;).each(function() {
          strHTMLAvailable += &quot;&lt;option value='&quot; + $(this).attr(&quot;Name&quot;) + &quot;'&gt;&quot; + $(this).attr(&quot;Name&quot;) + &quot;&lt;/option&gt;&quot;;
          arrOptionsAssigned[intOpts] = $(this).attr(&quot;Name&quot;);
          intOpts = intOpts + 1;
        });
        $(&quot;#my_SPGroupsAssigned&quot;).append(strHTMLAvailable);
      }
  });

  //Populate available site groups
  if(booErr == &quot;false&quot;){
    $().SPServices({
        operation: &quot;GetGroupCollectionFromSite&quot;,
        async: false,
        completefunc: function(xData, Status) {
          $(xData.responseXML).find(&quot;Group&quot;).each(function() {
            booMatch = &quot;false&quot;;
            for (var i=0;i&lt;=arrOptionsAssigned.length;i++){
              if($(this).attr(&quot;Name&quot;) == arrOptionsAssigned[i]){
                booMatch = &quot;true&quot;;
                break;
              }
            }
            if(booMatch == &quot;false&quot;){
              strHTMLAssigned += &quot;&lt;option value='&quot; + $(this).attr(&quot;Name&quot;) + &quot;'&gt;&quot; + $(this).attr(&quot;Name&quot;) + &quot;&lt;/option&gt;&quot;;
            }
          });
          $(&quot;#my_SPGroupsAvailable&quot;).append(strHTMLAssigned);
        }
    });
  }
}

function AddGroupsToUser(){
  var i;

  if($(&quot;#my_SiteUsers&quot;).attr(&quot;value&quot;) == 0){
    alert(&quot;You must select a user&quot;);
    return;
  }

  if($(&quot;#my_SPGroupsAvailable&quot;).val() == null){
    alert(&quot;You haven't selected any groups to add&quot;);
    return;
  }
  else{
    var arrGroups = $(&quot;#my_SPGroupsAvailable&quot;).val();
    for (i=0;i&lt;arrGroups.length;i++){
      $().SPServices({
          operation: &quot;AddUserToGroup&quot;,
          groupName: arrGroups[i],
          userLoginName: $(&quot;#my_SiteUsers&quot;).attr(&quot;value&quot;),
          async: false,
          completefunc: null
      });
    }
    RefreshGroupLists();
  }
}

function RemoveGroupsFromUser(){
  var i

  if($(&quot;#my_SiteUsers&quot;).attr(&quot;value&quot;) == 0){
    alert(&quot;You must select a user&quot;);
    return;
  }

  if($(&quot;#my_SPGroupsAssigned&quot;).val() == null){
    alert(&quot;You haven't selected any groups to remove&quot;);
    return;
  }
  else{
    var arrGroups = $(&quot;#my_SPGroupsAssigned&quot;).val();
    for (i=0;i&lt;arrGroups.length;i++){
      $().SPServices({
          operation: &quot;RemoveUserFromGroup&quot;,
          groupName: arrGroups[i],
          userLoginName: $(&quot;#my_SiteUsers&quot;).attr(&quot;value&quot;),
          async: false,
          completefunc: null
      });
    }
    RefreshGroupLists();
  }
}
</pre>
<p>and the associated markup:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;table align=&quot;center&quot;&gt;
  &lt;tr&gt;
    &lt;td colspan=&quot;3&quot; style=&quot;text-align:center&quot;&gt;
      &lt;font style=&quot;font-weight:bold&quot;&gt;Select a User:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
      &lt;select id=&quot;my_SiteUsers&quot; style=&quot;width:350px;&quot; onchange=&quot;RefreshGroupLists()&quot;&gt;&lt;/select&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th class='ms-vh2'&gt;Available Groups&lt;/th&gt;
    &lt;th&gt;&lt;/th&gt;
    &lt;th class='ms-vh2'&gt;Assigned Groups&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class='ms-vb2'&gt;
      &lt;select id=&quot;my_SPGroupsAvailable&quot; style=&quot;width:250px;height:450px;&quot; multiple=&quot;multiple&quot;&gt;&lt;/select&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;button id=&quot;my_AddGroupsToUser&quot; style=&quot;width:80px;&quot; onclick=&quot;AddGroupsToUser()&quot;&gt;&amp;gt;&amp;gt;&lt;/button&gt;&lt;br&gt;&lt;br&gt;
      &lt;button id=&quot;my_RemoveGroupsFromUser&quot; style=&quot;width:80px;&quot; onclick=&quot;RemoveGroupsFromUser()&quot;&gt;&amp;lt;&amp;lt;&lt;/button&gt;&lt;/td&gt;
    &lt;td class='ms-vb2'&gt;
      &lt;select id=&quot;my_SPGroupsAssigned&quot; style=&quot;width:250px;height:450px;&quot; multiple=&quot;multiple&quot;&gt;&lt;/select&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</pre>
<p>And here&#8217;s the net result. It&#8217;s a simple little form that does exactly what Geoff said it would. All I had to do to get it running in my environment was to change the references to the script files to point where I have them stored. Otherwise, it worked with no modification whatsoever.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/image.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/11/image_thumb.png" alt="image" width="628" height="409" border="0" /></a></p>
<p>This is the sort of thing that may belong in SPServices. Of course, you can simply copy and use the code above, but perhaps some more options and additional functionality would make it even more useful.  What do you think? Is this something you&#8217;d use?</p>
<p>And thanks for sharing, Geoff.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/03/managing-sharepoint-site-user-memberships-in-multiple-groups-using-spservices/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Creating a jQueryUI Accordion with a Data View Web Part</title>
		<link>http://sympmarc.com/2011/11/02/creating-a-jquery-accordion-with-a-data-view-web-part/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creating-a-jquery-accordion-with-a-data-view-web-part</link>
		<comments>http://sympmarc.com/2011/11/02/creating-a-jquery-accordion-with-a-data-view-web-part/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 19:01:04 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[accordions]]></category>
		<category><![CDATA[Data View Web Part]]></category>
		<category><![CDATA[DVWP]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14416</guid>
		<description><![CDATA[We can do all sorts of fun stuff that makes the user experience (UX) in SharePoint far better than it is out of the box. One of those things is to use jQueryUI widgets like an accordion to put a large amount of content on the page, but broken into categorized, consumable chunks. Most people &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/11/02/creating-a-jquery-accordion-with-a-data-view-web-part/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>We can do all sorts of fun stuff that makes the user experience (UX) in SharePoint far better than it is out of the box. One of those things is to use <a title="jQueryUI" href="http://jqueryui.com/" target="_blank">jQueryUI</a> widgets like an accordion to put a large amount of content on the page, but broken into categorized, consumable chunks. Most people are very accustomed to using things like accordions from other Web sites they visit regularly, and even if they aren&#8217;t things like accordions seem to make sense quickly.</p>
<p>I had forgotten about it, but I did a <a title="Setting Up a DVWP to Use jQueryUI Accordion and Tabs" href="http://sympmarc.com/2011/08/29/setting-up-a-dvwp-to-use-jqueryui-accordion-and-tabs/" target="_blank">post</a> earlier this year where I showed how Carlos Nunes-Ueno approached this. It turns out that our XSL looks similar, but here is another example based on an accordion I recently set up myself.</p>
<p>To start building this, we created two lists. The first list, which we called Accordion Headers, contains the names of the accordion panels plus a column we can use to adjust the order of the panels.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/clip_image002.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="clip_image002" src="http://sympmarc.com/wp-content/uploads/2011/11/clip_image002_thumb.jpg" alt="clip_image002" width="466" height="66" border="0" /></a></p>
<p>The other list, called Accordion Content, contains the accordion panel content, and has a Lookup column into the Title in the Accordion Headers list. We also pulled the Order column from the Accordion Headers list in with the header name. There are several other columns in this list that we used to construct the content for each accordion panel.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/clip_image0024.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="clip_image002[4]" src="http://sympmarc.com/wp-content/uploads/2011/11/clip_image0024_thumb.jpg" alt="clip_image002[4]" width="474" height="170" border="0" /></a></p>
<p>Once the lists were in place and populated, I just added a Data View Web Part (DVWP) to a page with the Accordion Content list as its DataSource.</p>
<p>If you look at the jQueryUI documentation page for the <a title="jQueryUI Accordion" href="http://jqueryui.com/demos/accordion/" target="_blank">accordion widget</a>, you can see that it wants the markup to look like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;accordion&quot;&gt;
 &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;First header&lt;/a&gt;&lt;/h3&gt;
 &lt;div&gt;First content&lt;/div&gt;
 &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Second header&lt;/a&gt;&lt;/h3&gt;
 &lt;div&gt;Second content&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>The XSL is simple, but you have to roll your own; SharePoint Designer knows nothing about how to structure the rendered markup for this. To do this with the Accordion Content list, the XSL looked like this. Our panels contain unordered lists of links.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:template match=&quot;/&quot; xmlns:x=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:d=&quot;http://schemas.microsoft.com/sharepoint/dsp&quot; xmlns:asp=&quot;http://schemas.microsoft.com/ASPNET/20&quot; xmlns:__designer=&quot;http://schemas.microsoft.com/WebParts/v2/DataView/designer&quot; xmlns:SharePoint=&quot;Microsoft.SharePoint.WebControls&quot;&gt;
  &lt;xsl:call-template name=&quot;AccordionSetup&quot;/&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;AccordionSetup&quot;&gt;
  &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Rows/Row&quot;/&gt;
  &lt;div id=&quot;left-accordion&quot; style=&quot;width: 300px;&quot;&gt;
    &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
      &lt;xsl:sort select=&quot;@AccHeading_x003a_Order&quot; data-type=&quot;number&quot;/&gt;
      &lt;xsl:sort select=&quot;@Order&quot; data-type=&quot;number&quot;/&gt;
      &lt;xsl:call-template name=&quot;AccordionPanels&quot;&gt;
        &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot;/&gt;
      &lt;/xsl:call-template&gt;
    &lt;/xsl:for-each&gt;
  &lt;/div&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;AccordionPanels&quot;&gt;
  &lt;xsl:param name=&quot;Rows&quot;/&gt;
  &lt;xsl:variable name=&quot;NewHeading&quot; select=&quot;ddwrt:NameChanged(string(@AccHeading.), 0)&quot;/&gt;
  &lt;xsl:if test=&quot;string-length($NewHeading) &amp;gt; 0&quot;&gt;
    &lt;h3&gt;
      &lt;a href=&quot;#{substring-before(@AccHeading., ';#')}&quot;&gt;
        &lt;xsl:value-of select=&quot;substring-after(@AccHeading., ';#')&quot;/&gt;
      &lt;/a&gt;
    &lt;/h3&gt;
    &lt;div&gt;
      &lt;ul&gt;
        &lt;xsl:variable name=&quot;PanelRows&quot; select=&quot;$Rows[@AccHeading. = current()/@AccHeading.]&quot;/&gt;
        &lt;xsl:for-each select=&quot;$PanelRows&quot;&gt;
          &lt;xsl:call-template name=&quot;AccordionPanelContent&quot;&gt;&lt;/xsl:call-template&gt;
        &lt;/xsl:for-each&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/xsl:if&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;AccordionPanelContent&quot;&gt;
  &lt;li&gt;
    &lt;xsl:value-of select=&quot;@Title&quot;/&gt; - &lt;a href=&quot;{@ContentLink}&quot;&gt;&lt;xsl:value-of select=&quot;@ContentLink.desc&quot;/&gt;&lt;/a&gt;
  &lt;/li&gt;
&lt;/xsl:template&gt;
</pre>
<p>It&#8217;s pretty simple, really, and what we ended up with is a nicely organized, list-driven accordion which is easy to use and easy to maintain. No developer required to make changes whatsoever. It&#8217;s a win-win all around.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/11/clip_image0026.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="clip_image002[6]" src="http://sympmarc.com/wp-content/uploads/2011/11/clip_image0026_thumb.jpg" alt="clip_image002[6]" width="313" height="237" border="0" /></a></p>
<p>&lt;UPDATE dateTime=&#8221;2011-11-03T09:26&#8243;&gt;</p>
<p>It occurred to me, though no one complained, that I hadn&#8217;t shown the jQuery to activate the accordion. Getting the markup right is really the hard part, as the jQuery can be as simple as this:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#left-accordion&quot;).accordion();
</pre>
<p>In this particular case, we set a few options as well:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#left-accordion&quot;).accordion({
  active:false,
  autoHeight: false,
  collapsible: true
});
</pre>
<p>I&#8217;ll leave it to you to check the jQueryUI docs to see what each option does.</p>
<p>&lt;/UPDATE&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/11/02/creating-a-jquery-accordion-with-a-data-view-web-part/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Hack-Hack-Hack in SharePoint?</title>
		<link>http://sympmarc.com/2011/10/22/hack-hack-hack-in-sharepoint/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hack-hack-hack-in-sharepoint</link>
		<comments>http://sympmarc.com/2011/10/22/hack-hack-hack-in-sharepoint/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 23:41:41 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14397</guid>
		<description><![CDATA[This one is just for fun. Matt Bramer (@iOnline247) tweeted the other day: Love the template name #Microsoft&#8230; Everyone that does #SharePoint, go to your site&#8217;s /_layouts/xsl/internal.xsl for a laugh. October 19, 2011 6:01 pm via Silver BirdReplyRetweetFavorite @iOnline247 Matthew Bramer&#12304;&#12484;&#12305; That just seemed too good not to check out. Take a look what you&#8217;ll &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/10/22/hack-hack-hack-in-sharepoint/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>This one is just for fun. Matt Bramer (<a title="iOnline247" href="http://twitter.com/iOnline247" target="_blank">@iOnline247</a>) tweeted the other day:</p>
<p><!-- tweet id : 126795256225210368 --><br />
<style type='text/css'>#bbpBox_126795256225210368 a { text-decoration:none; color:#2FC2EF; }#bbpBox_126795256225210368 a:hover { text-decoration:underline; }</style>
<div id='bbpBox_126795256225210368' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#1A1B1F; background-image:url(http://a3.twimg.com/profile_background_images/44884752/Jessica_Alba_Wallpaper.jpg);'>
<div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#666666; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Love the template name <a href="http://twitter.com/search?q=%23Microsoft" title="#Microsoft">#Microsoft</a>&#8230; Everyone that does <a href="http://twitter.com/search?q=%23SharePoint" title="#SharePoint">#SharePoint</a>, go to your site&#8217;s /_layouts/xsl/internal.xsl for a laugh.</span>
<div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://sympmarc.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on October 19, 2011 6:01 pm' href='http://twitter.com/#!/iOnline247/status/126795256225210368' target='_blank'>October 19, 2011 6:01 pm</a> via <a href="https://chrome.google.com/extensions/detail/encaiiljifbdbjlphpgpiimidegddhic" rel="nofollow" target="blank">Silver Bird</a><a href='https://twitter.com/intent/tweet?in_reply_to=126795256225210368&#038;related=sympmarc' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=126795256225210368&#038;related=sympmarc' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=126795256225210368&#038;related=sympmarc' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div>
<div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=iOnline247'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1495754768/MeSPCorg_normal.png' /></a></div>
<div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=iOnline247'>@iOnline247</a>
<div style='margin:0; padding-top:2px'>Matthew Bramer&#12304;&#12484;&#12305;</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<p><!-- end of tweet --></p>
<p>That just seemed too good not to check out. Take a look what you&#8217;ll find if you do go to <code>[your-sharepoint-server]/_layouts/xsl/internal.xsl</code>:</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2011/10/Hack-Hack-Hack.png"><img class="aligncenter size-full wp-image-14398" title="Hack-Hack-Hack" src="http://sympmarc.com/wp-content/uploads/2011/10/Hack-Hack-Hack.png" alt="" width="637" height="183" /></a>&#8230;</p>
<p>Now who said that there are no hacks in SharePoint?  ;+)</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/10/22/hack-hack-hack-in-sharepoint/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>InnerWorkings Adds SharePoint 2010 to Its Learning Platform in Partnership with USPJ Academy</title>
		<link>http://sympmarc.com/2011/10/19/innerworkings-adds-sharepoint-2010-to-its-learning-platform-in-partnership-with-uspj-academy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=innerworkings-adds-sharepoint-2010-to-its-learning-platform-in-partnership-with-uspj-academy</link>
		<comments>http://sympmarc.com/2011/10/19/innerworkings-adds-sharepoint-2010-to-its-learning-platform-in-partnership-with-uspj-academy/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 12:54:42 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[DVWP]]></category>
		<category><![CDATA[InnerWorkings]]></category>
		<category><![CDATA[Microsoft SharePoint]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint Designer]]></category>
		<category><![CDATA[USPJ Academy]]></category>
		<category><![CDATA[USPJA]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14382</guid>
		<description><![CDATA[Over at the USPJ Academy, we&#8217;re really excited to finally be able to talk publicly about the partnership we&#8217;ve formed with InnerWorkings. We&#8217;ve been working hard with them over the last few months to get our content and platform capabilities integrated with theirs to deliver our classes to their customer base. We&#8217;re proud of our &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/10/19/innerworkings-adds-sharepoint-2010-to-its-learning-platform-in-partnership-with-uspj-academy/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Over at the <a title="USPJ Academy" href="http://uspja.com/" target="_blank">USPJ Academy</a>, we&#8217;re really excited to finally be able to talk publicly about the partnership we&#8217;ve formed with <a title="InnerWorkings" href="http://www.innerworkings.com/" target="_blank">InnerWorkings</a>. We&#8217;ve been working hard with them over the last few months to get our content and platform capabilities integrated with theirs to deliver our classes to their customer base. We&#8217;re proud of our content and look forward to being able to offer it to a far wider audience.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2011/10/InnerWorkingsLogo.png"><img class="size-full wp-image-14388 aligncenter" title="InnerWorkingsLogo" src="http://sympmarc.com/wp-content/uploads/2011/10/InnerWorkingsLogo.png" alt="" width="475" height="62" /></a><a href="http://sympmarc.com/wp-content/uploads/2011/06/uspjalogo.jpg"><img class="size-full wp-image-13727 aligncenter" title="USPJAlogo.jpg" src="http://sympmarc.com/wp-content/uploads/2011/06/uspjalogo.jpg" alt="" width="600" height="114" /></a></p>
<p>Here&#8217;s the full text of the InnerWorking press release today:</p>
<h2><a title="InnerWorkings Adds SharePoint 2010 to its Learning Platform" href="http://blogs.innerworkings.com/brian-finnerty/2011/10/18/innerworkings-adds-sharepoint-2010-to-its-learning-platform/" rel="bookmark" target="_blank">InnerWorkings Adds SharePoint 2010 to its Learning Platform</a></h2>
<p>Posted by Brian Finnerty</p>
<p><img src="http://blogs.innerworkings.com/blogs/wp-content/uploads/2011/10/sharepoint-2010-logo.png" alt="SharePoint 2010" align="right" /><strong>San Francisco, CA — October 18, 2011.</strong></p>
<p><a href="http://www.innerworkings.com/sharepoint">InnerWorkings</a> announced a major addition to its Learning Platform  today with the  release of self-paced SharePoint 2010 training for professional  developers and software teams.</p>
<p>Working in partnership with the <a href="http://www.uspja.com/">USPJ Academy</a>,  InnerWorkings is offering world class SharePoint learning solutions to  its customers. USPJA boasts a team of industry renowned SharePoint  experts whose approach emphasizes the real-world aspects of learning  SharePoint — a perfect fit with the InnerWorkings methodology.</p>
<p>InnerWorkings confirmed the immediate release of <a href="http://resource.innerworkings.com/developer_interface/InnerWorkings_SharePoint_Learning_Catalog.pdf">three SharePoint courses</a> to its Learning Platform, covering the following topics:</p>
<ul>
<li><em>Beginning SharePoint Development</em></li>
<li><em>SharePoint Data View Web Part Basics</em></li>
<li><em>SharePoint Designer 2010 Workflow</em></li>
</ul>
<p>Additional SharePoint courses are in development and will be released on a quarterly basis. All of the <a href="http://www.innerworkings.com/sharepoint/tour">SharePoint courses</a>  include video-based instruction from USPJA experts, hand-picked  e-books, and a virtual lab environment to practice important  configuration tasks. In addition, a Live Guide feature connects  developers and in-house SharePoint experts to facilitate ongoing support  and grading of assignments.</p>
<p>“With over 100M users and $1B in revenue for Microsoft, SharePoint is  the understated giant of Microsoft’s enterprise collaboration  strategy”, said Francis McKeagney, InnerWorkings CEO. “As a server-based  technology, SharePoint presents significant challenges to organizations  wishing to provide deep, hands-on training to their software teams. We  are really excited that our new offering addresses this issue in a  rigorous and compelling way. The virtual lab capability, in particular,  allows for deep learning in both generic and customizable setups. We are  delighted to partner with USPJA to deliver such a comprehensive  enterprise learning solution for SharePoint development teams. USPJA’s  knowledge and expertise has made this offering possible.”</p>
<p>“The market for SharePoint developers has never been hotter”, said  Bjørn Furuknap, USPJA CEO. “We’ve always been extremely confident in the  depth and quality of our SharePoint learning solutions, but this  partnership with InnerWorkings brings tremendous scale and reach to our  efforts. Coupling the technical strength of our training with the online  learning expertise and global audience of InnerWorkings is a winning  combination. We are delighted to partner with InnerWorkings to offer our  combined SharePoint learning services to a huge audience of SharePoint  developers and teams hungry to succeed in their chosen area of domain  expertise.”</p>
<p><strong>About InnerWorkings</strong><br />
At InnerWorkings, our mission is to help our customers build great  software organizations. We believe that it is possible to create a  successful, efficient, and cost-effective software organization and  sustain it over multiple projects. How do we do this? By providing  software executives with an integrated platform to improve learning,  collaboration, and software processes across your development teams. The  company’s R&amp;D facility is based in Dublin, Ireland and  InnerWorkings maintains its corporate headquarters in San Francisco,  California. For more information about InnerWorkings and its services,  visit <a href="http://www.innerworkings.com/">www.innerworkings.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/10/19/innerworkings-adds-sharepoint-2010-to-its-learning-platform-in-partnership-with-uspj-academy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Improved Efficiency Is Possible with No Job Loss</title>
		<link>http://sympmarc.com/2011/10/14/improved-efficiency-is-possible-with-no-job-loss/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=improved-efficiency-is-possible-with-no-job-loss</link>
		<comments>http://sympmarc.com/2011/10/14/improved-efficiency-is-possible-with-no-job-loss/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 13:33:27 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Al Dunlap]]></category>
		<category><![CDATA[BPR]]></category>
		<category><![CDATA[Business Process Reengineering]]></category>
		<category><![CDATA[efficiency]]></category>
		<category><![CDATA[Forms]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[Renaissance Solutions]]></category>
		<category><![CDATA[Sunbeam]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14370</guid>
		<description><![CDATA[The other day I tweeted: It seems hardly an hour goes by in the day when I don&#8217;t see something that could be more efficient &#8211; with no cost in jobs. October 12, 2011 8:08 am via HootSuiteReplyRetweetFavorite @sympmarc Marc D Anderson Dan Dragnea called me on it, fairly enough: @sympmarc sorry, I was curious &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/10/14/improved-efficiency-is-possible-with-no-job-loss/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>The other day I tweeted:</p>
<p><!-- tweet id : 124109058532835328 --><br />
<style type='text/css'>#bbpBox_124109058532835328 a { text-decoration:none; color:#0084B4; }#bbpBox_124109058532835328 a:hover { text-decoration:underline; }</style>
<div id='bbpBox_124109058532835328' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'>
<div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>It seems hardly an hour goes by in the day when I don&#8217;t see something that could be more efficient &#8211; with no cost in jobs.</span>
<div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://sympmarc.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on October 12, 2011 8:08 am' href='http://twitter.com/#!/sympmarc/status/124109058532835328' target='_blank'>October 12, 2011 8:08 am</a> via <a href="http://www.hootsuite.com" rel="nofollow" target="blank">HootSuite</a><a href='https://twitter.com/intent/tweet?in_reply_to=124109058532835328&#038;related=sympmarc' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=124109058532835328&#038;related=sympmarc' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=124109058532835328&#038;related=sympmarc' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div>
<div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=sympmarc'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1124059643/Marc_hi-res_-_Copy_normal.jpg' /></a></div>
<div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=sympmarc'>@sympmarc</a>
<div style='margin:0; padding-top:2px'>Marc D Anderson</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<p><!-- end of tweet --></p>
<p>Dan Dragnea called me on it, fairly enough:</p>
<p><!-- tweet id : 124181971273392128 --><br />
<style type='text/css'>#bbpBox_124181971273392128 a { text-decoration:none; color:#0084B4; }#bbpBox_124181971273392128 a:hover { text-decoration:underline; }</style>
<div id='bbpBox_124181971273392128' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#000000; background-image:url(http://a1.twimg.com/profile_background_images/179502722/crabmosaic_hst.jpg); background-repeat:no-repeat'>
<div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=sympmarc" class="twitter-action">sympmarc</a> sorry, I was curious how increased efficiency would not affect jobs. There is an inverse correlation between the 2</span>
<div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://sympmarc.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on October 12, 2011 12:57 pm' href='http://twitter.com/#!/dragnead/status/124181971273392128' target='_blank'>October 12, 2011 12:57 pm</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=124181971273392128&#038;related=sympmarc' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=124181971273392128&#038;related=sympmarc' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=124181971273392128&#038;related=sympmarc' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div>
<div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=dragnead'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/466607406/DanielDragnea_normal.jpg' /></a></div>
<div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=dragnead'>@dragnead</a>
<div style='margin:0; padding-top:2px'>Dan Dragnea</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<p><!-- end of tweet --></p>
<p>The thing that caused me to tweet what I did was an annoying one with a simple fix, and there was a reason I tacked on the &#8220;with no cost in jobs&#8221; bit. I was driving out of the parking ramp (garage to those of us who aren&#8217;t from the upper Midwest) at my hotel. There were two exit lanes, one marked with a sign saying &#8220;Monthly Cardholders Only&#8221; and the other saying &#8220;Hotel Guests, Credit Cards, and Cash&#8221;. All of the cars were dutifully lined up in the latter lane, since (I assume) none of us were monthly cardholders. When I got to the booth, I noticed that the other lane also had a card reader for hotel guest keys as well as credit cards. I pointed this out to the main in the booth and he basically said &#8220;Huh. I never noticed that.&#8221; So the twenty or so of us who waited in one lane could have been using the other lane instead, at least those of us not using cash.</p>
<p>This is the sort of no job loss inefficiency that drives me crazy. Not only is the booth guy necessary, but someone could get a little work out of fixing the signs.So in this case, it&#8217;s a tiny job *gain*, not a job loss to improve the efficiency.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/10/peter_drucker_efficiency_mug-p1688911830266767022otmb_400.jpg"><img class="alignright size-full wp-image-14377" title="peter_drucker_efficiency_mug-p1688911830266767022otmb_400" src="http://sympmarc.com/wp-content/uploads/2011/10/peter_drucker_efficiency_mug-p1688911830266767022otmb_400.jpg" alt="" width="400" height="400" /></a>Back in the 1990s, the concept of efficiency was probably irrevocably intertwined with job loss. The <a href="http://en.wikipedia.org/wiki/Business_process_reengineering">Business Process Reengineering (BPR)</a> movement and characters like <a href="http://en.wikipedia.org/wiki/Albert_J._Dunlap">Chainsaw Al&#8217;s</a> tenure at Sunbeam caused many people to begin to fear for their livelihoods. (Think about how good we all had it back then compared to the world of impermanence we now inhabit.)  This was a huge detriment to the knowledge management consulting work we were doing at Renaissance Solutions at the time because many people thought that allowing their knowledge to be captured and disseminated was going to make them obsolete. There was literally no goal for that in the work that we were doing. By elevating everyone&#8217;s performance, we hoped to allow everyone to work on more value-added tasks than the mundane or rote parts of their jobs where they added less value. This was around the dawning of the knowledge worker moniker. We don&#8217;t want to get rid of well-performing knowledge workers (the badly performing ones are a totally different story); we want them to work on things that will add more to the bottom line.</p>
<p>Now we call all of this collaboration and we run into many of the same fears and doubts. Add to the mix the erosion of employee *and* employer loyalty, and it&#8217;s reasonable for the fears to be even stronger than they were back then.</p>
<p>There *are* no-job-loss efficiencies we can implement all around us, though, just like that parking ramp example. The guy in the booth would be happier because people wouldn&#8217;t be as testy when they got to him, and each person would save some few minutes on their way out.</p>
<p>Think about the person in HR who has to collect and collate all of the paper forms we use to elect our benefits. (Yes, plenty of places still use paper-based forms.) They probably don&#8217;t love that work and they probably feel that they should be doing something more important. Well, by electronifying those forms and routing them to the right places automagically with a workflow, that person can focus on something we all care about, like improving HR&#8217;s customer service around the process or holding more informative sessions explaining what the forms cover. By improving the efficiency, we can improve the overall experience, and there&#8217;s no reason a job would be lost.</p>
<p>Or take the case of a team working to accomplish a project&#8217;s goals. If we can make that team more efficient by giving them a robust team workspace in which to asynchronously collaborate, then they will have more time to find other experts in the organization to bring into their effort, or pursue tangential possibilities that may address the project goals better, or do more research using external sources, or attend more educational conferences. No one loses a job, the team performs at a higher level of efficiency *and* effectiveness, and we&#8217;ve opened the door to more serendipitous results.</p>
<p>I know that I may be a bit of a Pollyanna about all of this. There&#8217;s no guarantee that no one will lose a job when greater efficiencies are introduced. But it&#8217;s not an inevitable outcome. Take that extra manpower and energy and focus it on process improvement, and you&#8217;ll get direct benefits to the bottom line. And we all might get out of the parking ramp a little bit quicker.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/10/14/improved-efficiency-is-possible-with-no-job-loss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft SharePoint Conference 2011 Day #3 Thoughts</title>
		<link>http://sympmarc.com/2011/10/05/microsoft-sharepoint-conference-day-3-thoughts/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=microsoft-sharepoint-conference-day-3-thoughts</link>
		<comments>http://sympmarc.com/2011/10/05/microsoft-sharepoint-conference-day-3-thoughts/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 02:33:45 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Maturity]]></category>
		<category><![CDATA[SPC11]]></category>
		<category><![CDATA[SPMaturity]]></category>

		<guid isPermaLink="false">http://sympmarc.com/2011/10/05/microsoft-sharepoint-conference-day-3-thoughts/</guid>
		<description><![CDATA[The conference continues along at breakneck speed toward tomorrow&#8217;s wrap up. I&#8217;ve noticed a few themes I thought were worth recording. As with almost all SharePoint events, I still see an overabundance of sessions focused on the technology side of SharePoint and not enough sessions focused on the so-called &#8220;business&#8221; side. The technology shouldn&#8217;t even &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/10/05/microsoft-sharepoint-conference-day-3-thoughts/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>The conference continues along at breakneck speed toward tomorrow&#8217;s wrap up. I&#8217;ve noticed a few themes I thought were worth recording.</p>
<p>As with almost all SharePoint events, I still see an overabundance of sessions focused on the technology side of SharePoint and not enough sessions focused on the so-called &#8220;business&#8221; side. The technology shouldn&#8217;t even be in play unless it is driving business success, yet there&#8217;s still so much attention paid to keeping servers tuned and code written, and so little on process improvement, change management, incentives, and knowledge management. Jamming stuff into SharePoint alone does not equal business success.</p>
<p>So many sessions I&#8217;ve seen tell me that thinking about your organization&#8217;s SharePoint Maturity is critical to success. If you&#8217;re at the conference, find Sadie Van Buren (<a href="http://twitter.com/Sadalit">@Sadalit</a>) and ask her how it can help you improve how you use SharePoint across the board to drive your organization to that mythical &#8220;next level&#8221;.</p>
<p>All that said, many of the technical sessions I&#8217;ve sat in (or more often stood in &#8211; all the popular sessions are filled to the hallways) have been first rate. I&#8217;ve learned a lot: at least a few great nuggets from just about every session. In a later post, I&#8217;ll list out some if my favorites and why I liked them.</p>
<p>Last night we got to go to Disneyland and act like kids again. Great fun, so thanks, Microsoft.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/10/LogRide.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="LogRide" border="0" alt="LogRide" src="http://sympmarc.com/wp-content/uploads/2011/10/LogRide_thumb.jpg" width="1764" height="2380"></a></p>
<p>That&#8217;s Tom Resing (<a href="http://twitter.com/resing" target="_blank">@resing</a>)behind me in the &#8220;boat&#8221;, with Matt Bramer (<a href="http://twitter.com/IOnline247" target="_blank">@IOnline247</a>), behind him, then the SharePoint Ninja himself, Michael Doyle (<a href="http://twitter.com/SharePointNinja" target="_blank">@SharePointNinja</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/10/05/microsoft-sharepoint-conference-day-3-thoughts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Microsoft SharePoint Conference 2011 Keynote Thoughts</title>
		<link>http://sympmarc.com/2011/10/03/microsoft-sharepoint-conference-2011-keynote-thoughts/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=microsoft-sharepoint-conference-2011-keynote-thoughts</link>
		<comments>http://sympmarc.com/2011/10/03/microsoft-sharepoint-conference-2011-keynote-thoughts/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 18:45:24 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[NetHope]]></category>
		<category><![CDATA[Office365]]></category>
		<category><![CDATA[SPC11]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/2011/10/03/microsoft-sharepoint-conference-2011-keynote-thoughts/</guid>
		<description><![CDATA[The keynotes this morning at SPC11 were great Microsoft marketing. We heard about all of the hopes and dreams the product team has (probably driven to a large degree by the Marketing folks) for SharePoint use and adoption. We heard that Office365 is taking off like gangbusters and solves a whole class of somewhat unidentified &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/10/03/microsoft-sharepoint-conference-2011-keynote-thoughts/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://sympmarc.com/wp-content/uploads/2011/10/20111003-115214.jpg" alt="20111003-115214.jpg" class="alignnone size-full" /></p>
<p>The keynotes this morning at SPC11 were great Microsoft marketing. We heard about all of the hopes and dreams the product team has (probably driven to a large degree by the Marketing folks) for SharePoint use and adoption. We heard that Office365 is taking off like gangbusters and solves a whole class of somewhat unidentified problems. We saw a cool demo of a 1.4Tb content SharePoint Farm with 7500 concurrent users (not coincidentally, the number of SPC11 attendees) failing over when they pulled the plug on one if the SQL servers running Denali. (Big applause for that, but it&#8217;s sort of over my head. Clearly cool and good, but over my head.) We saw some cute and funny video filler with some Hollywood stars like Luke Perry, Alan Thicke, and Carmen Electra.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/10/20111003-115402.jpg"><img src="http://sympmarc.com/wp-content/uploads/2011/10/20111003-115402.jpg" alt="20111003-115402.jpg" class="alignnone size-full" /></a></p>
<p>For things who came to SPC11 hoping to hear a lot of new, inside scoop about the next version of SharePoint, the keynote speeches were probably a disappointment. The only &#8220;news&#8221; I gleaned was about the upgrade to Office365 which is coming by the end of the year. I&#8217;m sure that the failover demo contained something which amounted to an announcement as well, but as I mentioned, not my focus.</p>
<p>The coolest thing I learned about the keynotes (from a little birdy afterwards) was that <a href="http://SPServices.codeplex.com">SPServices</a> was used under the covers to show the graphics for the NetHope voting application shown at the end. Since it&#8217;s not a Microsoft tool, Chris Johnson didn&#8217;t mention it in his demo, but it was there. Very cool, and validation that SPServices should be a part of your development toolkit.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/10/03/microsoft-sharepoint-conference-2011-keynote-thoughts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When Would I Use a CQWP Over a DVWP?</title>
		<link>http://sympmarc.com/2011/09/29/when-would-i-use-a-cqwp-over-a-dvwp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=when-would-i-use-a-cqwp-over-a-dvwp</link>
		<comments>http://sympmarc.com/2011/09/29/when-would-i-use-a-cqwp-over-a-dvwp/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 01:45:09 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Query Web Part]]></category>
		<category><![CDATA[Data View Web Part]]></category>
		<category><![CDATA[SharePoint Designer]]></category>

		<guid isPermaLink="false">http://sympmarc.com/2011/09/29/when-would-i-use-a-cqwp-over-a-dvwp/</guid>
		<description><![CDATA[Anyone who follows this blog or hears me speak at conferences knows that I am a *huge* fan of the Data View Web Part (DVWP). A good friend sent me this quick question in an email today: Content query webpart vs data view wp? When would you use content query over data view? Here was &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/09/29/when-would-i-use-a-cqwp-over-a-dvwp/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Anyone who follows this blog or hears me speak at conferences knows that I am a *huge* fan of the Data View Web Part (DVWP).</p>
<p>A good friend sent me this quick question in an email today:</p>
<blockquote><p>Content query webpart vs data view wp?  When would you use content query over data view?</p></blockquote>
<p>Here was the quick response I typed on my iPhone while waiting for a seat for dinner:</p>
<blockquote><p>CQWPs are good if your users may need to reconfigure them over time because they can change the filtering and such in the Tool Pane. The drawback is that unless you get someone to write you new XSL to give you the styles you want, you&#8217;re stuck with what SharePoint gives you OOB. CQWPs also often deploy from environment to environment better because there&#8217;s more OOB to them.</p>
<p>DVWPs let you do basically anything you want by modifying them in SharePoint Designer. However, your users can&#8217;t do any reconfiguring on their own (unless they are SPD jocks). If DVWPs aren&#8217;t written intelligently, deployment *can* be a problem, but doesn&#8217;t have to be.</p></blockquote>
<p>Because I find the DVWP so much more flexible, I usually choose it over a CQWP, but i do implement CQWPs from time to time as well.</p>
<p>What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/09/29/when-would-i-use-a-cqwp-over-a-dvwp/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Displaying Multi-Select Column Values in CrossList DVWPs</title>
		<link>http://sympmarc.com/2011/09/20/displaying-multi-select-column-values-in-crosslist-dvwps/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=displaying-multi-select-column-values-in-crosslist-dvwps</link>
		<comments>http://sympmarc.com/2011/09/20/displaying-multi-select-column-values-in-crosslist-dvwps/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 00:51:16 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Crosslist]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[MultiSelect Columns]]></category>
		<category><![CDATA[SPServices]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14334</guid>
		<description><![CDATA[This is one of those things that I&#8217;m amazed I haven&#8217;t run into before. Perhaps I did in the past and wrote it off to my own lack of understanding. It turns out that this is a known, if rarely mentioned, limitation not only for Data View Web Parts (DVWPs) but also content Query Web &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/09/20/displaying-multi-select-column-values-in-crosslist-dvwps/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>This is one of those things that I&#8217;m amazed I haven&#8217;t run into before. Perhaps I did in the past and wrote it off to my own lack of understanding. It turns out that this is a known, if rarely mentioned, limitation not only for Data View Web Parts (DVWPs) but also content Query Web Parts (CQWPs).</p>
<p>You can easily reproduce this issue as follows:</p>
<ul>
<li>Create a new Custom List (or any type of list you choose)</li>
<li>Add a Person or Group column called Project Manager. Do not allow multiple values.</li>
<li>Add a new item to the list with whatever values you want</li>
<li>Create a page with a DVWP on it with your list as its DataSource</li>
<li>Display some columns from the list, including Project Manager</li>
<li>Add a filter so that you are sure you&#8217;ll only get the item(s) you&#8217;ve added to your list</li>
<li>Convert the DVWP to DataSourceMode=&#8221;CrossList&#8221;</li>
</ul>
<p>At this point, you should see the item(s) in your DVWP just as you would expect.</p>
<p>Now go back into the list settings and change the Project Manager column so that it allows multiple values. Next go back into your page with the DVWP and Refresh the data view. You should now see no items at all.</p>
<p>This simple test should prove that the issue is only the multiple value selection which essentially acts as a &#8220;filter&#8221; which you didn&#8217;t ask for. You can probably pretty easily think of reasons you&#8217;d want to display data like this. In my little example, you might have multiple Project Managers in Projects lists in sites across the Site Collection. If you wanted to show all of the projects rolled up somehow, you might well want to display the Project Manager(s).</p>
<p>Unfortunately, in my testing, this works exactly the same in both SharePoint 2007 and 2010.</p>
<p>Once I realized this was what was going on, I turned to the Interwebs and found some old posts from Waldek Mastykarz and others that mentioned the limitation. I could only find a few posts, but when the people who&#8217;ve done the posts are as smart as Waldek, I take their word for it – it&#8217;s not me this time, it&#8217;s a SharePoint limitation.</p>
<p>This is truly one of those &#8220;features&#8221; which feel an awfully lot like a &#8220;bug&#8221;.</p>
<p>I did find one trick to at least allow the items to be displayed, even though the multi-select column values will not be displayed. If we add Nullable=&#8221;TRUE&#8221; to the ViewFields settings in the CAML in the SelectCommand, then we do get the items to display, albeit with blank values for the multi-select columns.</p>
<p>This ends up looking something like this. Note that I have added the Nullable attribute to the Project Manager FieldRef.</p>
<pre class="brush: xml; title: ; notranslate">
&amp;lt;ViewFields&amp;gt;&amp;lt;FieldRef Name=&amp;quot;Title&amp;quot;/&amp;gt;&amp;lt;FieldRef Name=&amp;quot;Project_x0020_Manager&amp;quot; Nullable=&amp;quot;TRUE&amp;quot;/&amp;gt;&amp;lt;FieldRef Name=&amp;quot;ID&amp;quot;/&amp;gt;&amp;lt;FieldRef Name=&amp;quot;PermMask&amp;quot;/&amp;gt;&amp;lt;/ViewFields&amp;gt;
</pre>
<p>Now I can see all of the items, but the Project Manager is simply blank. A step forward, but not far enough.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/09/image.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/09/image_thumb.png" alt="image" width="280" height="92" border="0" /></a></p>
<p>Time for a kludgy fix, don&#8217;t you think? Well, I think I&#8217;ve got one for you. We can use script and my <a href="http://spservices.codeplex.com/" target="_blank">SPServices</a> jQuery library to &#8220;fill in&#8221; the values after the page loads. Since we can display the items, but not the values for the multi-select column, we can use the Lists Web Service and specifically GetListItems, to go and grab the items, parse out the multi-select column values, and place them into the DOM where they belong.</p>
<p>This isn&#8217;t the type of thing that I like to use jQuery for, really, as it really feels like a kludge. On the other hand, if it plugs a hole in SharePoint&#8217;s functionality, maybe that&#8217;s not so bad?</p>
<p>To make this work, you&#8217;ll want to create good &#8220;hooks&#8221; in the markup you render for the items in your DVWP or CQWP. I always try to do this, anyway, if I&#8217;m going to use script on the page so that my selectors can be very &#8220;tight&#8221; and efficient.</p>
<p>In the DVWP, I simply add three new attributes for the table detail cell (TD):</p>
<ul>
<li>id – This is a unique id for the TD element, which I create by concatenating the string &#8220;ProjectManager_&#8221; and the current item&#8217;s ID. I&#8217;ll use these ids to find the empty cells in the DOM.</li>
<li>ListId – This is the GUID for the list which contains the item. The @ListId &#8220;column&#8221; contains this value. (This &#8220;column&#8221; only exists after you switch to CrossList.)</li>
<li>ItemId – This is the ID for the item itself. We could parse it out from the id above, but it&#8217;s easier to store it as its own attribute.</li>
</ul>
<p>You may not realize that you can create any attributes that you want for HTML elements. They aren&#8217;t standards compliant, of course, but by adding your own attributes you can store any values you might need.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;td class=&quot;ms-vb&quot; id=&quot;ProjectManager_{@ID}&quot; ListId=&quot;{@ListId}&quot; ItemId=&quot;{@ID}&quot;&gt;
  &lt;xsl:value-of select=&quot;@Project_x0020_Manager&quot; disable-output-escaping=&quot;yes&quot;/&gt;
&lt;/td&gt;
</pre>
<p>Now that I have markup which makes it pretty easy to both select the right DOM elements as well as the data I need to make the Web Services call, I can use this script:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {

  var projectManager;

  // For each empty Project Manager column value...
  $(&quot;td[id^='ProjectManager']&quot;).each(function() {

    // ...call GetListItems to get that item
    $().SPServices({
      operation: &quot;GetListItems&quot;,
      listName: $(this).attr(&quot;ListId&quot;),
      CAMLQuery: &quot;&lt;Query&gt;&lt;Where&gt;&lt;Eq&gt;&lt;FieldRef Name='ID'/&gt;&lt;Value Type='Counter'&gt;&quot; + $(this).attr(&quot;ItemId&quot;) + &quot;&lt;/Value&gt;&lt;/Eq&gt;&lt;/Where&gt;&lt;/Query&gt;&quot;,
      async: false,
      completefunc: function(xData, Status) {

        // Parse out the Project Manager value
        projectManager = $(xData.responseXML).find(&quot;[nodeName='z:row']&quot;).attr(&quot;ows_Project_x0020_Manager&quot;);
      }
    });

    // Create the links and the column value into the DOM
    $(this).html(userLinks(projectManager));

  });

});

function userLinks(columnValue) {

  var userArray = columnValue.split(&quot;;#&quot;);
  var numUsers = userArray.length / 2;
  var out=&quot;&quot;;
  for(var i=0; i &lt; numUsers; i++) {
    out += &quot;&lt;a href='/_layouts/userdisp.aspx?ID=&quot; + userArray[i*2] + &quot;'&gt;&quot; + userArray[(i*2)+1] + &quot;&lt;/a&gt;&quot;;
    out += i &lt; numUsers ? &quot;&lt;br/&gt;&quot; : &quot;&quot;;
  }
  return out;
}
</pre>
<p>Using this simple bit of script fills in the values for the Project Manager by getting the right items and plugging the values into the DOM, like so.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/09/image1.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/09/image_thumb1.png" alt="image" width="287" height="96" border="0" /></a></p>
<p>I decided to simply show the names as links to the userdisp.aspx page, with each one on a new line. This link will show either the information for that user in the User Information List or their My Site profile, depending on how the environment is configured.</p>
<p>Depending on what your data looks like (how many items you are displaying, how many multi-select columns you have, etc.), there are obviously some inefficiencies in my example, because I&#8217;m calling GetListItems once per item. You could also batch your calls together per list to get all of the items from that list, or whatever made sense in your situation.</p>
<p>Finally, if using script like this gives you a bad feeling, then you could try using a third party Web Part like the <a href="http://store.bamboosolutions.com/p-32-list-rollup-web-part.aspx" target="_blank">Bamboo List Rollup Web Part</a> or just develop your own custom Web Part. But it seems that if you&#8217;ve gotten this far, you&#8217;re probably trying to stick to the Middle Tier, so the script approach might make sense.</p>
<p>References:</p>
<ul>
<li><a href="http://blog.mastykarz.nl/inconvenient-content-query-web-part-lookup-fields-multiple-values/">http://blog.mastykarz.nl/inconvenient-content-query-web-part-lookup-fields-multiple-values/</a> (Waldek Mastykarz)</li>
<li><a href="http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/117b7744-bb26-45d2-80f3-a03ed84e2103/">http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/117b7744-bb26-45d2-80f3-a03ed84e2103/</a> (MSDN Forums)</li>
<li><a href="http://vspug.com/michael/2007/06/28/implementing-spsitedataquery-learning-by-doing/">http://vspug.com/michael/2007/06/28/implementing-spsitedataquery-learning-by-doing/</a> &#8211; (Michael Hofer) &#8211; &#8220;However, up to my knowledge, it is not possible to show a Multivalue-Lookup in the ViewFields! Every attempt to do this will result in zero search results!&#8221;</li>
<li><a href="http://store.bamboosolutions.com/p-32-list-rollup-web-part.aspx">http://store.bamboosolutions.com/p-32-list-rollup-web-part.aspx</a> (Bamboo Solutions)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/09/20/displaying-multi-select-column-values-in-crosslist-dvwps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.791 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-01-27 13:10:37 -->
<!-- Compression = gzip -->
