<?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 &#187; 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>Tue, 21 Feb 2012 14:48:57 +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>HTML5 and SharePoint: What Do You Want to Know?</title>
		<link>http://sympmarc.com/2012/02/17/html5-and-sharepoint-what-do-you-want-to-know/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=html5-and-sharepoint-what-do-you-want-to-know</link>
		<comments>http://sympmarc.com/2012/02/17/html5-and-sharepoint-what-do-you-want-to-know/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 15:01:15 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14759</guid>
		<description><![CDATA[I&#8217;m planning to dig into HTML5 topics as a natural extension of my SPServices work. This post isn&#8217;t muck of a post, but more of a placeholder to collect ideas from you. I&#8217;m interested in what you&#8217;d like to know about HTML5, what you think you&#8217;d like to do with it connected to SharePoint, and what &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/17/html5-and-sharepoint-what-do-you-want-to-know/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m planning to dig into HTML5 topics as a natural extension of my <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a> work. This post isn&#8217;t muck of a post, but more of a placeholder to collect ideas from you. I&#8217;m interested in what you&#8217;d like to know about HTML5, what you think you&#8217;d like to do with it connected to SharePoint, and what concerns you have about it vis a vis things like SilverLight.</p>
<p>If you have questions, comments, or thoughts, please post them as comments.</p>
<p>Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/17/html5-and-sharepoint-what-do-you-want-to-know/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bug in SPServices v0.7.1 with UpdateListItems Fixed in v0.7.1a</title>
		<link>http://sympmarc.com/2012/02/15/bug-in-spservices-v0-7-1-with-updatelistitems-fixed-in-v0-7-1a/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bug-in-spservices-v0-7-1-with-updatelistitems-fixed-in-v0-7-1a</link>
		<comments>http://sympmarc.com/2012/02/15/bug-in-spservices-v0-7-1-with-updatelistitems-fixed-in-v0-7-1a/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 13:39:39 +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=14752</guid>
		<description><![CDATA[I&#8217;ll admit that I sometimes make mistakes. Here&#8217;s a clear one. When I made some changes to the way I initialize the default options in SPServices to help slim down the footprint, I missed testing a few things. Luckily, alert SPServices user mbroschat caught it very soon after I released v0.7.1 and I was able to &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/15/bug-in-spservices-v0-7-1-with-updatelistitems-fixed-in-v0-7-1a/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://spservices.codeplex.com/"><img class="alignright" title="logo.jpg" src="http://sympmarc.com/wp-content/uploads/2010/03/logo3.jpg" alt="" width="312" height="85" align="left" /></a><br />
I&#8217;ll admit that I sometimes make mistakes. Here&#8217;s a clear one. When I made some changes to the way I initialize the default options in <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices</a> to help slim down the footprint, I missed testing a few things. Luckily, alert SPServices user <a id="PostedByLink4" href="http://www.codeplex.com/site/users/view/mbroschat">mbroschat</a> caught it very soon after I released v0.7.1 and I was able to get a fix in place quickly.</p>
<p>If you see a script error like</p>
<blockquote><p>line 20<br />
char 11560<br />
&#8216;updates.length&#8217; is null or not an object code: 0</p></blockquote>
<p>then you are seeing the bug. I used to initialize most of the default values for the options to empty strings (&#8220;&#8221;), but I removed that wasteful code in v0.7.1. Unfortunately I missed this one effect in my testing.</p>
<p>If you&#8217;ve downloaded v0.7.1, then please return to the <a title="SPServices" href="http://spservices.codeplex.com" target="_blank">SPServices site</a> on Codeplex and download the replacement v0.7.1a. It contains a fix for this issue and no other changes.</p>
<p>Sorry for any issues.</p>
<div class="wp-caption aligncenter" style="width: 310px"><a href="http://commons.wikipedia.org/wiki/File:Green_bug.svg"><img class="zemanta-img-inserted zemanta-img-configured" title="SVG version of Bug silk.png by Avatar" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Green_bug.svg/300px-Green_bug.svg.png" alt="SVG version of Bug silk.png by Avatar" width="300" height="301" /></a><p class="wp-caption-text">Image via Wikipedia</p></div>
<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=ece0b584-4358-4bb3-a753-9c355716e29e" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/15/bug-in-spservices-v0-7-1-with-updatelistitems-fixed-in-v0-7-1a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SPServices Example: UserProfileService.GetUserProfileByName</title>
		<link>http://sympmarc.com/2012/02/15/spservices-example-userprofileservice-getuserprofilebyname/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spservices-example-userprofileservice-getuserprofilebyname</link>
		<comments>http://sympmarc.com/2012/02/15/spservices-example-userprofileservice-getuserprofilebyname/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 09:01:16 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[GetUserProfileByName]]></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=14742</guid>
		<description><![CDATA[People post working bits of code all the time on the SPServices site at Codeplex, and I don&#8217;t always do a good job of making them known to others. Usually I add good examples to the documentation pages, but I don&#8217;t always get to it. Sometimes by seeing what someone else has done, we get &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/15/spservices-example-userprofileservice-getuserprofilebyname/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>People post working bits of code all the time on the <a href="http://spservices.codeplex.com/" target="_blank">SPServices site at Codeplex</a>, and I don&#8217;t always do a good job of making them known to others. Usually I add good examples to the documentation pages, but I don&#8217;t always get to it. Sometimes by seeing what someone else has done, we get inklings of what we may be able to do ourselves. Of course, there&#8217;s also the willy-nilly copy-and-paste from the Interwebs approach, but I discourage using others&#8217; code (including mine) without understanding what it does.</p>
<p>All that said, <a href="http://www.codeplex.com/site/users/view/nileshc">nileshc</a> posted a nice little snippet the other day that I thought I&#8217;d share. SPServices has a function called <a href="http://spservices.codeplex.com/wikipage?title=$().SPServices.SPGetCurrentUser" target="_blank">SPGetCurrentUser</a> that returns, well, information about the current user. I wrote it early on based on a trick from Einar Otto Stangvik (<a href="http://twitter.com/einaros" target="_blank">@einaros</a>). It&#8217;s a good function because it works with any version or license of SharePoint (2007 and 2010), but it&#8217;s not exactly efficient or elegant. It basically loads the _layouts/userdisp.aspx page and screen scrapes the values from it. (Who knew that screen scraping would once again be cool, and even useful?)</p>
<p>If you&#8217;re using MOSS or SharePoint Server 2010, then you also have the User Profile Service at your disposal. <a href="http://www.codeplex.com/site/users/view/nileshc">nileshc</a>&#8216;s example takes advantage of this Web Service to grab information about the current user from the User Profile using <a title="GetUserProfileByName" href="http://spservices.codeplex.com/wikipage?title=GetUserProfileByName" target="_blank">GetUserProfileByName</a> instead, which gives you a lot more to work with. I&#8217;ve adapted nileshc&#8217;s script slightly to make the call to SPGetCurrentUser if the logon isn&#8217;t currently known.</p>
<pre class="brush: jscript; title: ; notranslate">
function get_user_profile_by_login(login) {

  var user = {};

  var params = {
    operation: 'GetUserProfileByName',
    async: false,
    completefunc: function (xData, Status) {
      $(xData.responseXML).SPFilterNode(&quot;PropertyData&quot;).each(function() {
        user[$(this).find(&quot;Name&quot;).text()] = $(this).find(&quot;Value&quot;).text();
      }); // end each

      // Easy names
      user.login = user.AccountName;
      user.full_name = user.PreferredName;
      user.email = user.WorkEmail;

    } // end completefunc
  };

  if (login != null) {
    params.accountName = login;
  } else {
    params.accountName = $().SPServices.SPGetCurrentUser({
      fieldName: &quot;Name&quot;
    });
  }

  $().SPServices(params);

  return user;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/15/spservices-example-userprofileservice-getuserprofilebyname/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cleaning Up Old VMWare Workstation Snapshots</title>
		<link>http://sympmarc.com/2012/02/14/cleaning-up-old-vmware-workstation-snapshots/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cleaning-up-old-vmware-workstation-snapshots</link>
		<comments>http://sympmarc.com/2012/02/14/cleaning-up-old-vmware-workstation-snapshots/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 09:29:22 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[virtual machine]]></category>
		<category><![CDATA[VMWare Workstation]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14731</guid>
		<description><![CDATA[I&#8217;m a big fan of VMWare Workstation, as it allows me to have virtual machines which represent all sorts of machine states. Of course, if you&#8217;re reading this blog, you probably know all about VMs and why they are useful. I&#8217;ve noticed over time that my blazing fast SSDs seemed to just get more and &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/14/cleaning-up-old-vmware-workstation-snapshots/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vmware.com/products/workstation/overview.html"><img class="alignright" style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; display: block; background-image: none;" title="VMWare Workstation" src="http://sympmarc.com/wp-content/uploads/2012/02/image_thumb4.png" alt="VMWare Workstation" width="491" height="238" border="0" /></a>I&#8217;m a big fan of <a href="http://www.vmware.com/products/workstation/overview.html" target="_blank">VMWare Workstation</a>, as it allows me to have virtual machines which represent all sorts of machine states. Of course, if you&#8217;re reading this blog, you probably know all about VMs and why they are useful.</p>
<p>I&#8217;ve noticed over time that my blazing fast SSDs seemed to just get more and more full, and way beyond the level I&#8217;d expect with that I&#8217;m doing. In many cases I&#8217;ve deleted old snapshots of VMs just to free up more space. It wasn&#8217;t what I wanted to do (I wanted to keep the snapshots so that I could choose to go back to them) but it was a fast way to get a large amount of space.</p>
<p>Sometimes I got a message that said something like &#8220;Not enough space available to clean up deleted files. Free up 6.2Gb more space.&#8221; I didn&#8217;t just ignore those messages, but I didn&#8217;t pay much attention, either. I assumed that the old files would get cleaned up at some point.</p>
<p>It turns out I was wrong. I had a whole bunch of old disk files I didn&#8217;t need from snapshots I&#8217;d already deleted in the Snapshot Manager.</p>
<p>After some poking around on the Interwebs, I found some ideas about how to clean up that space. First, I copied some very large files (not VMs) off onto one of my backup drives, which freed up about 20Gb on my C: drive. Then I opened one of my big VMs without starting it and went to the Snapshot Manager. I created a new snapshot and then immediately deleted it. During that cleanup, VMWare cleaned up all of the old, unneeded files as well.</p>
<p>Now I&#8217;m back to having 20 or 30Gb free on my C: drive all the time. Oh, I&#8217;ll fill it up soon enough, but at least it&#8217;ll be with something I actually want to have there.</p>
<p><a href="http://www.vmware.com/products/converter/"><img class="alignleft size-full wp-image-14739" title="VMWare vCenter Converter" src="http://sympmarc.com/wp-content/uploads/2012/02/2-13-2012-16-57-38.png" alt="VMWare vCenter Converter" width="411" height="82" /></a>Another useful tool you can use with VMWare is the <a href="http://www.vmware.com/products/converter/">vCenter Converter</a>. Using this tool, you can &#8220;convert&#8221; a VM from one location on your hard drive to another. Any uneccessary files are left behind and you can safely delete them. (Do yourself a favor and keep a copy for a while until you are sure all is well.)</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/14/cleaning-up-old-vmware-workstation-snapshots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Library for SharePoint Web Services (SPServices) v0.7.1 Released</title>
		<link>http://sympmarc.com/2012/02/13/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jquery-library-for-sharepoint-web-services-spservices-v0-7-1-released</link>
		<comments>http://sympmarc.com/2012/02/13/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-released/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 18:31:48 +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=14724</guid>
		<description><![CDATA[Today I&#8217;m releasing SPServices v0.7.1. If you are using an earlier version of SPServices, I strongly suggest that you upgrade to this version. Not only does it have some cool new stuff in it, I&#8217;ve managed to squeeze some considerable performance improvments out of some of the most used functions, like SPCascadeDropdowns and SPDisplayRelatedInfo. In my &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/13/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-released/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://spservices.codeplex.com/"><img class="alignright" title="logo.jpg" src="http://sympmarc.com/wp-content/uploads/2010/03/logo3.jpg" alt="" width="312" height="85" align="left" /></a>Today I&#8217;m releasing <a title="SPServices v0.7.1" href="http://spservices.codeplex.com/releases/view/77486" target="_blank">SPServices v0.7.1</a>. If you are using an earlier version of SPServices, I <strong>strongly</strong> suggest that you upgrade to this version. Not only does it have some cool new stuff in it, I&#8217;ve managed to squeeze some considerable performance improvments out of some of the most used functions, like SPCascadeDropdowns and SPDisplayRelatedInfo. In my test environments, I see a noticeable improvement in both function.</p>
<p>While v0.7.1 is only a point release and follows its sibling v0.7.0 quickly, it actually contains far more changes.</p>
<p>One of the cool new things is a new function called <a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPXmlToJson">$().SPXmlToJson</a>. I&#8217;ve gotten quite a few requests over the years for SPServices to output JSON rather than just XML. I&#8217;ve resisted to some degree because it wasn&#8217;t entirely clear how many people might use it. As jQuery has become a more and more common part of the SharePoint development toolset, it seemed to finally make sense to add it in. Keep in mind that I can&#8217;t ask SharePoint for JSON from the SOAP Web Services; they return XML. What SPXmlToJson does is take that XML output and convert it into JSON. Of course that introduces some overhead, so use it wisely. This first implementation is firmly aimed at GetListItems, but it will also work with other &#8220;flat&#8221; XML. As folks express a need for enhancements to the function, I&#8217;ll try to work on them.</p>
<p>Another nice enhancement is to allow you to request that SPCascadeDropdowns and SPDisplayRelatedInfo perform their logic using the item IDs rather than the item values. The latter is more the approach that SharePoint uses in many cases, but the former is a far more robust and database-like approach.</p>
<p>I&#8217;ve also added in some of the missing Web Service operations that people have asked for, including Lists.ApplyContentTypeToList, Lists.CreateContentType, Lists.DeleteContentType, Lists.GetListItemChanges, Lists.UndoCheckOut, Lists.UpdateContentType, SiteData.GetWeb, SiteData.GetSite, and SiteData.GetSiteUrl.</p>
<p>There are numerous other performance improvements and some edge condition bugs I&#8217;ve managed to fix.</p>
<p>I&#8217;ll be updating the documentation over the next day or so. Keep in mind that the documentation always represents the capabilities of the <strong>current</strong> version.</p>
<p>Here are the details on some of what is included in this release; see all items in the Issue Tracker <a href="http://spservices.codeplex.com/workitem/list/advanced?keyword=&amp;status=Open%2b%28not%2bclosed%29&amp;type=All&amp;priority=All&amp;release=SPServices%2b0.7.1&amp;assignedTo=All&amp;component=All&amp;sortField=LastUpdatedDate&amp;sortDirection=Descending&amp;size=25" target="_blank">here</a>.</p>
<h3>New Functionality</h3>
<table>
<tbody>
<tr>
<th>Alpha</th>
<th>Issue Tracker Item</th>
<th>Function</th>
<th>Operation</th>
<th>Description</th>
</tr>
<tr>
<td>ALPHA3-6</td>
<td><a href="http://spservices.codeplex.com/workitem/9755">9755</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPXmlToJson">$().SPXmlToJson</a></td>
<td><em>NA</em></td>
<td>Convert XML data to JSON</td>
</tr>
<tr>
<td>ALPHA11</td>
<td><a href="http://spservices.codeplex.com/workitem/9751">9751</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPDisplayRelatedInfo">$().SPServices.SPDisplayRelatedInfo</a></td>
<td><em>NA</em></td>
<td>SPDisplayRelatedInfo Matching on ID Instead of Text</td>
</tr>
<tr>
<td>ALPHA11</td>
<td><a href="http://spservices.codeplex.com/workitem/633">633</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td><em>NA</em></td>
<td>SPCascadeDropdowns() &#8211; Using IDs on Query to populate child column rather than values</td>
</tr>
</tbody>
</table>
<p>ALPHA13 &#8211; Streamlined SPXmlToJson. This is RC1 for the new function.</p>
<h3>New Operations</h3>
<table>
<tbody>
<tr>
<th>Alpha</th>
<th>Web Service</th>
<th>Operation</th>
<th>Options</th>
<th>MSDN Documentation</th>
<th>Issue Tracker Item</th>
</tr>
<tr>
<td>ALPHA1</td>
<td>Lists</td>
<td>GetVersionCollection</td>
<td>[WebURL], strlistID, strlistItemID, strFieldName</td>
<td><a href="http://msdn.microsoft.com/en-us/library/lists.lists.getversioncollection(v=office.12).aspx">Lists.GetVersionCollection Method</a></td>
<td><a href="http://spservices.codeplex.com/workitem/8322">8322</a></td>
</tr>
<tr>
<td>ALPHA2</td>
<td>SiteData</td>
<td>GetSite</td>
<td>[WebURL]</td>
<td><a href="http://msdn.microsoft.com/en-us/library/ms773417(v=office.12).aspx">SiteData.GetSite Method</a></td>
<td><a href="http://spservices.codeplex.com/workitem/9718">9718</a></td>
</tr>
<tr>
<td>ALPHA2</td>
<td>SiteData</td>
<td>GetSiteUrl</td>
<td>Url</td>
<td><a href="http://msdn.microsoft.com/en-us/library/ms774895(v=office.12).aspx">SiteData.GetSiteUrl Method</a></td>
<td><a href="http://spservices.codeplex.com/workitem/9718">9718</a></td>
</tr>
</tbody>
</table>
<p>ALPHA12 Lists.ApplyContentTypeToList, Lists.CreateContentType, Lists.DeleteContentType, Lists.GetListItemChanges, Lists.UndoCheckOut, Lists.UpdateContentType, SiteData.GetWeb</p>
<h3>Bug Fixes and Efficiency</h3>
<table>
<tbody>
<tr>
<th>Alpha</th>
<th>Issue Tracker Item</th>
<th>Function</th>
<th>Description</th>
</tr>
<tr>
<td>ALPHA2</td>
<td><a href="http://spservices.codeplex.com/workitem/9754">9754</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices">$().SPServices</a></td>
<td>New Internal Function: siteDataFixSOAPEnvelope</td>
</tr>
<tr>
<td>ALPHA2</td>
<td><a href="http://spservices.codeplex.com/workitem/9744">9744</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPComplexToSimpleDropdown">$().SPServices.SPComplexToSimpleDropdown</a></td>
<td>Bug in SPComplexToSimpleDropdown</td>
</tr>
<tr>
<td>ALPHA5</td>
<td><a href="http://spservices.codeplex.com/workitem/7705">7705</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPUpdateMultipleListItems">$().SPServices.SPUpdateMultipleListItems</a></td>
<td>SPUpdateMultipleListItems &#8211; Add completefunc</td>
</tr>
<tr>
<td>ALPHA6</td>
<td><a href="http://spservices.codeplex.com/workitem/9785">9785</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPFilterDropdown">$().SPServices.SPFilterDropdown</a></td>
<td>Extend SPFilterDropdown with CAMLQueryOptions or RecursiveAll</td>
</tr>
<tr>
<td>ALPHA7</td>
<td><a href="http://spservices.codeplex.com/workitem/9793">9793</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td>SPCascadeDropdowns Performance Tweaks</td>
</tr>
<tr>
<td>ALPHA7</td>
<td><a href="http://spservices.codeplex.com/workitem/9794">9794</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPDisplayRelatedInfo">$().SPServices.SPDisplayRelatedInfo</a></td>
<td>SPDisplayRelatedInfo Performance Tweaks</td>
</tr>
<tr>
<td>ALPHA8</td>
<td><a href="http://spservices.codeplex.com/workitem/7876">7876</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td>SPCascadeDropdowns &#8211; 1 parent; multiple children</td>
</tr>
<tr>
<td>ALPHA9</td>
<td><a href="http://spservices.codeplex.com/workitem/9810">9810</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td>SPCascadeDropdowns Shouldn&#8217;t Show Null Values</td>
</tr>
<tr>
<td>ALPHA9</td>
<td><a href="http://spservices.codeplex.com/workitem/9811">9811</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPComplexToSimpleDropdown">$().SPServices.SPComplexToSimpleDropdown</a></td>
<td>completefunc not called in SPComplexToSimpleDropdown</td>
</tr>
<tr>
<td>ALPHA10</td>
<td><a href="http://spservices.codeplex.com/workitem/9789">9789</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPComplexToSimpleDropdown">$().SPServices.SPComplexToSimpleDropdown</a></td>
<td>SPComplexToSimpleDropdown when column is not required</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/13/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trials and Tribulations: Migrating My Demos Site to Office365 &#8211; Part Two</title>
		<link>http://sympmarc.com/2012/02/06/trials-and-tribulations-migrating-my-demos-site-to-office365-part-two/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trials-and-tribulations-migrating-my-demos-site-to-office365-part-two</link>
		<comments>http://sympmarc.com/2012/02/06/trials-and-tribulations-migrating-my-demos-site-to-office365-part-two/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 17:37:40 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Chris Beckett]]></category>
		<category><![CDATA[Microsoft Certified Professional]]></category>
		<category><![CDATA[Middle Tier]]></category>
		<category><![CDATA[Office365]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint Online]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14711</guid>
		<description><![CDATA[Well, it took me a while, but I solve this problem. In my first post about it, I explained how I was having trouble figuring out what features installed in my local VM were causing the problems instantiating my demo site in Office365 &#8211; SharePoint Online. I got stuck with the feature that has the &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/06/trials-and-tribulations-migrating-my-demos-site-to-office365-part-two/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://office365.com"><img class="alignright size-full wp-image-14717" title="Office365" src="http://sympmarc.com/wp-content/uploads/2012/02/2-6-2012-12-26-40.png" alt="Office365" width="198" height="62" /></a>Well, it took me a while, but I solve this problem. In my <a title="Trials and Tribulations: Migrating My Demos Site to Office365" href="http://sympmarc.com/2012/01/10/trials-and-tribulations-migrating-my-demos-site-to-office365/" target="_blank">first post</a> about it, I explained how I was having trouble figuring out what features installed in my local VM were causing the problems instantiating my demo site in Office365 &#8211; SharePoint Online.</p>
<p>I got stuck with the feature that has the GUID af6d9aec-7c38-4dda-997f-cc1ddbb87c92. When I wrote the post and tweeted about it, Chris Beckett (<a title="@SharePointBits" href="http://twitter.com/sharepointbits" target="_blank">@sharepointbits</a>) did some digging to find out what the feature was all about. It seemed that a forced deactivation was probably the right next step. (Check the comments on my original post for the details from Chris.) Then I got busy and didn&#8217;t get to it again until today.</p>
<p>Since I&#8217;m speaking at the first <a title="Office365 Saturday Redmond" href="http://o365redmond.sharepoint.com" target="_blank">Office365 Saturday out in Redmond</a> in a few weeks, I really needed to get my demos copied up into my Office365 site. What sort of talk would it be if I just waved my hands and said &#8220;Imagine that this demos is taking place in Office365?&#8221;</p>
<p>Today I finally got back to it. The first thing I did was look for some hints about how to work with features using PowerShell. I&#8217;ve done a little bit with PowerShell on and off, but not frequently enough to remember all the commands.</p>
<p>I found the perfect post from Corey Roth (<a title="@coreyroth" href="http://twitter.com/coreyroth" target="_blank">@coreyroth</a>) called <a title="Activating and Deactivating Features with PowerShell in SharePoint 2010" href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2011/01/04/activating-and-deactivating-features-with-powershell-in-sharepoint-2010.aspx" target="_blank">Activating and Deactivating Features with PowerShell in SharePoint 2010</a>. It had exactly the right examples to help me and it was written at exactly the right level (PowerShell newbie). Yeah, I know I should be loving PowerShell and doing all sorts of things with it every waking moment, but the way I work with SharePoint I rarely need it.</p>
<p>First, I wanted to see what the feature actually was, just to verify what Chris told me and to make sure that I wouldn&#8217;t be shooting myself in the foot by deactivating it. Easy as pie with Corey&#8217;s example:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/02/2-6-2012-12-02-24.png"><img class="aligncenter size-full wp-image-14714" title="What is af6d9aec-7c38-4dda-997f-cc1ddbb87c92 " src="http://sympmarc.com/wp-content/uploads/2012/02/2-6-2012-12-02-24.png" alt="What is af6d9aec-7c38-4dda-997f-cc1ddbb87c92 " width="641" height="76" /></a></p>
<p>It was indeed something to do with Web Analytics Custom Reports, something which I don&#8217;t care about at all in my VM, so I was fine with getting rid of it.</p>
<p>On to the next PowerShell command to deactivate the feature:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/02/2-6-2012-11-28-15.png"><img class="aligncenter size-full wp-image-14713" title="Deactivating af6d9aec-7c38-4dda-997f-cc1ddbb87c92 " src="http://sympmarc.com/wp-content/uploads/2012/02/2-6-2012-11-28-15.png" alt="Deactivating af6d9aec-7c38-4dda-997f-cc1ddbb87c92 " width="641" height="112" /></a></p>
<p>That was pretty painless. I saved the site I wanted to move to Office365 as a template again and uploaded it to the Office365 Solution Gallery.</p>
<p>This time when I went to create a new site, it worked! Yippee!</p>
<p>I&#8217;m sticking with my original points on this, though. One shouldn&#8217;t need a <a title="Microsoft Certified Master on Microsoft SharePoint Server 2010" href="http://www.microsoft.com/learning/en/us/certification/master-sharepoint.aspx" target="_blank">Microsoft Certified Master on Microsoft SharePoint Server 2010</a>&#8216;s help (that would be Chris) to move a site from one environment to another. Clearly, this isn&#8217;t my forte in the SharePoint space, but I still say that the error messages should be clearer and also suggest a way to a resolution. And I still think that poor Sandie, my intrepid SharePoint administrator, would be stuck in this case unless she is very good at what she does. It shouldn&#8217;t be so opaque and difficult.</p>
<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="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=b7e932dd-5855-4874-a2cf-d1c4e33552c1" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/06/trials-and-tribulations-migrating-my-demos-site-to-office365-part-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Library for SharePoint Web Services (SPServices) v0.7.1 Beta 1 Available</title>
		<link>http://sympmarc.com/2012/02/06/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-beta-1-available/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jquery-library-for-sharepoint-web-services-spservices-v0-7-1-beta-1-available</link>
		<comments>http://sympmarc.com/2012/02/06/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-beta-1-available/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 14:41: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[SPServices]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14706</guid>
		<description><![CDATA[Today I&#8217;ve posted the first beta for SPServices v0.7.1. While it is only a point release, it contains more significant changes than its sibling, v0.7.0, which was mainly focused on publishing a version which would work with jQuery 1.7. If you are willing and able, I&#8217;d appreciate you testing this beta in any places where you &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/06/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-beta-1-available/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://spservices.codeplex.com/"><img class="alignright" title="logo.jpg" src="http://sympmarc.com/wp-content/uploads/2010/03/logo3.jpg" alt="" width="312" height="85" align="left" /></a>Today I&#8217;ve posted the first beta for <a title="SPServices v0.7.1" href="http://spservices.codeplex.com/releases/view/77486" target="_blank">SPServices v0.7.1</a>. While it is only a point release, it contains more significant changes than its sibling, v0.7.0, which was mainly focused on publishing a version which would work with jQuery 1.7.</p>
<p>If you are willing and able, I&#8217;d appreciate you testing this beta in any places where you are currently using earlier versions of SPServices so that you can help identify any regressions. I&#8217;ve made some significant changes to the core capabilities of SPServices which will make it smaller and more efficient.</p>
<p>Here are the full details on what is included in this release:</p>
<p>See all items in the Issue Tracker <a href="http://spservices.codeplex.com/workitem/list/advanced?keyword=&amp;status=Open%2b%28not%2bclosed%29&amp;type=All&amp;priority=All&amp;release=SPServices%2b0.7.1&amp;assignedTo=All&amp;component=All&amp;sortField=LastUpdatedDate&amp;sortDirection=Descending&amp;size=25" target="_blank">here</a>.</p>
<h3>New Functionality</h3>
<table>
<tbody>
<tr>
<th>Alpha</th>
<th>Issue Tracker Item</th>
<th>Function</th>
<th>Operation</th>
<th>Description</th>
</tr>
<tr>
<td>ALPHA3-6</td>
<td><a href="http://spservices.codeplex.com/workitem/9755">9755</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPXmlToJson">$().SPXmlToJson</a></td>
<td><em>NA</em></td>
<td>Convert XML data to JSON</td>
</tr>
<tr>
<td>ALPHA11</td>
<td><a href="http://spservices.codeplex.com/workitem/9751">9751</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPDisplayRelatedInfo">$().SPServices.SPDisplayRelatedInfo</a></td>
<td><em>NA</em></td>
<td>SPDisplayRelatedInfo Matching on ID Instead of Text</td>
</tr>
<tr>
<td>ALPHA11</td>
<td><a href="http://spservices.codeplex.com/workitem/633">633</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td><em>NA</em></td>
<td>SPCascadeDropdowns() &#8211; Using IDs on Query to populate child column rather than values</td>
</tr>
</tbody>
</table>
<p>ALPHA13 &#8211; Streamlined SPXmlToJson. This is RC1 for the new function.</p>
<h3>New Operations</h3>
<table>
<tbody>
<tr>
<th>Alpha</th>
<th>Web Service</th>
<th>Operation</th>
<th>Options</th>
<th>MSDN Documentation</th>
<th>Issue Tracker Item</th>
</tr>
<tr>
<td>ALPHA1</td>
<td>Lists</td>
<td>GetVersionCollection</td>
<td>[WebURL], strlistID, strlistItemID, strFieldName</td>
<td><a href="http://msdn.microsoft.com/en-us/library/lists.lists.getversioncollection(v=office.12).aspx">Lists.GetVersionCollection Method</a></td>
<td><a href="http://spservices.codeplex.com/workitem/8322">8322</a></td>
</tr>
<tr>
<td>ALPHA2</td>
<td>SiteData</td>
<td>GetSite</td>
<td>[WebURL]</td>
<td><a href="http://msdn.microsoft.com/en-us/library/ms773417(v=office.12).aspx">SiteData.GetSite Method</a></td>
<td><a href="http://spservices.codeplex.com/workitem/9718">9718</a></td>
</tr>
<tr>
<td>ALPHA2</td>
<td>SiteData</td>
<td>GetSiteUrl</td>
<td>Url</td>
<td><a href="http://msdn.microsoft.com/en-us/library/ms774895(v=office.12).aspx">SiteData.GetSiteUrl Method</a></td>
<td><a href="http://spservices.codeplex.com/workitem/9718">9718</a></td>
</tr>
</tbody>
</table>
<p>ALPHA12 Lists.ApplyContentTypeToList, Lists.CreateContentType, Lists.DeleteContentType, Lists.GetListItemChanges, Lists.UndoCheckOut, Lists.UpdateContentType, SiteData.GetWeb</p>
<h3>Bug Fixes and Efficiency</h3>
<table>
<tbody>
<tr>
<th>Alpha</th>
<th>Issue Tracker Item</th>
<th>Function</th>
<th>Description</th>
</tr>
<tr>
<td>ALPHA2</td>
<td><a href="http://spservices.codeplex.com/workitem/9754">9754</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices">$().SPServices</a></td>
<td>New Internal Function: siteDataFixSOAPEnvelope</td>
</tr>
<tr>
<td>ALPHA2</td>
<td><a href="http://spservices.codeplex.com/workitem/9744">9744</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPComplexToSimpleDropdown">$().SPServices.SPComplexToSimpleDropdown</a></td>
<td>Bug in SPComplexToSimpleDropdown</td>
</tr>
<tr>
<td>ALPHA5</td>
<td><a href="http://spservices.codeplex.com/workitem/7705">7705</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPUpdateMultipleListItems">$().SPServices.SPUpdateMultipleListItems</a></td>
<td>SPUpdateMultipleListItems &#8211; Add completefunc</td>
</tr>
<tr>
<td>ALPHA6</td>
<td><a href="http://spservices.codeplex.com/workitem/9785">9785</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPFilterDropdown">$().SPServices.SPFilterDropdown</a></td>
<td>Extend SPFilterDropdown with CAMLQueryOptions or RecursiveAll</td>
</tr>
<tr>
<td>ALPHA7</td>
<td><a href="http://spservices.codeplex.com/workitem/9793">9793</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td>SPCascadeDropdowns Performance Tweaks</td>
</tr>
<tr>
<td>ALPHA7</td>
<td><a href="http://spservices.codeplex.com/workitem/9794">9794</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPDisplayRelatedInfo">$().SPServices.SPDisplayRelatedInfo</a></td>
<td>SPDisplayRelatedInfo Performance Tweaks</td>
</tr>
<tr>
<td>ALPHA8</td>
<td><a href="http://spservices.codeplex.com/workitem/7876">7876</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td>SPCascadeDropdowns &#8211; 1 parent; multiple children</td>
</tr>
<tr>
<td>ALPHA9</td>
<td><a href="http://spservices.codeplex.com/workitem/9810">9810</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPCascadeDropdowns">$().SPServices.SPCascadeDropdowns</a></td>
<td>SPCascadeDropdowns Shouldn&#8217;t Show Null Values</td>
</tr>
<tr>
<td>ALPHA9</td>
<td><a href="http://spservices.codeplex.com/workitem/9811">9811</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPComplexToSimpleDropdown">$().SPServices.SPComplexToSimpleDropdown</a></td>
<td>completefunc not called in SPComplexToSimpleDropdown</td>
</tr>
<tr>
<td>ALPHA10</td>
<td><a href="http://spservices.codeplex.com/workitem/9789">9789</a></td>
<td><a href="http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPComplexToSimpleDropdown">$().SPServices.SPComplexToSimpleDropdown</a></td>
<td>SPComplexToSimpleDropdown when column is not required</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/06/jquery-library-for-sharepoint-web-services-spservices-v0-7-1-beta-1-available/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New Book: SharePoint at Work &#8211; Tricks, Traps, and Bold Opinions: The Best of EndUserSharePoint.com</title>
		<link>http://sympmarc.com/2012/02/02/new-book-sharepoint-at-work-tricks-traps-and-bold-opinions-the-best-of-endusersharepoint-com/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-book-sharepoint-at-work-tricks-traps-and-bold-opinions-the-best-of-endusersharepoint-com</link>
		<comments>http://sympmarc.com/2012/02/02/new-book-sharepoint-at-work-tricks-traps-and-bold-opinions-the-best-of-endusersharepoint-com/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 13:42:08 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[EndUserSharePoint.com]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14677</guid>
		<description><![CDATA[It was a great honor that Mark Miller asked me to contribute to his new book called SharePoint at Work &#8211; Tricks, Traps, and Bold Opinions: The Best of EndUserSharePoint.com. The book is going to press now and the goal is to have copies available at SPTechCon in San Francisco later this month. (Sadly, I&#8217;m &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/02/new-book-sharepoint-at-work-tricks-traps-and-bold-opinions-the-best-of-endusersharepoint-com/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://sympmarc.com/wp-content/uploads/2012/02/image2.png"><img class="alignright" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2012/02/image_thumb2.png" alt="image" width="404" height="528" align="right" border="0" /></a>It was a great honor that Mark Miller asked me to contribute to his new book called <strong>SharePoint at Work &#8211; Tricks, Traps, and Bold Opinions: The Best of EndUserSharePoint.com.</strong> The book is going to press now and the goal is to have copies available at <a title="SPTechCon" href="http://sptechcon.com" target="_blank">SPTechCon</a> in San Francisco later this month. (Sadly, I&#8217;m missing SPTechCon this time around – it&#8217;s one of my favorite SharePoint events, run by the great folks at <a title="BZ Media" href="http://www.bzmedia.com/" target="_blank">BZ Media</a>.) I got these cover shots from the wonderful Natasha Felshman (<a title="@TeamEUSP" href="http://twitter.com/TeamEUSP" target="_blank">@TeamEUSP</a>) last night and wanted to share them.</p>
<p>Here&#8217;s the blurb from Amazon.com about the book:</p>
<blockquote><p>If you’re a SharePoint site manager or administrator, you finally have a handy single-source reference to help you through the tough SharePoint learning curve. Written by Mark Miller and his stable of well-known contributors at EndUserSharePoint.com, this book contains the most helpful articles from this popular site—fully updated for SharePoint 2010.</p>
<p>Each chapter focuses on core issues that vex SharePoint administrators when it comes to setting up and managing sites. You’ll learn tried-and-true solutions for creating charts and graphs, joining views in SharePoint lists, building a SharePoint Scripting Resource Center, along with many other topics. Join the tens of thousands of SharePoint site administrators who have found solid advice from Mark Miller and his crew.</p>
<p>Table of Contents:</p>
<ul>
<li>Chapter 1: The SharePoint Maturity Model by Sadalit Van Buren</li>
<li>Chapter 2: Empower the Power User by Kerri Abraham</li>
<li>Chapter 3: jQuery to the Rescue by Jim Bob Howard</li>
<li>Chapter 4: Unlocking the Mysteries of the SharePoint Data View Web Part XSL Tags by Marc D. Anderson</li>
<li>Chapter 5: Hyperlinks in the Data View Web Part by Laura Rogers</li>
<li>Chapter 6: Building a Quote of the Day Web Part in SharePoint 2010 by Waldek Mastykarz</li>
<li>Chapter 7: SPJS Charts for SharePoint by Alexander Bautz</li>
<li>Chapter 8: Taming the Elusive Calculated Column – Logic Functions by Dessie Lunsford</li>
<li>Chapter 9: Creating Document Libraries with Mixed Content Sources by Eric Alexander</li>
<li>Chapter 10: SharePoint 2010 Tab Page by Peter Allen</li>
<li>Chapter 11: A Global Navigation Solution across Site Collections by Peter Allen</li>
</ul>
</blockquote>
<p>I&#8217;m certainly looking forward to reading the other chapters, as I haven&#8217;t gotten the chance yet. These folks are all great at what they do and I expect that every chapter is going to be useful in many ways. Each of us took one of our favorite or most popular articles from <a title="EndUserSharePoint.com" href="https://www.nothingbutsharepoint.com/sites/eusp" target="_blank">EndUserSharePoint.com</a> and expanded upon it or added to it. It was a bit of a humbling experience for me, frankly. when I look back at some of my older writing, I tend to wince a bit, as some of it is not very good. (My hope is that I&#8217;m less not-very-good these days, at least.)</p>
<p>The book is <a title="Amazon Link" href="http://www.amazon.com/SharePoint-2010-Work-Tricks-Opinions/dp/1449321003/" target="_blank">available</a> for pre-order at Amazon.com for 45% off!</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/02/image3.png"><img class="aligncenter" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-bottom: 0px; border-width: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2012/02/image_thumb3.png" alt="image" width="377" height="504" border="0" /></a></p>
<p style="text-align: left;">Neigh.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/02/new-book-sharepoint-at-work-tricks-traps-and-bold-opinions-the-best-of-endusersharepoint-com/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Error: &#8220;SharePoint Foundation cannot deserialize the Web Part&#8221;</title>
		<link>http://sympmarc.com/2012/02/01/error-sharepoint-foundation-cannot-deserialize-the-web-part/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=error-sharepoint-foundation-cannot-deserialize-the-web-part</link>
		<comments>http://sympmarc.com/2012/02/01/error-sharepoint-foundation-cannot-deserialize-the-web-part/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 20:11:44 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[deserialize]]></category>
		<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14663</guid>
		<description><![CDATA[Here&#8217;s another one of those &#8220;Why didn&#8217;t I ever figure this out before?&#8221; things. Many times when I&#8217;m editing pages in SharePoint Designer and everything is going along swimmingly, suddenly I hear the Jaws theme and I get an error like this: One of the properties of the Web Part has an incorrect format. Microsoft &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2012/02/01/error-sharepoint-foundation-cannot-deserialize-the-web-part/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="mceTemp"></div>
<p>Here&#8217;s another one of those &#8220;Why didn&#8217;t I ever figure this out before?&#8221; things. Many times when I&#8217;m editing pages in SharePoint Designer and everything is going along swimmingly, suddenly I hear the <a href="http://www.marthas-vineyard-vacation-tips.com/jaws-theme-song.html" target="_blank">Jaws theme</a> and I get an error like this:</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/02/SNAGHTML3b45b3c.png"><img class="aligncenter" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-bottom: 0px; border-width: 0px;" title="SNAGHTML3b45b3c" src="http://sympmarc.com/wp-content/uploads/2012/02/SNAGHTML3b45b3c_thumb.png" alt="SNAGHTML3b45b3c" width="580" height="261" border="0" /></a></p>
<blockquote><p>One of the properties of the Web Part has an incorrect format. Microsoft<br />
SharePoint Foundation cannot deserialize the Web Part. Check the format of the<br />
properties and try again.</p></blockquote>
<p>Of course, the error message is as clear as mud. What happens is that SharePoint Designer messes with the properties of a Web Part, making them unintelligible to SharePoint on the server.</p>
<p style="text-align: left;">Here&#8217;s what I mean. If you look at the code below, you&#8217;ll see that the values for the properties are not on the same line as the tags which enclose them.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/02/image.png"><img class="aligncenter" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0pt none;" title="image" src="http://sympmarc.com/wp-content/uploads/2012/02/image_thumb.png" alt="image" width="1012" height="201" border="0" /></a></p>
<p>In this closer view, I&#8217;ve added arrows pointing to two instances of the issue, though every line from 133-141 demonstrates the problem.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2012/02/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2012/02/image_thumb1.png" alt="image" width="178" height="178" border="0" /></a></p>
<p>The fix is amazingly simple, but a little tedious. All you need to do is fix the code so that the tags enclose the values again, and you&#8217;re good to go.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2012/02/SNAGHTML3bdc8be.png"><img class="aligncenter" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-bottom: 0px; border-width: 0px;" title="SNAGHTML3bdc8be" src="http://sympmarc.com/wp-content/uploads/2012/02/SNAGHTML3bdc8be_thumb.png" alt="SNAGHTML3bdc8be" width="666" height="527" border="0" /></a></p>
<p>I haven&#8217;t figured out a pattern where SharePoint Designer decides to go all flaky on me like this other than &#8220;it does it sometimes&#8221;. It&#8217;s yet another reason to commit to keeping your code nice and clean and well-formatted so that you can spot issues like this easily.</p>
<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="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=7408d2bd-0175-46c8-a529-ff9026f9c394" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2012/02/01/error-sharepoint-foundation-cannot-deserialize-the-web-part/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<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>12</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>1</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>
<p><UPDATE><br />
In <a href="http://social.technet.microsoft.com/Forums/sr-Latn-CS/sharepoint2010customization/thread/ad13e5e4-e211-453f-bfef-fe260591154a" target="_blank">this thread</a>, Dan Davis shows what he found when he used Reflector to look for what was causing the issue. Scroll down for Dan Davis’ post on Monday, September 19, 2011 at 8:47 PM.<br />
</UPDATE></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>5</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 settings 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>
		<item>
		<title>How Many Content Types Do You Need in SharePoint?</title>
		<link>http://sympmarc.com/2011/09/12/how-many-content-types-do-you-need-in-sharepoint/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-many-content-types-do-you-need-in-sharepoint</link>
		<comments>http://sympmarc.com/2011/09/12/how-many-content-types-do-you-need-in-sharepoint/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 13:45:29 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14309</guid>
		<description><![CDATA[The other day, I got a question form an ex-client about Content Types: How many content types can we reasonably have in a document management collection for a large organization, with multiple document libraries? I am proposing using around 200 content types. We are 12,000 people in 130 countries, so we are big and complex. &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/09/12/how-many-content-types-do-you-need-in-sharepoint/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>The other day, I got a question form an ex-client about <a href="http://msdn.microsoft.com/en-us/library/ms472236.aspx" target="_blank">Content Types</a>:</p>
<blockquote><p>How many content types can we reasonably have in a document management collection for a large organization, with multiple document libraries? I am proposing using around 200 content types. We are 12,000 people in 130 countries, so we are big and complex. Our IT guys say this may be too many and they want to consider using much fewer, with just a metadata column to distinguish between content types. I believe this is ultimately a less powerful approach, but I wanted to check with a real expert such as yourself.</p></blockquote>
<p><a href="http://sharepoint.microsoft.com/en-us/product/capabilities/"><img class="alignright size-full wp-image-14317" title="SharePoint 2010 Wheel" src="http://sympmarc.com/wp-content/uploads/2011/09/SharePointWheel.jpg" alt="SharePoint 2010 Wheel" width="331" height="332" /></a>First off, after some quick Binging, I can’t find any mention of a hard technical limit on the number of Content Types. I&#8217;m sure that someone out there will tell me some number per something, but in SharePoint 2010, it&#8217;s gotten pretty hard to run into technical limits without working at it.</p>
<p>In my opinion, the right number of Content Types is the number that you need. (How’s that for a consultant’s response? But I think it’s the right one.) In looking for limits I ran into <a href="http://www.earley.com/blog/sharepoint-content-structure-let-thousand-content-types-bloom" target="_blank">one well-written piece</a> from <a href="http://www.earley.com/about/consultants/stephanie-lemieux">Stephanie Lemieux</a> of Earley &amp; Associates where she says very similar things to my opinions. (It&#8217;s a really good article, which includes discussion with <a href="http://www.consejoinc.com/" target="_blank">Shawn Shell</a>. I recommend reading it.) In her article, she mentions that they “typically end up with about 10-15 content types for a site of medium complexity”. That’s an interesting range, but it’s really rather arbitrary, and I wouldn’t treat it as any sort of real boundary.</p>
<p>What you certainly wouldn’t want to put in place is a Document Library where your users must choose from dozens of Content Types. (There are exceptions to everything, of course.) What you build *<strong>must</strong>* make sense to the end users; it’s doesn’t matter much at all whether it makes sense to IT, unless it is going to cause a serious technical issue. (See &#8220;First off&#8221; above.)</p>
<p>Content Types are an incredibly important piece of any information architecture. They really represent the different “<a href="http://en.wikipedia.org/wiki/Business_object" target="_blank">business objects</a>” that you might need to move through your SharePoint environment. They might represent what you currently have as printed forms (Paid Time Off Request, Laptop Upgrade Form, etc.), “light” content (Weekly Project Update, etc.), or significant, meaty documents produced only rarely (Annual Report, Position Paper, etc.). Deciding what should be a new, individual Content Type versus piggybacking on an existing Content Type by varying a metadata value is more art than it is science.</p>
<p>It&#8217;s important to keep in mind that Content Types have hierarchical relationships. Every Content Type you create inherits from one of SharePoint&#8217;s basic Content Types (Item, Document, etc.). Your Content Types can also inherit from each other. For instance, you might have a Content Type called &#8220;Status Report&#8221;, with other Content Types called &#8220;Weekly Status Report&#8221;, &#8220;Monthly Status Report&#8221;, and &#8220;Annual Status Report&#8221; inheriting from it. This allows you to inherit the metadata structures of the parent Content Type and add to them for each specific child. Changes to the parent can be applied to all of the children, if desired (and it usually should be).</p>
<p>The key components of a good set of Content Types should be driven by the needs for permissions, metadata, workflow, and what templates you want to provide to your users. If there is uniqueness along any of those dimensions for a particular business object, then it may deserve its own Content Type.</p>
<p>There is certainly library science that you can bring to bear: people with that background tend to be pretty<strong></strong> good at this, by training. Sometimes that discipline doesn’t translate as well into the SharePoint realm as it might, so having someone who really understands SharePoint as well is critical to building good information architecture. Creating a strong information architecture should rarely be a one-person effort; you should involve the library science role, the SharePoint role, and lest we forget, the end users.</p>
<p>Also keep in mind that in SharePoint 2010, there is a Service Application called the Content Type Hub. This Service Application allows you to share Content Types across Site Collections, Web Applications, and even SharePoint Farms. (In SharePoint 2007, the scope for Content Types was limited to a single Site Collection.) With the Content Type Hub capability the “E” in Enterprise Content Management (ECM) truly becomes possible.</p>
<p><a href="http://www.nothingbutsharepoint.com/sites/eusp"><img class="alignright size-full wp-image-11155" title="EndUserSharePointLogo.png" src="http://sympmarc.com/wp-content/uploads/2009/12/endusersharepointlogo.png" alt="" width="240" height="63" /></a>Note: also <a href="https://www.nothingbutsharepoint.com/sites/eusp/Pages/How-Many-Content-Types-Do-You-Need-in-SharePoint.aspx" target="_blank">posted</a> on <a href="http://www.nothingbutsharepoint.com" target="_blank">NothingButSharePoint.com</a>&#8216;s EndUserSharePoint channel on September 13, 2011.</p>
<p>References:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ms472236.aspx" target="_blank">Introduction to Content Types</a> (MSDN)</li>
<li><a href="http://technet.microsoft.com/en-us/library/ee519603.aspx" target="_blank">How to: Customize Content Type Syndication in SharePoint Server 2010 (ECM)</a> (MSDN)</li>
<li><a href="http://technet.microsoft.com/en-us/library/ee519603.aspx" target="_blank">Plan to share terminology and content types (SharePoint Server 2010)</a> (TechNet)</li>
<li><a href="http://www.earley.com/blog/sharepoint-content-structure-let-thousand-content-types-bloom" target="_blank">SharePoint Content Structure &#8211; Let a thousand content types bloom?</a> (Stephanie Lemieux)</li>
<li><a href="http://sympmarc.com/en-nz/post/sharepoint-2010-content-type-hub.aspx">SharePoint 2010 Content Type Hub</a> (Marcel Medina)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/09/12/how-many-content-types-do-you-need-in-sharepoint/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>MetaVis Webinar &#8220;Developing in SharePoint&#8217;s Middle Tier&#8221; Wrap Up</title>
		<link>http://sympmarc.com/2011/09/08/metavis-webinar-developing-in-sharepoints-middle-tier-wrap-up/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=metavis-webinar-developing-in-sharepoints-middle-tier-wrap-up</link>
		<comments>http://sympmarc.com/2011/09/08/metavis-webinar-developing-in-sharepoints-middle-tier-wrap-up/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 15:13:12 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14290</guid>
		<description><![CDATA[It was great doing the webinar for MetaVis yesterday called &#8220;Developing in SharePoint&#8217;s Middle Tier&#8220;. Thanks to Dave Coleman (@davecoleman146) for the invitation to do this and the facilitation, and to Peter Senescu of MetaVis. If you haven&#8217;t looked at MetaVis&#8217; tools for managing your SharePoint farm, whether for migration, working with your information architecture, &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/09/08/metavis-webinar-developing-in-sharepoints-middle-tier-wrap-up/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><strong><em><a href="http://metavistech.com/" target="_blank"><img class="alignright size-full wp-image-14292" title="Metavis" src="http://sympmarc.com/wp-content/uploads/2011/09/MetavisLogo.png" alt="Metavis" width="343" height="83" /></a></em></strong>It was great doing the webinar for <a href="http://metavistech.com/" target="_blank">MetaVis</a> yesterday called &#8220;<a href="http://www.metavistech.com/webinars/developing-sharepoint-middle-tier" target="_blank">Developing in SharePoint&#8217;s Middle Tier</a>&#8220;. Thanks to Dave Coleman (<a href="http://twitter.com/davecoleman146" target="_blank">@davecoleman146</a>) for the invitation to do this and the facilitation, and to Peter Senescu of MetaVis.</p>
<p>If you haven&#8217;t looked at MetaVis&#8217; tools for managing your SharePoint farm, whether for migration, working with your information architecture, or any of the great things they do, you really should. I&#8217;ve used their tools in the past (though it&#8217;s been a while) and they are first rate. Perhaps even better, I found that their support was phenomenal.</p>
<p>I&#8217;ve posted WSPs for SharePoint 2010 which contain the sites I used in the demos to my <a href="http://www.sympraxisconsulting.com/Demos/" target="_blank">Sympraxis Consulting Demos</a> site. They are in the Demo Site Templates Document Library at the top right of the page. (Yes, my demo site is still on crufty old WSS 3.0. It&#8217;s not snazzy, but it gets things done.)</p>
<p>As soon as I get a link to the recording of the webinar, I&#8217;ll add it here, as well. You&#8217;ll also be able to find it on the <a href="http://blog.metavistech.com/" target="_blank">MetaVis blog</a>.</p>
<p>Thanks to all who attended!</p>
<p><!-- copy and paste. Modify height and width if desired. --> <object id="scPlayer" width="600" height="400" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="flashVars" value="thumb=http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/FirstFrame.jpg&amp;containerwidth=1280&amp;containerheight=720&amp;content=http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/MetaVis%20Webinar%20-%2020110907%20-%20Developing%20in%20SharePoints%20Middle%20Tier.mp4&amp;blurover=false" /><param name="allowFullScreen" value="true" /><param name="scale" value="showall" /><param name="allowScriptAccess" value="always" /><param name="base" value="http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/" /><param name="src" value="http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/mp4h264player.swf" /><embed id="scPlayer" width="1280" height="720" type="application/x-shockwave-flash" src="http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/mp4h264player.swf" quality="high" flashVars="thumb=http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/FirstFrame.jpg&amp;containerwidth=1280&amp;containerheight=720&amp;content=http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/MetaVis%20Webinar%20-%2020110907%20-%20Developing%20in%20SharePoints%20Middle%20Tier.mp4&amp;blurover=false" allowFullScreen="true" scale="showall" allowScriptAccess="always" base="http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/" /><iframe frameborder="0" scrolling="no" style="overflow:hidden;" src="http://www.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/embed" height="720" width="1280"></iframe></object></p>
<h3>&#8220;Navigation”</h3>
<p style="text-align: center;"><a href="http://www.sympraxisconsulting.com/Demos/Demo%20Site%20Templates/Forms/DispForm.aspx?ID=13"><img class="aligncenter" style="display: block; border: 0pt none;" title="Navigation" src="http://sympmarc.com/wp-content/uploads/2011/06/image6.png?w=310&amp;h=173" alt="Navigation" width="310" height="173" border="0" /></a></p>
<h3>“Budget”</h3>
<p style="text-align: center;"><a href="http://www.sympraxisconsulting.com/Demos/Demo%20Site%20Templates/Forms/DispForm.aspx?ID=14"><img class="aligncenter" style="display: block; border: 0pt none;" title="Budget" src="http://sympmarc.com/wp-content/uploads/2011/06/image7.png?w=790&amp;h=236" alt="Budget" width="790" height="236" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/09/08/metavis-webinar-developing-in-sharepoints-middle-tier-wrap-up/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://content.screencast.com/users/MetaVis/folders/Webinar%20Series/media/ea9a6ee0-971a-41c7-8855-7e22d3688b90/MetaVis%20Webinar%20-%2020110907%20-%20Developing%20in%20SharePoints%20Middle%20Tier.mp4&amp;amp" length="80661984" type="video/mp4" />
		</item>
		<item>
		<title>Setting Up a DVWP to Use jQueryUI Accordion and Tabs</title>
		<link>http://sympmarc.com/2011/08/29/setting-up-a-dvwp-to-use-jqueryui-accordion-and-tabs/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=setting-up-a-dvwp-to-use-jqueryui-accordion-and-tabs</link>
		<comments>http://sympmarc.com/2011/08/29/setting-up-a-dvwp-to-use-jqueryui-accordion-and-tabs/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 02:16:11 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[accordions]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14268</guid>
		<description><![CDATA[Carlos Nunes-Ueno posted some XSL you can use in a DVWP to the SPXSLT Codeplex Project a while back which allows you to easily utilize the jQueryUI accordion and tabs functions. I asked him if he&#8217;d mind if I did a blog post on it, and he agreed. (If you happen to read the thread, &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/29/setting-up-a-dvwp-to-use-jqueryui-accordion-and-tabs/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://spxslt.codeplex.com"><img class="alignright" title="SPXSLT" src="http://sympmarc.com/wp-content/uploads/2010/10/spxsltlogo.jpg" alt="SPXSLT" width="250" height="85" /></a>Carlos Nunes-Ueno <a href="http://spxslt.codeplex.com/discussions/269600" target="_blank">posted</a> some XSL you can use in a DVWP to the <a href="http://spxslt.codeplex.com" target="_blank">SPXSLT Codeplex Project</a> a while back which allows you to easily utilize the <a href="http://jqueryui.com/" target="_blank">jQueryUI</a> accordion and tabs functions. I asked him if he&#8217;d mind if I did a blog post on it, and he agreed. (If you happen to read the thread, I admit that I had just gotten back from vacation at the time and thought that the post came from the <a href="http://spservices.codeplex.com" target="_blank">SPServices</a> Discussions. That&#8217;s why I sound confused &#8211; I was.)</p>
<p>Here&#8217;s what Carlos told me about himself:</p>
<blockquote><p>I&#8217;ve been working with SharePoint pretty much exclusively for the past year.  I work for a major online retailer on internally facing sites and I&#8217;ve been focused primarily on getting processes off paper.  My previous background is mainly in MS Access.  I&#8217;m still working on the ins and outs of SharePoint and trying to wring as much functionality as I can out of it.  I have found jQuery and jQueryUI to be extremely useful tools for that.</p></blockquote>
<p>Accordions and tabs are two of the popular widgets offered by jQueryUI. In case you haven&#8217;t seen them in action, here are some simple examples. (The links will take you to the jQueryUI site, where there are live examples.)</p>
<p style="text-align: left;"><a href="http://jqueryui.com/demos/accordion/" target="_blank">Accordion</a></p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/accordion.png"><img class="aligncenter size-full wp-image-14269" title="accordion" src="http://sympmarc.com/wp-content/uploads/2011/08/accordion-e1314671215681.png" alt="accordion" width="550" height="169" /></a><a href="http://jqueryui.com/demos/tabs/" target="_blank">Tabs</a></p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/tabs.png"><img class="aligncenter size-full wp-image-14270" title="tabs" src="http://sympmarc.com/wp-content/uploads/2011/08/tabs-e1314671279686.png" alt="tabs" width="550" height="145" /></a>By structuring your markup in a specific way, you can make simple calls to jQueryUI to re-shape what you&#8217;ve rendered on the page into these cool user interface elements. Using a Data View Web Part (DVWP), you can pull the labels for the sections and content in the accordion or the tabs names and content from lists. All it takes is emitting some well-structured markup in your XSL.</p>
<p>Here are Carlos&#8217; examples:</p>
<p>Accordion</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:template name=&quot;dvt_1&quot;&gt;
  &lt;xsl:variable name=&quot;dvt_StyleName&quot;&gt;Table&lt;/xsl:variable&gt;
  &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Rows/Row&quot;/&gt;
  &lt;xsl:variable name=&quot;dvt_RowCount&quot; select=&quot;count($Rows)&quot; /&gt;
  &lt;xsl:variable name=&quot;dvt_IsEmpty&quot; select=&quot;$dvt_RowCount = 0&quot; /&gt;
  &lt;xsl:choose&gt;
    &lt;xsl:when test=&quot;$dvt_IsEmpty&quot;&gt;
      &lt;xsl:call-template name=&quot;dvt_1.empty&quot; /&gt;
    &lt;/xsl:when&gt;
    &lt;xsl:otherwise&gt;
        &lt;div id=&quot;accordion&quot;&gt;
          &lt;xsl:call-template name=&quot;accordionMarkup&quot;&gt;
            &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot; /&gt;
          &lt;/xsl:call-template&gt;
        &lt;/div&gt;
    &lt;/xsl:otherwise&gt;
  &lt;/xsl:choose&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;accordionMarkup&quot;&gt;
  &lt;xsl:param name=&quot;Rows&quot; /&gt;
  &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
    &lt;h3&gt;
      &lt;a href=&quot;#&quot;&gt;
        &lt;xsl:value-of select=&quot;@Title&quot; /&gt;
      &lt;/a&gt;
    &lt;/h3&gt;
    &lt;div&gt;
      &lt;xsl:value-of select=&quot;@panelText&quot; disable-output-escaping=&quot;yes&quot; /&gt;
    &lt;/div&gt;
  &lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;dvt_1.empty&quot;&gt;
  &lt;xsl:variable name=&quot;dvt_ViewEmptyText&quot;&gt;No items.&lt;/xsl:variable&gt;
  &lt;table border=&quot;0&quot; width=&quot;100%&quot;&gt;
    &lt;tr&gt;
      &lt;td class=&quot;ms-vb&quot;&gt;
        &lt;xsl:value-of select=&quot;$dvt_ViewEmptyText&quot; /&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/xsl:template&gt;
</pre>
<p>Tabs</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:template name=&quot;dvt_1&quot;&gt;
  &lt;xsl:variable name=&quot;dvt_StyleName&quot;&gt;Table&lt;/xsl:variable&gt;
  &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Rows/Row&quot;/&gt;
  &lt;xsl:variable name=&quot;dvt_RowCount&quot; select=&quot;count($Rows)&quot; /&gt;
  &lt;xsl:variable name=&quot;dvt_IsEmpty&quot; select=&quot;$dvt_RowCount = 0&quot; /&gt;
  &lt;xsl:choose&gt;
    &lt;xsl:when test=&quot;$dvt_IsEmpty&quot;&gt;
      &lt;xsl:call-template name=&quot;dvt_1.empty&quot; /&gt;
    &lt;/xsl:when&gt;
    &lt;xsl:otherwise&gt;
        &lt;div id=&quot;tabs&quot;&gt;
          &lt;xsl:call-template name=&quot;tabsList&quot;&gt;
            &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot; /&gt;
          &lt;/xsl:call-template&gt;
          &lt;xsl:call-template name=&quot;tabsPanels&quot;&gt;
            &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot; /&gt;
          &lt;/xsl:call-template&gt;
        &lt;/div&gt;
    &lt;/xsl:otherwise&gt;
  &lt;/xsl:choose&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;tabsList&quot;&gt;
  &lt;xsl:param name=&quot;Rows&quot; /&gt;
  &lt;ul&gt;
    &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
      &lt;li&gt;&lt;a href=&quot;{concat('#tabs-',@ID)}&quot;&gt;&lt;xsl:value-of select=&quot;@Title&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/xsl:for-each&gt;
  &lt;/ul&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;tabsPanels&quot;&gt;
  &lt;xsl:param name=&quot;Rows&quot; /&gt;
  &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
    &lt;div id=&quot;{concat('tabs-',@ID)}&quot;&gt;
      &lt;xsl:value-of select=&quot;@panelText&quot; disable-output-escaping=&quot;yes&quot; /&gt;
    &lt;/div&gt;
  &lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;dvt_1.empty&quot;&gt;
  &lt;xsl:variable name=&quot;dvt_ViewEmptyText&quot;&gt;No items.&lt;/xsl:variable&gt;
  &lt;table border=&quot;0&quot; width=&quot;100%&quot;&gt;
    &lt;tr&gt;
      &lt;td class=&quot;ms-vb&quot;&gt;
        &lt;xsl:value-of select=&quot;$dvt_ViewEmptyText&quot; /&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/xsl:template&gt;
</pre>
<p>One of the nice things about jQueryUI is that using the basic functionality once you have the markup in place requires very little script.</p>
<p>For an accordion:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $(&quot;#accordion&quot;).accordion();
});
</pre>
<p>For tabs:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $(&quot;#tabs&quot;).tabs();
});
</pre>
<p>There are various options for both functions which you can read about on the jQueryUI site, but the simple script above gets you the default functionality. Obviously, you&#8217;d need to reference the jQuery and jQueryUI files and link to the jQueryUI css, but if you&#8217;ve used jQueryUI, or even just jQuery, you are probably familiar with how to do that.</p>
<p>Thanks, Carlos!</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/29/setting-up-a-dvwp-to-use-jqueryui-accordion-and-tabs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Using SPServices with jQueryUI&#8217;s Autocomplete Function on InfoPath Forms in SharePoint</title>
		<link>http://sympmarc.com/2011/08/24/using-spservices-with-jqueryuis-autocomplete-function-on-infopath-forms-in-sharepoint/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-spservices-with-jqueryuis-autocomplete-function-on-infopath-forms-in-sharepoint</link>
		<comments>http://sympmarc.com/2011/08/24/using-spservices-with-jqueryuis-autocomplete-function-on-infopath-forms-in-sharepoint/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 03:46:07 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[InfoPath]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[SPAutocomplete]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14230</guid>
		<description><![CDATA[Yes, that title says using jQueryUI on InfoPath forms in SharePoint. InfoPath forms are fantastic, except when they just aren&#8217;t quite able to do what you want. While InfoPath can help you take your SharePoint list forms to a whole new level, there may be times when you want to add some behavior to those &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/24/using-spservices-with-jqueryuis-autocomplete-function-on-infopath-forms-in-sharepoint/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Yes, that title says using jQueryUI on InfoPath forms in SharePoint. InfoPath forms are fantastic, except when they just aren&#8217;t quite able to do what you want. While InfoPath can help you take your SharePoint list forms to a whole new level, there may be times when you want to add some behavior to those forms which InfoPath simply doesn&#8217;t offer.</p>
<p>Guess what? jQuery and jQueryUI can come to the rescue in some of those cases, just as it can with the standard list forms.</p>
<p>I recently worked with a client to do a relatively simple thing, but it was a huge hit. They had a SharePoint list had a Single line of text column, to which the user could add whatever they wanted. However, there was a desire to make suggestions as the user typed, based on the contents of a different list, which had thousands of items.</p>
<p>A dropdown doesn&#8217;t make sense in that situation, because there are simply too many items. They also wanted to show matches to what the user had typed, regardless where those characters occurred in the list item.</p>
<p>This is a perfect situation in which to use the idea of autocomplete. We all are familiar with this idea, if not the actual term. You probably see it in action every single day as you use a search engine. As you type your search term(s), the search engine shows suggestions, probably based on some fairly sophisticated algorithms.</p>
<p>Here&#8217;s an example from Bing:</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2011/08/image4.png"><img class="aligncenter" style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0pt none;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/08/image_thumb4.png" alt="image" width="583" height="269" border="0" /></a></p>
<p>and from Google:</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2011/08/image5.png"><img class="aligncenter" style="background-image: none; margin-top: 0px; margin-bottom: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0pt none;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/08/image_thumb5.png" alt="image" width="750" height="166" border="0" /></a></p>
<p>(I can&#8217;t help but point out that Google was more on the mark in guessing that I was searching for SPServices, but hey, who&#8217;s counting?)</p>
<p>When InfoPath forms are rendered in the browser, they are built of ordinary markup just like any other page, albeit fairly complicated markup, driven by a lot of script.  That doesn&#8217;t mean that you can&#8217;t add some script of your own as well to add additional capabilities. There are a few peculiarities to this situation, though, which you need to handle.</p>
<p>Here&#8217;s a slightly dumbed down version of the script we ended up with.</p>
<pre class="brush: jscript; title: ; notranslate">
window.onload = function() {
  window.setTimeout(readyCall, 1000);
}

function readyCall(){

  var externalParties = [];

  $().SPServices({
    operation: &quot;GetListItems&quot;,
    listName: &quot;External Parties&quot;,
    CAMLViewFields: &quot;&quot;,
    async: false,
    completefunc: function (xData, Status) {
      $(xData.responseXML).find(&quot;[nodeName='z:row']&quot;).each(function() {
        externalParties.push($(this).attr(&quot;ows_Title&quot;));
      });
    }
  });

  //&lt;input tabIndex=&quot;0&quot; title=&quot;&quot; class=&quot;q_zwfUqJo2fRthHnM4_0 as_zwfUqJo2fRthHnM4_0 b9_zwfUqJo2fRthHnM4_0&quot; id=&quot;ctl00_m_g_a226da68_1383_40e3_8410_1ada27d49dcf_FormControl0_V1_I1_T2&quot; aria-invalid=&quot;true&quot; style=&quot;position: relative;&quot; onfocus=&quot;return (TextBox.OnFocus(this, event));&quot; onblur=&quot;return (TextBox.OnBlur(this, event));&quot; onpropertychange=&quot;return (TextBox.OnPropertyChange(this, event));&quot; type=&quot;text&quot; OriginalId=&quot;V1_I1_T2&quot; FormId=&quot;ctl00_m_g_a226da68_1383_40e3_8410_1ada27d49dcf_FormControl0&quot; ViewDataNode=&quot;3&quot; direction=&quot;ltr&quot; wrapped=&quot;true&quot; ScriptClass=&quot;TextBox&quot; VCARD_NAME=&quot;91161f891e59461042587839b2504693728ce05a&quot; ?=&quot;&quot;/&gt;
  $(&quot;input[id$='FormControl0_V1_I1_T2'], input[id$='FormControl0_V1_I1_T3']&quot;).autocomplete({
    source: externalParties,
    minLength: 3
  });
}
</pre>
<p>When InfoPath forms load in the browser, they don&#8217;t load with the rest of the page, but instead they are loaded slightly afterward in what amounts to an asynchronous load. Because of that, using $(document).ready(), our trusted jQuery friend, doesn&#8217;t work. Instead, as you can see in lines 1-3, we simply wait for 1000 milliseconds (1 second) before we run our script. We found that this was an adequate amount of wait time for our particular form; you might need to adjust this.</p>
<p>In lines 9-19, we use my <a href="http://spservices.codeplex.com" target="_blank">SPServices</a> library to call the Lists Web Service, using the <a href="http://spservices.codeplex.com/wikipage?title=GetListItems" target="_blank">GetListItems</a> operation. This operation simply reads items from the list based upon the criteria you specify. Once we have the data, we push each of the Title column values into an array called externalParties.</p>
<p>Finally, we call the jQueryUI function autocomplete, using two selectors. In line 21 above, which is commented out, you can see an example of the markup for one of the input elements rendered in the InfoPath form. One of the hardest parts of all of this was to figure out what selector to use. We settled on looking for an input element where the id contained &#8216;FormControl0_V1_I1_T2&#8242;.  (We actually added the autocomplete behavior to two columns in the form, thus the second selector for &#8216;FormControl0_V1_I1_T3&#8242;.)</p>
<p>We added this script into the <em><em>newifs</em>.<em>aspx</em></em> and<em> editifs</em><em><em>.<em>aspx</em></em></em> pages using a trusty Content Editor Web Part (CEWP). Since this was SharePoint 2010, and because it makes for far better code management, we stored the script in a separate file and referenced it using the Content Link.</p>
<p>Bingo-bango, we had a nice, little additional piece of functionality which made the users very happy. This is an example where thinking about all of the tools at your disposal and how you might glue them together into the right solution to get the job done can be the right approach rather than a lot of custom coding.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/autocomplete.png"><img class="aligncenter size-full wp-image-14243" title="autocomplete" src="http://sympmarc.com/wp-content/uploads/2011/08/autocomplete.png" alt="" width="341" height="289" /></a>&lt;UPDATE dateTime=&#8221;2011-08-25T23:51&#8243;&gt;</p>
<p>My partner in crime for this exercise was Marcel Meth (<a href="http://twitter.com/marcelmeth" target="_blank">@marcelmeth</a>), and he&#8217;s done a post on it, too, which you can read <a href="http://butdoesitwork.typepad.com/but_does_it_work/2011/08/infopath-and-autocomplete-and-other-lessons.html" target="_blank">here</a>. I was able to steal his image of the results, which I&#8217;ve added above. Note that the image is not showing the real data but our test data, which was simply a list of the 3000 or so major cities and towns in the US.</p>
<p>&lt;/UPDATE&gt;</p>
<p>&lt;UPDATE dateTime=&#8221;2011-08-26T09:25&#8243;&gt;</p>
<p>I got a question in the comments below about how we added the script to the InfoPath page, and I wanted to add those details here.</p>
<ul>
<li>First, we opened each form in the browser, which launched it in a dialog box.</li>
<li>We got the actual URL of the page in the dialog by right-clicking and looking at its properties. The NewForm was <em><em>newifs</em>.<em>aspx</em></em> and the EditForm was<em> editifs</em><em><em>.<em>aspx</em></em></em> (as I mention above).</li>
<li>We opened the form page directly in a new browser window and used the <a href="http://sympmarc.com/2010/10/27/add-web-parts-to-sharepoint-forms-without-sharepoint-designer/">toolpaneview=2 Query String parameter trick</a> to put the page into edit mode. This allows you to edit a list form page and add Web Parts to it.</li>
<li>We added the CEWP, and put the reference to our script file in the Content Link.</li>
<li>Apply and done.</li>
</ul>
<p>&lt;/UPDATE&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/24/using-spservices-with-jqueryuis-autocomplete-function-on-infopath-forms-in-sharepoint/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Middle Tier Magic: The SPSTCDC Web Site Speakers and Sessions Pages &#8211; Recording Available</title>
		<link>http://sympmarc.com/2011/08/22/middle-tier-magic-the-spstcdc-web-site-speakers-and-sessions-pages-recording-available/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=middle-tier-magic-the-spstcdc-web-site-speakers-and-sessions-pages-recording-available</link>
		<comments>http://sympmarc.com/2011/08/22/middle-tier-magic-the-spstcdc-web-site-speakers-and-sessions-pages-recording-available/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 05:56:19 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[DVWP]]></category>
		<category><![CDATA[SharePoint Saturday the Conference]]></category>
		<category><![CDATA[SPSTC]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14145</guid>
		<description><![CDATA[In case you missed my Middle Tier Magic: The SPSTCDC Web Site Speakers and Sessions Pages webinar which I did a little over a week ago with Dux Sy (@meetdux), I just wanted to do a quick post about it. The webinar was my &#8220;session&#8221; for SharePoint Saturday: The Conference (SPSTCDC) since I wasn&#8217;t able &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/22/middle-tier-magic-the-spstcdc-web-site-speakers-and-sessions-pages-recording-available/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://spstc.org"><img class="alignright" style="display: inline;" title="Sharepoint Saturday Conference" src="http://sympmarc.com/wp-content/uploads/2011/08/spstc_logo.gif" alt="Sharepoint Saturday Conference" width="314" height="70" align="right" /></a>In case you missed my <a href="http://sympmarc.com/2011/08/03/middle-tier-magic-the-spstc-web-site-speakers-and-sessions-pages/" target="_blank">Middle Tier Magic: The SPSTCDC Web Site Speakers and Sessions Pages</a> webinar which I did a little over a week ago with Dux Sy (<a href="http://twitter.com/meetdux" target="_blank">@meetdux</a>), I just wanted to do a quick post about it.</p>
<p>The webinar was my &#8220;session&#8221; for SharePoint Saturday: The Conference (SPSTCDC) since I wasn&#8217;t able to attend. In it, I show the work I did to make the Sessions and Speakers pages on the <a href="http://spstc.org" target="_blank">SPSTC.org</a> Web site work using Data View Web Parts (DVWPs) and some custom CSS.</p>
<p>The recording of the webinar is available at Screencast.com <a href="http://www.screencast.com/users/sympmarc/folders/Default/media/9a552b8c-7b5a-4d11-8c92-0621e8bc8f5b" target="_blank">here</a>.  As I mentioned during the webinar, all of the important code bits are shown in my <a href="http://sympmarc.com/2011/08/03/middle-tier-magic-the-spstc-web-site-speakers-and-sessions-pages/" target="_blank">post announcing the webinar</a>. If you have any questions, please feel free to post a comment on this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/22/middle-tier-magic-the-spstcdc-web-site-speakers-and-sessions-pages-recording-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taming Long SharePoint List Forms Using jQuery to Break Them into Sections</title>
		<link>http://sympmarc.com/2011/08/18/taming-long-sharepoint-list-forms-using-jquery-to-break-them-into-sections/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=taming-long-sharepoint-list-forms-using-jquery-to-break-them-into-sections</link>
		<comments>http://sympmarc.com/2011/08/18/taming-long-sharepoint-list-forms-using-jquery-to-break-them-into-sections/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 15:25:01 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Forms]]></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=14109</guid>
		<description><![CDATA[Do you have any lists in SharePoint where the forms seem to go on and on, marching down the page, seemingly ad infinitum? I&#8217;ve seen lists which have over a hundred, even over 300 columns. This is a horrible thing to do to your users for so many reasons, but one of the primary reasons &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/18/taming-long-sharepoint-list-forms-using-jquery-to-break-them-into-sections/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Do you have any lists in SharePoint where the forms seem to go on and on, marching down the page, seemingly ad infinitum? I&#8217;ve seen lists which have over a hundred, even over 300 columns. This is a horrible thing to do to your users for so many reasons, but one of the primary reasons is that the list forms are simply unmanageable and in many cases unfathomable.</p>
<p>If you do have that many columns in a list and they really do need to be there, consider building custom &#8220;sub-forms&#8221; which take a more wizard-like approach. What I mean by this is that you might have a relatively short initial, customized version of the NewForm which collects all of the required information. When your user saves that form, you can use <a href="http://spservices.codeplex.com/wikipage?title=$().SPServices.SPRedirectWithID" target="_blank">SPRedirectWithID</a> from <a href="http://spservices.codeplex.com" target="_blank">SPServices</a> to go to the next form in the sequence, and so on. You could, of course, develop totally custom forms, whether by using traditional .NET development or by using <a href="http://jquery.com" target="_blank">jQuery</a>, and probably <a href="http://jqueryui.com" target="_blank">jQueryUI</a> plus other plugins, and the SPServices and the Web Services to write the data into your list(s).</p>
<p>But what if all of that seems overly complex or beyond your skills? There&#8217;s a quick thing you can do to tame those ridiculously long forms a tiny bit. Your users still won&#8217;t love you, but they may not hate you as much.</p>
<p>The first thing I needed to do for this post was to create a new list with lots of columns. I didn&#8217;t have any of these horrid complicated lists lying around in my test environment.) I could have done this any number of ways, including manually, but I decided to write some jQuery with SPServices to do it.</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;jQuery Libraries/jquery-1.6.2.min.js&quot;&gt;&lt;/script&gt;&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;jQuery Libraries/jquery.SPServices-0.6.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;
  $(document).ready(function() {

    // Delete the old list (if present)
    $().SPServices({
      operation: &quot;DeleteList&quot;,
      listName: &quot;Complicated List&quot;,
      completefunc: function (xData, Status) {
        alert(xData.responseText);
      }
    });

    // Create the new list
    $().SPServices({
      operation: &quot;AddList&quot;,
      listName: &quot;Complicated List&quot;,
      description: &quot;List with lots of columns&quot;,
      templateID: &quot;100&quot;,  // Custom list
      completefunc: function (xData, Status) {
        alert(xData.responseText);
      }
    });

    var newFields = &quot;&lt;Fields&gt;&quot;;

    for(i=1; i &lt;= 100; i++) {
      newFields += &quot;&lt;Method ID='&quot; + i + &quot;'&gt;&quot; +
        &quot;&lt;Field Type='Text' DisplayName='Column_&quot; + i + &quot;' FromBaseType='TRUE' MaxLength='255' Description='Description of Column_&quot; + i + &quot;' /&gt;&quot; +
        &quot;&lt;/Method&gt;&quot;;
    }
    newFields += &quot;&lt;/Fields&gt;&quot;;

    // Add a lot of columns to the list
    $().SPServices({
      operation: &quot;UpdateList&quot;,
      listName: &quot;Complicated List&quot;,
      newFields: newFields,
      completefunc: function (xData, Status) {
        alert(xData.responseText);
      }
    });

  });
&lt;/script&gt;
</pre>
<p>This script simply creates a new list for me called Complicated List and adds 100 columns to it named Column_n. It was down and dirty, but you might see a more complex and useful version of this this as a poor man&#8217;s templating tool for building lists in your own environment. And yes, I&#8217;m doing this in good old WSS 3.0. It&#8217;s not such a bad place to be, and the same approach and code will work in SharePoint 2010. Isn&#8217;t SPServices grand?</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2011/08/8-18-2011-11-40-05.png"><img class="aligncenter" title="Complicated List NewForm" src="http://sympmarc.com/wp-content/uploads/2011/08/8-18-2011-11-40-05.png" alt="" width="635" height="441" /></a></p>
<p style="text-align: left;">Once I had my list to play with, I copied NewForm.aspx to NewFormCustom.aspx  &#8211; never, ever edit the default list forms &#8211; and set it as the form to use when creating a new item for the list. Then I added my CSS and script to NewFormCustom.aspx.</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;../../jQuery Libraries/jquery-1.6.2.min.js&quot;&gt;&lt;/script&gt;&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;../../jQuery Libraries/jquery.SPServices-0.6.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;
  // This function from SPServices gets all of the Query String parameters
  var queryStringVals = $().SPServices.SPGetQueryString();
  // We can pass in a section name on the Query String to expand by default
  var expandSection = queryStringVals.section;

  $(document).ready(function() {

    // Set up each of the sections -
    // see the setupSection function below for an explanation of the parameters
    setupSection(&quot;Section1&quot;, &quot;This is Section One&quot;, &quot;Title&quot;, &quot;Column_5&quot;);
    setupSection(&quot;Section2&quot;, &quot;This is Section Two&quot;, &quot;Column_6&quot;, &quot;Column_15&quot;);
    setupSection(&quot;Section3&quot;, &quot;This is Section Three&quot;, &quot;Column_16&quot;, &quot;Column_25&quot;);
    setupSection(&quot;Section4&quot;, &quot;This is Section Four&quot;, &quot;Column_26&quot;, &quot;Column_40&quot;);
    setupSection(&quot;Section5&quot;, &quot;This is Section Five&quot;, &quot;Column_41&quot;, &quot;Column_80&quot;);
    setupSection(&quot;Section6&quot;, &quot;This is Section Six&quot;, &quot;Column_81&quot;, &quot;Column_100&quot;);

    // If no section on the Query String, expand the first section
    if(expandSection === undefined) {
      $(&quot;tr[section-name='Section1']&quot;).css(&quot;display&quot;, &quot;block&quot;);
      $(&quot;tr#Section1&quot;).addClass(&quot;demo-collapse&quot;);
    }

  });

  function setupSection(sectionShortName, sectionLongName, startColumn, endColumn) {
    /* Set up a form section
      Parameters:
        sectionShortName: This short name is used for element IDs and such. It cannot contain spaces or special characters.
        sectionLongName: This name is what is shown in the section header and can contain any text.
        startColumn: The first column in the section.
        endColumn: The last column in the section.
      The two column names should be the Display Name, e.g., &quot;Product Name&quot;, not the InternalName, e.g., &quot;Product_x0020_Name&quot;
    */

    // Find the first and last row in the section and add the section header
    var sectionStartRow = findFormField(startColumn).closest(&quot;tr&quot;);
    var sectionEndRow = findFormField(endColumn).closest(&quot;tr&quot;);
    $(sectionStartRow)
      .before(&quot;&lt;tr class='demo-section-header' id='&quot; + sectionShortName + &quot;'&gt;&quot; +
        &quot;&lt;td class='demo-section-header-cell' colspan=2&gt;&quot; + sectionLongName + &quot;&lt;/td&gt;&quot; +
        &quot;&lt;/tr&gt;&quot;);
    var thisSection = $(sectionStartRow).nextUntil(sectionEndRow);

    // Give all of the rows in the section an attribute for the section name for easier manipulation later
    $(sectionStartRow).attr(&quot;section-name&quot;, sectionShortName);
    $(sectionStartRow).nextUntil(sectionEndRow).attr(&quot;section-name&quot;, sectionShortName);
    $(sectionEndRow).attr(&quot;section-name&quot;, sectionShortName);
    $(sectionEndRow).find(&quot;td&quot;).addClass(&quot;demo-section-last-row-cell&quot;);

    // Hide all of the rows in the section
    $(&quot;tr[section-name='&quot; + sectionShortName + &quot;']&quot;).css(&quot;display&quot;, &quot;none&quot;);

    // Add the click behavior for the section header
    $(&quot;tr#&quot; + sectionShortName).click(function() {
      var thisSectionRows = $(&quot;tr[section-name='&quot; + sectionShortName + &quot;']&quot;);
      if($(this).next(&quot;tr[section-name='&quot; + sectionShortName + &quot;']&quot;).css(&quot;display&quot;) == &quot;block&quot;) {
        $(thisSectionRows).css(&quot;display&quot;, &quot;none&quot;);
        $(this).removeClass(&quot;demo-collapse&quot;);
      } else {
        $(thisSectionRows).css(&quot;display&quot;, &quot;block&quot;);
        $(this).addClass(&quot;demo-collapse&quot;);
      }
    });

    // Expand the section if there are any validation errors
    $(&quot;tr[section-name='&quot; + sectionShortName + &quot;'] .ms-formbody .ms-formvalidation&quot;).each(function() {
      if($(this).html().length &gt; 0) {
        $(&quot;tr[section-name='&quot; + sectionShortName + &quot;']&quot;).css(&quot;display&quot;, &quot;block&quot;);
        $(&quot;tr#&quot; + sectionShortName).addClass(&quot;demo-collapse&quot;);
        // No need to look at any more rows
        return false;
      }
    });

    // Expand the section if it's been passed on the Query String
    if(sectionShortName == expandSection) {
      $(&quot;tr[section-name='&quot; + sectionShortName + &quot;']&quot;).css(&quot;display&quot;, &quot;block&quot;);
      $(&quot;tr#&quot; + sectionShortName).addClass(&quot;demo-collapse&quot;);
    }

  }

  // This function (borrowed from SPServices) finds a column's formBody in the page
  function findFormField(columnName) {
    var thisFormBody;
    // There's no easy way to find one of these columns; we'll look for the comment with the columnName
    var searchText = RegExp(&quot;FieldName=\&quot;&quot; + columnName.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &quot;\\$&amp;&quot;) + &quot;\&quot;&quot;, &quot;gi&quot;);
    // Loop through all of the ms-formbody table cells
    $(&quot;td.ms-formbody&quot;).each(function() {
      // Check for the right comment
      if(searchText.test($(this).html())) {
        thisFormBody = $(this);
        // Found it, so we're done
        return false;
      }
    });
    return thisFormBody;
  } // End of function findFormField
&lt;/script&gt;
</pre>
<p>And the CSS:</p>
<pre class="brush: css; title: ; notranslate">
.demo-hidden {
	display:none;
}
.demo-main {
	height:250px;
	overflow:scroll;
}
.demo-no-item-selected {
	font-size:12px;
}
.demo-section-link {
	padding-left:15px;
	font-size:10px;
}
.demo-section-header {
	background-image:url('/_layouts/images/plus.gif');
	background-repeat:no-repeat;
	background-position:5px center;
	padding:3px 3px 3px 22px;
	background-color:#6699cc;
	font-weight:bold;
	color:#ffffff;
}
.demo-section-header-cell {
	border-top:1px #c2c2c2 solid;
}
.demo-section-last-row-cell {
	border-bottom:2px black solid;
}
.demo-collapse {
	background-image:url('/_layouts/images/minus.gif');
}</pre>
<p>Et voila, expando-collapso.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/8-18-2011-12-14-26.png"><img class="aligncenter size-full wp-image-14122" title="8-18-2011 12-14-26" src="http://sympmarc.com/wp-content/uploads/2011/08/8-18-2011-12-14-26.png" alt="" width="624" height="549" /></a></p>
<p>If you&#8217;d like to see this working for real, you can take a look at <a href="http://www.sympraxisconsulting.com/demos/Demo%20Pages/ComplicatedList.aspx">this page</a> on my demo site.</p>
<p>Don&#8217;t you hate it when forms &#8220;hide&#8221; the field that you need to fix? It happens way to often on forms out the on the world wild Web. So note that if there&#8217;s a validation error on the form that the script pops open that section to bring it to your attention. Column_13 is required on the demo site. Try saving the form without filling it in.</p>
<p>And finally, if you choose to pass in a section&#8217;s short name on the Query String, that section will be expanded instead of the first. Try ?section=SectionN, where N is [1-6].</p>
<p>Note: The CSS I&#8217;m using here in my little demo is intentionally very simple. When I built this for real, we had some nice little icons and backgrounds that made it feel even more helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/18/taming-long-sharepoint-list-forms-using-jquery-to-break-them-into-sections/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Compound Filtering in Data View Web Parts (DVWPs) with SharePoint Designer</title>
		<link>http://sympmarc.com/2011/08/15/compound-filtering-in-data-view-web-parts-dvwps-with-sharepoint-designer/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=compound-filtering-in-data-view-web-parts-dvwps-with-sharepoint-designer</link>
		<comments>http://sympmarc.com/2011/08/15/compound-filtering-in-data-view-web-parts-dvwps-with-sharepoint-designer/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 21:19:13 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Data View Web Part]]></category>
		<category><![CDATA[DVWP]]></category>
		<category><![CDATA[filtering]]></category>
		<category><![CDATA[SharePoint Designer 2007]]></category>
		<category><![CDATA[SharePoint Designer 2010]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14100</guid>
		<description><![CDATA[When you build a Data View Web Part (DVWP) in SharePoint Designer, there are times when you might need compound filtering. By this, I mean something like: Show me the items where (City=&#8221;Abington&#8221; or Approval Status=&#8221;Approved&#8221;) and Approval Status!=&#8221;Pending&#8221; It&#8217;s sort of a silly example, but you should get the gist. Where you put the &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/15/compound-filtering-in-data-view-web-parts-dvwps-with-sharepoint-designer/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>When you build a Data View Web Part (DVWP) in SharePoint Designer, there are times when you might need compound filtering. By this, I mean something like:</p>
<blockquote><p>Show me the items where (City=&#8221;Abington&#8221; or Approval Status=&#8221;Approved&#8221;) and Approval Status!=&#8221;Pending&#8221;</p></blockquote>
<p>It&#8217;s sort of a silly example, but you should get the gist. Where you put the parentheses matters. The silly example below says the same thing, but I&#8217;ve moved the parentheses:</p>
<blockquote><p>Show me the items where City=&#8221;Abington&#8221; or (Approval Status=&#8221;Approved&#8221; and Approval Status!=&#8221;Pending&#8221;)</p></blockquote>
<p>This would give you a different result, so you need some way to tell SharePoint Designer where the &#8220;parentheses&#8221; should go.</p>
<p>When you go to create this type of filter in SharePoint Designer, it&#8217;s virtually impossible to figure out how to do it. The UI for this is horrid.</p>
<p>What you need to do is select the rows you’d like to group together by using Shift-Click on each row. The rows must also be adjacent. Then you can either right click on the highlighted rows and choose Group or click the Group button below.<a href="http://sympmarc.com/wp-content/uploads/2011/08/clip_image002.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="clip_image002" src="http://sympmarc.com/wp-content/uploads/2011/08/clip_image002_thumb.jpg" alt="clip_image002" width="513" height="325" border="0" /></a></p>
<p>Selecting the rows is the horrid UI part. One would have thought that this would have gotten better in SharePoint Designer 2010, but&#8230;no such luck.</p>
<p>Once you’ve done that, you’ll see a little blue bracket on the left, as below. The grouping is sort of like parentheses.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/clip_image004.gif"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="clip_image004" src="http://sympmarc.com/wp-content/uploads/2011/08/clip_image004_thumb.gif" alt="clip_image004" width="638" height="399" border="0" /></a></p>
<p>If you want to ungroup, you Right-Click again and choose Ungroup or highlight one of the rows and click the Ungroup button.</p>
<p>Changing the And to an Or or vice versa is a little bit easier to figure out, but it&#8217;s still horrid UI. You can click on the And, which will display a dropdown which allows you to change it to Or.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/clip_image006.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="clip_image006" src="http://sympmarc.com/wp-content/uploads/2011/08/clip_image006_thumb.jpg" alt="clip_image006" width="68" height="59" border="0" /></a></p>
<p>Depending on what selections you make, the filtering you set up this way will end up in the CAML for the DVWP, which is the most efficient way to filter. In some cases, your filtering will end up happening in the definition of the Rows variable, something like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Rows/Row[@City = 'Abington']&quot;/&gt;
</pre>
<p>This is *usually* less efficient, but there are exceptions to everything; you still need to understand your information architecture to know what&#8217;s best. You can add this sort of filtering manually (I typed it myself in the example above) or check the &#8220;Add XSLT Filtering&#8221; box and then the &#8220;Edit&#8221; button.</p>
<p>In all of these cases, the UI leaves a lot to be desired, but you can get the job done if you persevere.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/15/compound-filtering-in-data-view-web-parts-dvwps-with-sharepoint-designer/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>SharePoint Adoption and Success: Navigating the Chasm of Despair</title>
		<link>http://sympmarc.com/2011/08/10/sharepoint-adoption-and-success-navigating-the-chasm-of-despair/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-adoption-and-success-navigating-the-chasm-of-despair</link>
		<comments>http://sympmarc.com/2011/08/10/sharepoint-adoption-and-success-navigating-the-chasm-of-despair/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 14:45:04 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[death]]></category>
		<category><![CDATA[Sadie Van Buren]]></category>
		<category><![CDATA[SharePoint Maturity Model]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14086</guid>
		<description><![CDATA[Every time I see Sadie Van Buren talk about her truly excellent SharePoint Maturity Model, I think of Elisabeth Kubler-Ross’ work on Death and Dying. Yes, that may sound weird, but I find that many technology implementations do through the same phases to some degree. Here are the five stages, as documented on Wikipedia: 1. &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/10/sharepoint-adoption-and-success-navigating-the-chasm-of-despair/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 0px 0px 10px; display: inline; float: right;" src="http://images.bookbyte.com/isbn.aspx?isbn=9780020891413&amp;height=180&amp;width=142" alt="" align="right" />Every time I see Sadie Van Buren talk about her truly excellent <a href="http://sharepointmaturity.com" target="_blank">SharePoint Maturity Model</a>, I think of Elisabeth Kubler-Ross’ work on Death and Dying. Yes, that may sound weird, but I find that many technology implementations do through the same phases to some degree.</p>
<p>Here are the five stages, as <a href="http://en.wikipedia.org/wiki/K%C3%BCbler-Ross_model" target="_blank">documented on Wikipedia</a>:</p>
<blockquote><p>1. Denial — &#8220;I feel fine.&#8221;; &#8220;This can&#8217;t be happening, not to me.&#8221;</p>
<p>Denial is usually only a temporary defense for the individual. This feeling is generally replaced with heightened awareness of possessions and individuals that will be left behind after death.</p>
<p>2. Anger — &#8220;Why me? It&#8217;s not fair!&#8221;; &#8220;How can this happen to me?&#8221;; &#8216;&#8221;Who is to blame?&#8221;</p>
<p>Once in the second stage, the individual recognizes that denial cannot continue. Because of anger, the person is very difficult to care for due to misplaced feelings of rage and envy.</p>
<p>3. Bargaining — &#8220;I&#8217;ll do anything for a few more years.&#8221;; &#8220;I will give my life savings if&#8230;&#8221;</p>
<p>The third stage involves the hope that the individual can somehow postpone or delay death. Usually, the negotiation for an extended life is made with a higher power in exchange for a reformed lifestyle. Psychologically, the individual is saying, &#8220;I understand I will die, but if I could just do something to buy more time&#8230;&#8221;</p>
<p>4. Depression — &#8220;I&#8217;m so sad, why bother with anything?&#8221;; &#8220;I&#8217;m going to die&#8230; What&#8217;s the point?&#8221;; &#8220;I miss my loved one, why go on?&#8221;</p>
<p>During the fourth stage, the dying person begins to understand the certainty of death. Because of this, the individual may become silent, refuse visitors and spend much of the time crying and grieving. This process allows the dying person to disconnect from things of love and affection. It is not recommended to attempt to cheer up an individual who is in this stage. It is an important time for grieving that must be processed.</p>
<p>5. Acceptance — &#8220;It&#8217;s going to be okay.&#8221;; &#8220;I can&#8217;t fight it, I may as well prepare for it.&#8221;</p>
<p>In this last stage, the individual begins to come to terms with her/his mortality or that of a loved one.</p></blockquote>
<p>Replace &#8220;death&#8221; and &#8220;loved one&#8221; with &#8220;SharePoint implementation&#8221; liberally, and you may see what I mean. SharePoint is just the technology; we&#8217;re asking people to fundamentally change the way they work. That&#8217;s hard, and going through the denial-anger-bargaining-depression-acceptance path is natural in most significant changes we have imposed on us. Change sucks, and we all have to deal with it every day.</p>
<p>(Please don&#8217;t think that I am in any way trivializing what people go through with a death. Far from it. I just find that this model applies to more situations than EKR originally intended.)</p>
<p>There is almost always a “chasm of despair” people must accelerate through to succeed with a significant change, whether a technology change or any other. One of my theories is that the organizations that have a high velocity when they enter the chasm can get out of it faster. There are some leading indicators for this, which are soft and fuzzy, just like all technologists look for. Not.</p>
<p>The things I look for in organizations that I think are indications for success:</p>
<ul>
<li>Organizations which are strategically and organizationally nimble</li>
<li>Flatter reporting structures</li>
<li>Organizations without rigid job descriptions (the willingness and encouragement to step out of one’s role as needed)</li>
</ul>
<p>Note that budget doesn&#8217;t always enter into it. I&#8217;ve seen organizations do amazing things on a shoestring and I&#8217;ve seen $100 million spent for little to no return. (Literally. I was part of a $100 million effort that was a total failure, IMHO.) Oh, there&#8217;s another indication: the ability to name something a failure, accept the blame for it, and learn from it openly.</p>
<p>One of the HUGE things that I feel has been missing in SharePoint&#8217;s first 10 years is a clear focus on measurable results. As <a href="http://www.linkedin.com/pub/christian-finn/4/59/622" target="_blank">Christian Finn</a> kept saying at <a href="http://sptechcon.com/Boston2011/" target="_blank">this summer&#8217;s SPTechCon</a> keynote: deployment is not adoption. Unfortunately, it&#8217;s taken 10 years for Microsoft to really say this out loud in public.</p>
<p>In other words, we still have a lot of work to do. Sadie&#8217;s model and [hopefully] thinking about change management, and measuring success in meaningful ways (not page hits or number of documents uploaded), can help us reach that next stage of SharePoint maturity. That ought to mean the next level of organizational efficiency and effectiveness on many levels.</p>
<p>What do you think of all of this?</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/10/sharepoint-adoption-and-success-navigating-the-chasm-of-despair/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SharePoint Is Going Away: A Compendium of Content</title>
		<link>http://sympmarc.com/2011/08/07/sharepoint-is-going-away-a-compendium-of-content/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-is-going-away-a-compendium-of-content</link>
		<comments>http://sympmarc.com/2011/08/07/sharepoint-is-going-away-a-compendium-of-content/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 15:20:26 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14081</guid>
		<description><![CDATA[Unless you&#8217;ve been on vacation and disconnected or have taken a mental holiday from the SharePoint blogosphere, you&#8217;ve probably seen or heard of Steve Gaitten&#8216;s post on the The Bamboo Team Blog called SharePoint is Going Away. I thought that I would start to collect the other posts I spot which are responses to Steve&#8217;s &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/07/sharepoint-is-going-away-a-compendium-of-content/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 0px 5px 10px; display: inline; float: right;" src="http://microsoftfeed.com/wp-content/uploads/2010/04/Microsoft-SharePoint-2010-Logo.png" alt="" width="220" height="165" align="right" />Unless you&#8217;ve been on vacation and disconnected or have taken a mental holiday from the SharePoint blogosphere, you&#8217;ve probably seen or heard of <a href="http://community.bamboosolutions.com/members/Steve-Gaitten/default.aspx">Steve Gaitten</a>&#8216;s post on the <a href="http://community.bamboosolutions.com/blogs/bambooteamblog/default.aspx">The Bamboo Team Blog</a> called <a href="http://community.bamboosolutions.com/blogs/bambooteamblog/archive/2011/07/26/sharepoint-is-going-away.aspx" target="_blank">SharePoint is Going Away</a>.</p>
<p>I thought that I would start to collect the other posts I spot which are responses to Steve&#8217;s post, inspired by it, or strongly connected (in my opinion). If nothing else, it&#8217;ll capture this small moment of time for us all to refer back to in a year or two to see how close or far off we all were.</p>
<p>Posts like Steve&#8217;s serve a great value in that they can provoke discussion and debate, which is almost always a good thing. My hope is that the folks in Redmond have at least perused some of this content to see what the community has to say and believes might happen. The Microsoft aircraft carrier can&#8217;t and shouldn&#8217;t change course because of any of it, but they should always be aware of what the community is feeling.</p>
<p>If you have seen a related post, leave a link in the comments and I&#8217;ll keep my list updated.</p>
<p>My own post, <a href="http://sympmarc.com/2011/08/01/sharepoint-is-going-away-another-county-heard-from/">SharePoint Is Going Away – Another County Heard From</a>.</p>
<p>Charlie Maitland (<a href="http://twitter.com/cplcarrot" target="_blank">@cplcarrot</a>) <a href="http://charliem.wordpress.com/2011/08/01/sharepoint-going-awaymy-take/" target="_blank">SharePoint Going Away?–My Take</a></p>
<p>Thuan Nguyen <a href="http://thuansoldier.net/?p=1659" target="_blank">It’s hard to imagine how SharePoint goes away</a></p>
<p>Mike Watson (<a href="http://twitter.com/jmikewatson" target="_blank">@jmikewatson</a>) <a href="http://jmikewatson.wordpress.com/2011/08/02/sharepoint-rumors-of-my-demise-have-been-greatly-exaggerated/">SharePoint: Rumors of My Demise have been Greatly Exaggerated</a></p>
<p>Christian Buckley (<a href="http://twitter.com/buckleyPlanet" target="_blank">@buckleyPlanet</a>) <a href="http://www.buckleyplanet.com/2011/08/sharepoint-is-dead-long-live-sharepoint.html" target="_blank">SharePoint is Dead! Long Live SharePoint!</a></p>
<p>Dan Antion (<a href="http://twitter.com/DAntion" target="_blank">@DAntion</a>) <a href="http://www.sharepointstories.com/2011/08/is-sharepoint-too.html">Is SharePoint Too…?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/07/sharepoint-is-going-away-a-compendium-of-content/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Middle Tier Magic: The SPSTCDC Web Site Speakers and Sessions Pages</title>
		<link>http://sympmarc.com/2011/08/03/middle-tier-magic-the-spstc-web-site-speakers-and-sessions-pages/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=middle-tier-magic-the-spstc-web-site-speakers-and-sessions-pages</link>
		<comments>http://sympmarc.com/2011/08/03/middle-tier-magic-the-spstc-web-site-speakers-and-sessions-pages/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 21:50:38 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[DVWP]]></category>
		<category><![CDATA[SharePoint Saturday the Conference]]></category>
		<category><![CDATA[SPSTC]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14035</guid>
		<description><![CDATA[&#60;UPDATE dateTime=&#8221;2011-08-16&#62; If you missed the webinar, you can watch the recording here. As I mentioned during the webinar, all of the important code bits are shown below. If you have any questions, please feel free to post a comment. &#60;/UPDATE&#62; I&#8217;m not going to make it to what may be the largest SharePoint rodeo &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/03/middle-tier-magic-the-spstc-web-site-speakers-and-sessions-pages/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://spstc.org"><img class="alignright" style="display: inline;" title="Sharepoint Saturday Conference" src="http://sympmarc.com/wp-content/uploads/2011/08/spstc_logo.gif" alt="Sharepoint Saturday Conference" width="314" height="70" align="right" /></a>&lt;UPDATE dateTime=&#8221;2011-08-16&gt;</p>
<p>If you missed the webinar, you can watch the recording <a href="http://www.screencast.com/users/sympmarc/folders/Default/media/9a552b8c-7b5a-4d11-8c92-0621e8bc8f5b" target="_blank">here</a>. As I mentioned during the webinar, all of the important code bits are shown below. If you have any questions, please feel free to post a comment.</p>
<p>&lt;/UPDATE&gt;</p>
<p>I&#8217;m not going to make it to what may be the largest SharePoint rodeo outside of the Microsoft conference in October, but I did want to help out the good folks who are organizing it if I could. Since I can&#8217;t present or carry boxes for the inaugural <a title="SharePoint Saturday: The Conference" href="http://spstc.org" target="_blank">SharePoint Saturday: The Conference</a>, I thought I might be able to improve upon the Speakers and Sessions pages on the Web site a wee bit, so I offered. Michael Lotter and Dux (<a href="http://twitter.com/meetdux" target="_blank">@meetdux</a>) seemed happy to get some assistance, so away I went.</p>
<p>Another thing I thought I could do was offer up an explanation of how I put the pages together. They are built with solid SharePoint Middle Tier development, and looking at how they are built may be useful for people to understand. We didn&#8217;t have to deploy any code to the server and I did it all with SharePoint Designer.</p>
<p>In other words, here&#8217;s the first part of my &#8220;virtual SPSTC session&#8221;. I&#8217;ll also be doing a live, online session after SPSTC with Dux and Michael on Tuesday, August 16 at 2pm EDT [<a href="https://student.gototraining.com/6149j/register/7048331664916968192" target="_blank">register</a>]. In that session, we&#8217;ll talk in some depth about the inner working of the SPSTC site and the pages I built and am describing here. Mark your calendars for this free after-the-conference event!</p>
<p>Here&#8217;s a short video I put together talking about the free, live session on August 16th.<br />
<br /><img src="http://sympmarc.com/wp-content/uploads/2011/08/8-4-2011-22-59-28.png" width="" height="" alt="media" /><br />
</p>
<h3>What&#8217;s a Conference?</h3>
<p>In talking about the SPSTC site with Michael and Dux through email before I did anything, I thought it through like this.</p>
<p>In my mind, there’s a tripod which holds up any conference: speakers, sessions, and slots. (Cute that they all start with “s”, eh?) Each leg of the tripod can be related to 1-n of each of the other legs. So, a speaker can be doing 5 sessions, a session can have two speakers, a session can be offered three times, etc. (One outlier is a session which is offered at different times with different speakers. I’d usually think of that as a different session – it doesn&#8217;t happen often, anyway.)</p>
<p>Building a UI which allows the user to click hyperlinks in *<strong>any</strong>* of the directions is key to cover most of the use cases. So if I’m looking at a speaker, I should be able to click on his sessions as well as his slots. If I’m looking at a slot, I should be able to click on any of the speakers or sessions, etc.</p>
<p>You really need three main pages: one for each leg, each of which need to be sortable and filterable. Each of the pages should have slicing and dicing links at the top and they should be generated dynamically based on what the underlying data contains.</p>
<p>I’ve not seen a good example of this all working well and flexibly, as simple as it seems to be. I have no idea why, unless it’s that conference organizers get too caught up in the details of everything and can’t think in a database-y way.</p>
<h3>The Speakers and Sessions Lists</h3>
<p>There are two fairly simple lists which contain all the Speaker and Sessions info. They are inventively called: Speakers and Sessions. The important columns for each list are shown below, with Sessions on the right and Speakers on the left.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/08/image_thumb.png" alt="image" width="283" height="241" border="0" /></a><a href="http://sympmarc.com/wp-content/uploads/2011/08/image1.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-bottom: 50px; margin-left: 5px; display: inline; background-image: none;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/08/image_thumb1.png" alt="image" width="282" height="137" border="0" /></a></p>
<p>The two lists are related by the Speaker column in the Sessions list; it&#8217;s a Lookup column to the Title in the Speakers list and it allows multiple values for those sessions which have, well, more than one speaker.</p>
<h3>The Speakers Page</h3>
<p>The simpler of the two pages is the Speakers page. It simply lists all of the speakers in alphabetical order by last name. There&#8217;s also link at the top for All which shows the total count of speakers. This link is useful if you arrive at the page to see one speaker and then would like to see all of them again.</p>
<p style="text-align: center;"><a href="http://sympmarc.com/wp-content/uploads/2011/08/SNAGHTML2304fc0.png"><img class="aligncenter" style="background-image: none; margin-top: 0px; margin-bottom: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0pt none;" title="Speakers Page" src="http://sympmarc.com/wp-content/uploads/2011/08/SNAGHTML2304fc0_thumb.png" alt="Speakers Page" width="782" height="371" border="0" /></a></p>
<p>All of the information you see about the speakers is rendered with one Data View Web Part (DVWP). The DVWP uses both the Speakers and Sessions lists in an AggregateDataSource (also known as a Linked Data Source). This allows me to pull the information about each speaker from the Speakers list and also all of the sessions which that speaker will be leading, whether as the primary speaker (simply the first one in each session) or as a co-presenter.</p>
<p>The XSL for the DVWP is where the Middle Tier magic comes in. It&#8217;s not horribly complex, but it&#8217;s not stuff that you can do simply with the DVWP&#8217;s settings. As with most of the DVWPs I build, I wrote most of the XSL by hand so that I could have total control over the XSL templates, both how they worked and how they interrelated.</p>
<p>I won&#8217;t go through the XSL line by line here, but let me give you an overview of the templates and how they are working together. Note that I&#8217;ve renamed the templates from the standard dvt_1 type names to names which ought to make more sense. Good coding guidelines apply to any language you&#8217;re working with!</p>
<ul>
<li>Speakers &#8211; The Speakers template grabs the items we need from the Speakers list, renders the &#8220;All&#8221; link at the top of the page with the count of the speakers, sets up the table to contain them, and calls Speakers.rowview.</li>
<li>Speakers.rowview &#8211; This template renders the information about the speakers. It looks more complicated than it actually is because there&#8217;s a lot of conditional logic so that we don&#8217;t display column labels where there aren&#8217;t values.</li>
<li>Sessions &#8211; Here we go and gather the sessions for each particular speaker so that we can list them out below the speaker&#8217;s biographical information.</li>
<li>Session.rowview &#8211; And finally, this template renders the link to each of the sessions.</li>
</ul>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:stylesheet xmlns:x=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:d=&quot;http://schemas.microsoft.com/sharepoint/dsp&quot; version=&quot;1.0&quot; exclude-result-prefixes=&quot;xsl msxsl ddwrt&quot; xmlns:ddwrt=&quot;http://schemas.microsoft.com/WebParts/v2/DataView/runtime&quot; xmlns:asp=&quot;http://schemas.microsoft.com/ASPNET/20&quot; xmlns:__designer=&quot;http://schemas.microsoft.com/WebParts/v2/DataView/designer&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot; xmlns:SharePoint=&quot;Microsoft.SharePoint.WebControls&quot; xmlns:ddwrt2=&quot;urn:frontpage:internal&quot;&gt;
  &lt;xsl:output method=&quot;html&quot; indent=&quot;no&quot;/&gt;
  &lt;xsl:param name=&quot;URL&quot;&gt;&lt;/xsl:param&gt;
  &lt;xsl:param name=&quot;SpeakerID&quot;&gt;&lt;/xsl:param&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;&gt;
    &lt;xsl:call-template name=&quot;Speakers&quot;/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Speakers&quot;&gt;
    &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Speakers/Rows/Row[
        @ID = $SpeakerID or
        $SpeakerID = '*'
      ]&quot;/&gt;
    &lt;table class=&quot;spstc-speakers&quot; border=&quot;0&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;
      &lt;tr&gt;
        &lt;td class=&quot;spstc-speakers-header&quot;&gt;
          &lt;div class=&quot;title&quot;&gt;Speakers&lt;/div&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;span class=&quot;spstc-speaker-type-link&quot;&gt;
            &lt;xsl:if test=&quot;$SpeakerID = '*'&quot;&gt;
              &lt;xsl:attribute name=&quot;class&quot;&gt;spstc-speaker-type-link spstc-selected&lt;/xsl:attribute&gt;
            &lt;/xsl:if&gt;
            &lt;a href=&quot;{$URL}&quot;&gt;
              All (&lt;xsl:value-of select=&quot;count(/dsQueryResponse/Speakers/Rows/Row)&quot;/&gt;)
            &lt;/a&gt;
          &lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
        &lt;xsl:sort select=&quot;@Last_x0020_Name&quot; order=&quot;ascending&quot;/&gt;
        &lt;xsl:sort select=&quot;@First_x0020_Name&quot; order=&quot;ascending&quot;/&gt;
        &lt;xsl:call-template name=&quot;Speakers.rowview&quot; /&gt;
      &lt;/xsl:for-each&gt;
    &lt;/table&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Speakers.rowview&quot;&gt;
    &lt;xsl:variable name=&quot;NewSpeaker&quot; select=&quot;ddwrt:NameChanged(string(@Title), 0)&quot;/&gt;
    &lt;xsl:if test=&quot;string-length($NewSpeaker) &gt; 0&quot;&gt;
      &lt;tr&gt;
        &lt;td class=&quot;spstc-speaker-title&quot;&gt;
          &lt;xsl:value-of select=&quot;@Title&quot;/&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/xsl:if&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;xsl:if test=&quot;string-length(@Job_x0020_Title) &gt; 0&quot;&gt;
          &lt;xsl:value-of select=&quot;@Job_x0020_Title&quot;/&gt;
        &lt;/xsl:if&gt;
        &lt;xsl:if test=&quot;string-length(@Job_x0020_Title) &gt; 0 and string-length(@Company) &gt; 0&quot;&gt;
          &lt;span&gt; at &lt;/span&gt;
        &lt;/xsl:if&gt;
        &lt;xsl:if test=&quot;string-length(@Company) &gt; 0&quot;&gt;
          &lt;xsl:value-of select=&quot;@Company&quot;/&gt;
        &lt;/xsl:if&gt;
        &lt;xsl:if test=&quot;string-length(@Blog) &gt; 0&quot;&gt;
          &lt;span class=&quot;spstc-speakers-label&quot;&gt;  &lt;a href=&quot;{@Blog}&quot;&gt;  Blog&lt;/a&gt;&lt;/span&gt;
        &lt;/xsl:if&gt;
        &lt;xsl:if test=&quot;string-length(@Twitter) &gt; 0&quot;&gt;
          &lt;span class=&quot;spstc-speakers-label&quot;&gt;  &lt;a href=&quot;http://twitter.com/{@Twitter}&quot;&gt;
            &lt;xsl:choose&gt;
              &lt;xsl:when test=&quot;starts-with(@Twitter, '@')&quot;&gt;
                &lt;xsl:value-of select=&quot;concat('  ', @Twitter)&quot;/&gt;
              &lt;/xsl:when&gt;
              &lt;xsl:otherwise&gt;
                &lt;xsl:value-of select=&quot;concat('  @', @Twitter)&quot;/&gt;
              &lt;/xsl:otherwise&gt;
            &lt;/xsl:choose&gt;
            &lt;/a&gt;
          &lt;/span&gt;
        &lt;/xsl:if&gt;
        &lt;xsl:if test=&quot;@MCM.value = 1&quot;&gt;
          &lt;span class=&quot;spstc-speakers-label&quot;&gt;  MCM&lt;/span&gt;
        &lt;/xsl:if&gt;
        &lt;xsl:if test=&quot;@MVP.value = 1&quot;&gt;
          &lt;span class=&quot;spstc-speakers-label&quot;&gt;  MVP&lt;/span&gt;
        &lt;/xsl:if&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;xsl:if test=&quot;string-length(@Bio) &gt; 0&quot;&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;span class=&quot;spstc-speaker-bio&quot;&gt;&lt;xsl:value-of select=&quot;@Bio&quot; disable-output-escaping=&quot;yes&quot;/&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/xsl:if&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;xsl:call-template name=&quot;Sessions&quot;&gt;
          &lt;xsl:with-param name=&quot;ThisSpeakerID&quot; select=&quot;concat(@ID, ';#', @Title)&quot;/&gt;
        &lt;/xsl:call-template&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Sessions&quot;&gt;
    &lt;xsl:param name=&quot;ThisSpeakerID&quot;/&gt;
    &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Sessions/Rows/Row[
        contains(@Speaker., $ThisSpeakerID) and
        @_ModerationStatus = 'Approved'
      ]&quot;/&gt;
    &lt;xsl:if test=&quot;count($Rows) &gt; 0&quot;&gt;
      &lt;table class=&quot;spstc-speaker-sessions&quot; border=&quot;0&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;
        &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
          &lt;xsl:call-template name=&quot;Sessions.rowview&quot; /&gt;
        &lt;/xsl:for-each&gt;
      &lt;/table&gt;
    &lt;/xsl:if&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Sessions.rowview&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;a href=&quot;/SitePages/Sessions.aspx?SessionID={@ID}&quot;&gt;&lt;xsl:value-of select=&quot;@Title&quot;/&gt;&lt;/a&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</pre>
<p>There are a few special parameters which I&#8217;m using in the Speakers page&#8217;s XSL:<br />
<a href="http://sympmarc.com/wp-content/uploads/2011/08/image2.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/08/image_thumb2.png" alt="image" width="790" height="36" border="0" /></a></p>
<p>URL is a parameter which I find I almost always set up in my DVWPs. It comes from an IIS Server Variable called URL and simply contains the current page&#8217;s URL. By grabbing that and using it wherever I can, it ensures that the XSL will usually work if I move it to a different location. (I always try to limit the number of literal strings in my XSL where I can.)</p>
<p>The page also accepts a SpeakerID on the Query String. If a value is present, the page filters to only that one speaker. This is useful in clicking over to this page from the Sessions page.</p>
<h3>The Sessions Page</h3>
<p>The Sessions list is simpler, but the page is a little more complicated. On the Sessions page, we&#8217;re more likely to want to filter and sort. At the top of the page, we have a set of filters (one per session type), as well as some sorting choices. We didn&#8217;t try to provide every slice and dice opportunity we could think of; just the most common ones.</p>
<p style="text-align: left;"><a href="http://sympmarc.com/wp-content/uploads/2011/08/8-3-2011-17-20-131.png"><img class="aligncenter size-full wp-image-14049" title="Sessions Page" src="http://sympmarc.com/wp-content/uploads/2011/08/8-3-2011-17-20-131.png" alt="Sessions Page" width="791" height="417" /></a></p>
<p>As with the Speakers page, I won&#8217;t go through the XSL line by line here, but here&#8217;s a brief overview of the templates:</p>
<ul>
<li>Sessions &#8211; This template gets all of the sessions from the Sessions list and adds the filters and sorting capabilities to the page.</li>
<li>Sessions.body &#8211; We needed a separate body template this time because we wanted to do several types of sorting.</li>
<li>Sessions.body.SpeakerSort &#8211; In fact, because speakers are Person or Group columns, we needed a special template just to sort them appropriately.</li>
<li>SessionTypes &#8211; This template lists out the session types as links for the filtering capability.</li>
<li>Sessions.rowview &#8211; Here we display the individual session details.</li>
<li>DisplaySpeakers &#8211; Because we can have 1-n speakers, I needed to build this recursive template. If you&#8217;re interested in recursive templates like this, check out my <a href="http://spxslt.codeplex.com" target="_blank">SPXSLT Codeplex Project</a>, where I offer up quite a few others.</li>
<li>SortLink &#8211; We needed the sort links to work either ascending or descending and to change based on the last sort requested. This template handles all of that generically and works for any LinkText and ColumnName I pass into it.</li>
</ul>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:stylesheet xmlns:x=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:d=&quot;http://schemas.microsoft.com/sharepoint/dsp&quot; version=&quot;1.0&quot; exclude-result-prefixes=&quot;xsl msxsl ddwrt&quot; xmlns:ddwrt=&quot;http://schemas.microsoft.com/WebParts/v2/DataView/runtime&quot; xmlns:asp=&quot;http://schemas.microsoft.com/ASPNET/20&quot; xmlns:__designer=&quot;http://schemas.microsoft.com/WebParts/v2/DataView/designer&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot; xmlns:SharePoint=&quot;Microsoft.SharePoint.WebControls&quot; xmlns:ddwrt2=&quot;urn:frontpage:internal&quot;&gt;
  &lt;xsl:output method=&quot;html&quot; indent=&quot;no&quot;/&gt;
  &lt;xsl:param name=&quot;URL&quot;&gt;&lt;/xsl:param&gt;
  &lt;xsl:param name=&quot;SessionType&quot;&gt;&lt;/xsl:param&gt;
  &lt;xsl:param name=&quot;SessionID&quot;&gt;&lt;/xsl:param&gt;
  &lt;xsl:param name=&quot;SortColumn&quot;&gt;&lt;/xsl:param&gt;
  &lt;xsl:param name=&quot;SortDir&quot;&gt;&lt;/xsl:param&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;&gt;
    &lt;xsl:call-template name=&quot;Sessions&quot;/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Sessions&quot;&gt;
    &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Sessions/Rows/Row[@_ModerationStatus = 'Approved']&quot;/&gt;
    &lt;table class=&quot;spstc-sessions&quot; border=&quot;0&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;
      &lt;tr&gt;
        &lt;td class=&quot;spstc-sessions-header&quot;&gt;
          &lt;div class=&quot;title&quot;&gt;Sessions&lt;/div&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;span class=&quot;spstc-session-type-link&quot;&gt;
            &lt;xsl:if test=&quot;$SessionType = '*'&quot;&gt;
              &lt;xsl:attribute name=&quot;class&quot;&gt;spstc-session-type-link spstc-selected&lt;/xsl:attribute&gt;
            &lt;/xsl:if&gt;
            &lt;a href=&quot;{$URL}&quot;&gt;
              All (&lt;xsl:value-of select=&quot;count($Rows)&quot;/&gt;)
            &lt;/a&gt;
          &lt;/span&gt;
          &lt;xsl:for-each select=&quot;$Rows[string-length(@Session_x0020_Type) &gt;0]&quot;&gt;
            &lt;xsl:sort select=&quot;@Session_x0020_Type&quot; order=&quot;ascending&quot;/&gt;
            &lt;xsl:call-template name=&quot;SessionTypes&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;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;
          Sort by:
          &lt;xsl:call-template name=&quot;SortLink&quot;&gt;
            &lt;xsl:with-param name=&quot;LinkText&quot; select=&quot;'Session Name'&quot;/&gt;
            &lt;xsl:with-param name=&quot;ColumnName&quot; select=&quot;'Title'&quot;/&gt;
          &lt;/xsl:call-template&gt;
          &lt;xsl:call-template name=&quot;SortLink&quot;&gt;
            &lt;xsl:with-param name=&quot;LinkText&quot; select=&quot;'Lead Speaker'&quot;/&gt;
            &lt;xsl:with-param name=&quot;ColumnName&quot; select=&quot;'Speaker.'&quot;/&gt;
          &lt;/xsl:call-template&gt;
          &lt;xsl:call-template name=&quot;SortLink&quot;&gt;
            &lt;xsl:with-param name=&quot;LinkText&quot; select=&quot;'Session Level'&quot;/&gt;
            &lt;xsl:with-param name=&quot;ColumnName&quot; select=&quot;'Session_x0020_Level'&quot;/&gt;
          &lt;/xsl:call-template&gt;
          &lt;xsl:call-template name=&quot;SortLink&quot;&gt;
            &lt;xsl:with-param name=&quot;LinkText&quot; select=&quot;'Session Type'&quot;/&gt;
            &lt;xsl:with-param name=&quot;ColumnName&quot; select=&quot;'Session_x0020_Type'&quot;/&gt;
          &lt;/xsl:call-template&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;xsl:choose&gt;
        &lt;xsl:when test=&quot;$SortColumn = 'Speaker.'&quot;&gt;
          &lt;xsl:call-template name=&quot;Sessions.body.SpeakerSort&quot;&gt;
            &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot;/&gt;
          &lt;/xsl:call-template&gt;
        &lt;/xsl:when&gt;
        &lt;xsl:otherwise&gt;
          &lt;xsl:call-template name=&quot;Sessions.body&quot;&gt;
            &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot;/&gt;
          &lt;/xsl:call-template&gt;
        &lt;/xsl:otherwise&gt;
      &lt;/xsl:choose&gt;
    &lt;/table&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Sessions.body&quot;&gt;
    &lt;xsl:param name=&quot;Rows&quot;/&gt;
    &lt;xsl:for-each select=&quot;$Rows[
        ($SessionType != '*' and @Session_x0020_Type = $SessionType) or
        ($SessionID != '*' and @ID = $SessionID) or
        ($SessionType = '*' and $SessionID = '*')
      ]&quot;&gt;
      &lt;xsl:sort select=&quot;@*[name()=$SortColumn]&quot; order=&quot;{$SortDir}&quot; /&gt;
      &lt;xsl:call-template name=&quot;Sessions.rowview&quot; /&gt;
    &lt;/xsl:for-each&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Sessions.body.SpeakerSort&quot;&gt;
    &lt;xsl:param name=&quot;Rows&quot;/&gt;
    &lt;xsl:for-each select=&quot;$Rows[
        ($SessionType != '*' and @Session_x0020_Type = $SessionType) or
        ($SessionID != '*' and @ID = $SessionID) or
        ($SessionType = '*' and $SessionID = '*')
      ]&quot;&gt;
      &lt;xsl:sort select=&quot;/dsQueryResponse/Speakers/Rows/Row[@ID = substring-before(current()/@Speaker., ';#')]/@Last_x0020_Name&quot; order=&quot;{$SortDir}&quot; /&gt;
      &lt;xsl:call-template name=&quot;Sessions.rowview&quot; /&gt;
    &lt;/xsl:for-each&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;SessionTypes&quot;&gt;
    &lt;xsl:param name=&quot;Rows&quot;/&gt;
    &lt;xsl:variable name=&quot;NewSessionType&quot; select=&quot;ddwrt:NameChanged(string(@Session_x0020_Type), 0)&quot;/&gt;
    &lt;xsl:if test=&quot;string-length($NewSessionType) &gt; 0&quot;&gt;
      &lt;span class=&quot;spstc-session-type-link&quot;&gt;
        &lt;xsl:if test=&quot;$SessionType = @Session_x0020_Type&quot;&gt;
          &lt;xsl:attribute name=&quot;class&quot;&gt;spstc-session-type-link spstc-selected&lt;/xsl:attribute&gt;
        &lt;/xsl:if&gt;
        &lt;a href=&quot;{$URL}?SessionType={@Session_x0020_Type}&quot;&gt;
          &lt;xsl:value-of select=&quot;@Session_x0020_Type&quot;/&gt; (&lt;xsl:value-of select=&quot;count($Rows[@Session_x0020_Type = current()/@Session_x0020_Type])&quot;/&gt;)
        &lt;/a&gt;
      &lt;/span&gt;
    &lt;/xsl:if&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;Sessions.rowview&quot;&gt;
    &lt;tr&gt;
      &lt;td class=&quot;spstc-session-title&quot;&gt;
        &lt;xsl:value-of select=&quot;@Title&quot;/&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;span class=&quot;spstc-sessions-label&quot;&gt;Speaker(s): &lt;/span&gt;
        &lt;xsl:call-template name=&quot;DisplaySpeakers&quot;&gt;
          &lt;xsl:with-param name=&quot;Speakers&quot; select=&quot;@Speaker.&quot;/&gt;
        &lt;/xsl:call-template&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;span class=&quot;spstc-sessions-label&quot;&gt;Session Level: &lt;/span&gt; &lt;xsl:value-of select=&quot;@Session_x0020_Level&quot;/&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;span class=&quot;spstc-sessions-label&quot;&gt;Session Type: &lt;/span&gt; &lt;xsl:value-of select=&quot;@Session_x0020_Type&quot;/&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;spstc-session-description&quot;&gt;
        &lt;xsl:value-of select=&quot;@Description&quot; disable-output-escaping=&quot;yes&quot;/&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/xsl:template&gt;

  &lt;!-- 110;#Joel Ward;#109;#Dave Shimko --&gt;
  &lt;xsl:template name=&quot;DisplaySpeakers&quot;&gt;
    &lt;xsl:param name=&quot;Speakers&quot;/&gt;
    &lt;xsl:param name=&quot;MultiSelectDelimiter&quot; select=&quot;';#'&quot;/&gt;
    &lt;xsl:param name=&quot;MultiSelectSeparator&quot;/&gt;
    &lt;xsl:variable name=&quot;ThisSpeakerID&quot; select=&quot;substring-before($Speakers, $MultiSelectDelimiter)&quot;/&gt;
    &lt;xsl:variable name=&quot;ThisSpeakerName&quot;&gt;
      &lt;xsl:choose&gt;
        &lt;xsl:when test=&quot;string-length(substring-before(substring-after($Speakers, $MultiSelectDelimiter), $MultiSelectDelimiter)) &gt; 0&quot;&gt;
          &lt;xsl:value-of select=&quot;substring-before(substring-after($Speakers, $MultiSelectDelimiter), $MultiSelectDelimiter)&quot;/&gt;
        &lt;/xsl:when&gt;
        &lt;xsl:otherwise&gt;
          &lt;xsl:value-of select=&quot;substring-after($Speakers, $MultiSelectDelimiter)&quot;/&gt;
        &lt;/xsl:otherwise&gt;
      &lt;/xsl:choose&gt;
    &lt;/xsl:variable&gt;
    &lt;xsl:variable name=&quot;OtherSpeakers&quot; select=&quot;substring-after($Speakers, concat($MultiSelectDelimiter, $ThisSpeakerName, $MultiSelectDelimiter))&quot;/&gt;

    &lt;a href=&quot;/SitePages/Speakers.aspx?SpeakerID={$ThisSpeakerID}&quot;&gt;
      &lt;xsl:value-of select=&quot;$ThisSpeakerName&quot;/&gt;
    &lt;/a&gt;
    &lt;xsl:if test=&quot;string-length($OtherSpeakers) &gt; 0&quot;&gt;
      &lt;xsl:value-of select=&quot;', '&quot;/&gt;
      &lt;xsl:call-template name=&quot;DisplaySpeakers&quot;&gt;
        &lt;xsl:with-param name=&quot;Speakers&quot; select=&quot;$OtherSpeakers&quot;/&gt;
      &lt;/xsl:call-template&gt;
    &lt;/xsl:if&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;SortLink&quot;&gt;
    &lt;xsl:param name=&quot;LinkText&quot;/&gt;
    &lt;xsl:param name=&quot;ColumnName&quot;/&gt;
    &lt;xsl:variable name=&quot;ASortIMG&quot; select=&quot;'/SiteAssets/spstc/images/ascending.png'&quot;/&gt;
    &lt;xsl:variable name=&quot;DSortIMG&quot; select=&quot;'/SiteAssets/spstc/images/descending.png'&quot;/&gt;
    &lt;xsl:variable name=&quot;AscDesc&quot;&gt;
      &lt;xsl:choose&gt;
        &lt;xsl:when test=&quot;$ColumnName = $SortColumn and (string-length($SortDir) = 0 or $SortDir = 'ascending')&quot;&gt;descending&lt;/xsl:when&gt;
        &lt;xsl:otherwise&gt;ascending&lt;/xsl:otherwise&gt;
      &lt;/xsl:choose&gt;
    &lt;/xsl:variable&gt;
    &lt;span class=&quot;spstc-sort-column-link&quot;&gt;
      &lt;a href=&quot;{$URL}?SessionType={$SessionType}&amp;amp;SessionID={$SessionID}&amp;amp;SortColumn={$ColumnName}&amp;amp;SortDir={$AscDesc}&quot;&gt;
        &lt;xsl:if test=&quot;$SortColumn = $ColumnName&quot;&gt;
          &lt;xsl:attribute name=&quot;class&quot;&gt;spstc-sort-column-link spstc-selected&lt;/xsl:attribute&gt;
        &lt;/xsl:if&gt;
        &lt;xsl:value-of select=&quot;$LinkText&quot;/&gt;
        &lt;span class=&quot;spstc-sort-indicator&quot;&gt;
          &lt;xsl:choose&gt;
            &lt;xsl:when test=&quot;$ColumnName = $SortColumn and ($SortDir = '' or $SortDir = 'ascending')&quot;&gt;
              &lt;img alt=&quot;Ascending - Click to Reverse&quot; border=&quot;0&quot; src=&quot;{$ASortIMG}&quot;/&gt;
            &lt;/xsl:when&gt;
            &lt;xsl:when test=&quot;$ColumnName = $SortColumn and $SortDir = 'descending'&quot;&gt;
              &lt;img alt=&quot;Descending - Click to Reverse&quot; border=&quot;0&quot; src=&quot;{$DSortIMG}&quot;/&gt;
            &lt;/xsl:when&gt;
            &lt;xsl:otherwise&gt;
            &lt;/xsl:otherwise&gt;
          &lt;/xsl:choose&gt;
        &lt;/span&gt;
      &lt;/a&gt;
    &lt;/span&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</pre>
<p>As with the Speakers page, there are some special parameters in use here:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/08/image3.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/08/image_thumb3.png" alt="image" width="843" height="86" border="0" /></a></p>
<p>I&#8217;ve already explained URL, and the SessionID works basically the same way as the SpeakerID. If we pass a SessionID, then only that one session is shown.</p>
<p>SessionType is also used as a filtering mechanism. I like to use &#8220;*&#8221; for &#8220;All&#8221;, just like when you use an asterisk for wildcard searches.</p>
<p>The SortColumn and SortDir Query String parameters drive the sorting capability. I mimic what SharePoint does in List View Web Parts here when you sort using the column headers.</p>
<h3>The CSS</h3>
<p>There isn&#8217;t a lot of unique CSS for all of this, but I did write some. It&#8217;s probably not as lean as some would do, but it works. If you only use the Common Dialogs, the custom CSS is messy, embedded in the page, and can&#8217;t be used elsewhere. I usually move it into a separate CSS file. You can see where I&#8217;ve applied the classes above. You&#8217;ve probably noticed that I&#8217;m still sort of fond of table-based layouts. I get the whole &#8220;tables are evil&#8221; thing, but in cases like this, I find that tables work great.</p>
<pre class="brush: css; title: ; notranslate">
.spstc-sessions, .spstc-speakers {
	margin-left:100px;
	font-size:12px;
	color:#4f4e4e;
}
.spstc-sessions td, .spstc-speakers td {
	padding-bottom:5px;
	padding-left:10px;
	padding-top:5px;
}
.spstc-session-type-link, .spstc-speaker-type-link {
	padding-right:5px;
	margin-right:5px;
	border-right:2px #4f4e4e solid;
}
span.spstc-sort-column-link {
	padding-left:5px;
	padding-right:5px;
	border-right:2px #4f4e4e solid;
	vertical-align:middle;
}
.spstc-sort-indicator {
	padding-left:2px;
}
.spstc-session-title, .spstc-speaker-title {
	line-height: 150%;
	border-bottom:5px #ffffff solid;
	border-top:5px #ffffff solid;
	background-color:#4f4e4e;
	font-size:12px;
	font-weight:bold;
	color:#ffffff;
}
.spstc-sessions-label, .spstc-speakers-label {
	font-weight:bold;
}
.spstc-session-description {
	padding-bottom:20px;
}
.spstc-speaker-bio {
	padding-bottom:5px;
}
.spstc-selected {
	font-weight:bold;
}
</pre>
<h3>Conclusion</h3>
<p>Well, there you have it. Now you have a lot of the main ingredients to setup a SharePoint-driven conference site. Well, at least the Speakers and Sessions bits. You still have to carry all of those boxes and get all the speakers to show up with something to say. This is the easy part!</p>
<p>Remember, we&#8217;re going to do a live session on August 16 at 2pm EDT [<a href="https://student.gototraining.com/6149j/register/7048331664916968192" target="_blank">register</a>] which will go into more detail on all of this. If you&#8217;ve read this far, you probably have a few questions. Be sure to bring &#8216;em along and join us!</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/03/middle-tier-magic-the-spstc-web-site-speakers-and-sessions-pages/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Boston KM Forum Meeting Notes</title>
		<link>http://sympmarc.com/2011/08/02/boston-km-forum-meeting-notes/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=boston-km-forum-meeting-notes</link>
		<comments>http://sympmarc.com/2011/08/02/boston-km-forum-meeting-notes/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 05:01:05 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[KM Forum]]></category>
		<category><![CDATA[Knowledge Management]]></category>
		<category><![CDATA[Performance Improvement]]></category>
		<category><![CDATA[Sadie Van Buren]]></category>
		<category><![CDATA[SharePoint Maturity Model]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14023</guid>
		<description><![CDATA[On Wednesday, July 20th, I attended the latest Boston KM Forum meeting at Bentley University. The theme was Fitting SharePoint to Knowledge Initiatives, which the content loosely followed and every presentation was valuable on some level. There were probably about 30-40 people in attendance (crowd estimation not being my forte). It seemed that the majority &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/02/boston-km-forum-meeting-notes/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 10px 0px 0px; display: inline; float: left;" src="http://kmforum.org/Images/logos/KMF-Optima.gif" alt="" width="82" height="82" align="left" />On Wednesday, July 20th, I attended the latest <a href="http://kmforum.org/" target="_blank">Boston KM Forum</a> meeting at Bentley University. The theme was <a href="http://kmforum.org/blog/?p=994">Fitting SharePoint to Knowledge Initiatives</a>, which the content loosely followed and every presentation was valuable on some level.</p>
<p>There were probably about 30-40 people in attendance (crowd estimation not being my forte). It seemed that the majority of people in attendance had some exposure to SharePoint or worked with it on a regular basis. Since the KM Forum covers far more topics than just SharePoint, there were also some people who had never touched SharePoint. That made for a refreshing change in the tenor of some of the discussion.</p>
<p>I sat on the &#8220;Panel of Experts&#8221; by invitation, and it was great to be able to answer questions and espouse on how I feel SharePoint supports good knowledge management, as my background with knowledge management goes way back to the mid-1990s when I focused on KM and performance improvement while working at Renaissance Solutions (sadly defunct).</p>
<p>It&#8217;s interesting to step out of my SharePoint cocoon from time to time to see what &#8220;real&#8221; people think of it. There still seems to be a lingering distrust of SharePoint, probably more due to it being a Microsoft product  than any specific shortcomings as a technology. However, when you view SharePoint from a knowledge management perspective, there are definitely warts.</p>
<p>As I wrote in my <a href="http://sympmarc.com/2011/08/01/sharepoint-is-going-away-another-county-heard-from/" target="_blank">last post</a>, we need to constantly be asking ourselves if what we are building for organizations with SharePoint is really good enough. When you hold those implementations up to the core tenets of the knowledge management dream (or the collaboration dream which has followed it), they don&#8217;t usually get high marks.</p>
<p>This is mirrored in the results that <a href="http://amatterofdegree.typepad.com/" target="_blank">Sadie Van Buren</a> (<a href="http://twitter.com/sadalit" target="_blank">@sadalit</a>) has gathered for baseline data in her fantastic work with the <a href="http://sharepointmaturity.com/" target="_blank">SharePoint Maturity Model</a>. While we are doing some good things with SharePoint, there&#8217;s just so much more we can do.</p>
<p>The full agenda (with links to presentations, where available) are below. I&#8217;ve &#8220;borrowed&#8221; this from Lynda Moulton&#8217;s blog post link above, so if you&#8217;re interested there may be more up-to-date follow up there.</p>
<p><em><strong>What is SharePoint and When do you need a 3rd-party add-in?, Analyst Perspective</strong></em> (9:30 – 10:15) – <strong><a href="http://www.forrester.com/rb/analyst/leslie_owens">Leslie Owens</a></strong>, Senior Analyst, Forrester Research</p>
<p>Break: 10:15 – 10:30</p>
<p><em><strong>The Process for Selecting any Collaboration/Content tool, Recommendations for the Buyer </strong></em>(10:30 – 11:15) – <strong><a href="http://www.realstorygroup.com/Who-We-Are/Analysts/22-Gingras">Jarrod Gingras</a></strong>, Analyst, Real Story Group</p>
<p><a href="http://kmforum.org/blog/wp-content/uploads/2011/05/thomas-km-forum-parthenon-sharepoint-case-study_final-07202011.pdf"><em><strong>A Case Study featuring SharePoint, User/Implementer Perspective</strong></em></a> (11:15 – 12:00) – <strong>Glynys Thomas</strong>, Senior Knowledge Manager, The Parthenon Group</p>
<p>Lunch: 12: – 12:45</p>
<p><a href="http://www.slideshare.net/sadalit/planning-for-sharepoint-the-sharepoint-maturity-model-as-presented-72011-at-the-boston-knowledge-management-forum"><em><strong>Planning for SharePoint: SharePoint Maturity Model</strong></em></a> (12:45– 1:45) -<strong> <a href="http://amatterofdegree.typepad.com/a_matter_of_degree/">Sadie Van Buren</a></strong>, Senior Software Engineer, BlueMetal Architects</p>
<p><strong><em>Panel of Experts: </em></strong><strong>Marc Anderson, </strong><em>Sympraxis Consulting</em><strong>, </strong><strong>Mike Gilronan,<em> </em></strong><em>KMA LLC</em><strong><em>, </em>Michele Smith<em>, </em></strong><em>The MITRE Corporation</em><strong>, Marc Solomon<em>, </em></strong><em>PRTM</em><strong><br />
</strong></p>
<p>Moderator, Larry Chait, <a href="http://kmforum.org/blog/wp-content/uploads/2011/05/lpc-kmf-bentley-07202011.pdf">set the stage</a>for SharePoint preparedness, then introduced the panelists by asking each one a question to set the stage for their perspectives.</p>
<p><strong>Suggested Topical Areas for the Q &amp; A<br />
</strong></p>
<ul>
<li>Selection and justification [MS is offering many non-profits “free” SharePoint. Should you take them up on it?]</li>
<li>Implementation and integration [What is the best implementation approach after choosing SharePoint as the platform?]</li>
<li>Interface design and usability [What features in SharePoint 2010 contribute the most usability benefits in your organization?]</li>
<li>What have you learned about SharePoint that makes it valuable in a knowledge sharing environment?</li>
<li>Taxonomy and search [How is the taxonomy being developed and implemented to support better search?]</li>
<li>Security, scaling and support [Where are the bottlenecks and what are the issues that had to be confronted in your enterprise?</li>
</ul>
<p><em><strong>Wrap-up: </strong></em><strong>Larry Chait,</strong> Chait &amp; Associates</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/02/boston-km-forum-meeting-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Is Going Away &#8211; Another County Heard From</title>
		<link>http://sympmarc.com/2011/08/01/sharepoint-is-going-away-another-county-heard-from/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-is-going-away-another-county-heard-from</link>
		<comments>http://sympmarc.com/2011/08/01/sharepoint-is-going-away-another-county-heard-from/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 13:25:48 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Bamboo Solutions]]></category>
		<category><![CDATA[Office365]]></category>
		<category><![CDATA[ShareVolution]]></category>
		<category><![CDATA[Stever Gaitten]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=14015</guid>
		<description><![CDATA[I tweeted that last Friday, a few days after Steve Gaitten posted &#8220;that post&#8221; (as I&#8217;ve seen people calling it on Twitter) called SharePoint is Going Awayon the Bamboo Team Blog. I was been on vacation last week, so I suppose I&#8217;ve missed the first wave of reaction to Steve&#8217;s post, but the reaction seems &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/08/01/sharepoint-is-going-away-another-county-heard-from/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<!-- tweet id : 96957415077064706 --><style type='text/css'>#bbpBox_96957415077064706 a { text-decoration:none; color:#0084B4; }#bbpBox_96957415077064706 a:hover { text-decoration:underline; }</style><div id='bbpBox_96957415077064706' 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;'>Whether you agree or not, interesting article: "SharePoint Is Going Away" <a href="http://ow.ly/1v6T5o" rel="nofollow">http://ow.ly/1v6T5o</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 July 29, 2011 9:57 am' href='http://twitter.com/#!/sympmarc/status/96957415077064706' target='_blank'>July 29, 2011 9:57 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=96957415077064706&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=96957415077064706&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=96957415077064706&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>I tweeted that last Friday, a few days after <a href="http://community.bamboosolutions.com/members/Steve-Gaitten/default.aspx">Steve Gaitten</a> posted &#8220;that post&#8221; (as I&#8217;ve seen people calling it on Twitter) called <a href="http://community.bamboosolutions.com/blogs/bambooteamblog/archive/2011/07/26/sharepoint-is-going-away.aspx" target="_blank">SharePoint is Going Away</a>on the Bamboo Team Blog.</p>
<p>I was been on vacation last week, so I suppose I&#8217;ve missed the first wave of reaction to Steve&#8217;s post, but the reaction seems to have been strong and dismissive. Being totally dismissive seems closed-minded to me.</p>
<p>When I posted this to Twitter and Facebook, the reactions I got back were things like this:</p>
<p>&#8220;i find it incredibly ignorant&#8221;</p>
<p>&#8220;Just the art of provoking.&#8221;</p>
<p>&#8220;i think he needs to get out more.&#8221;</p>
<p>It seems that reactions tend to be violent and percussive when someone starts attacking the bottom line. Fear drives more rapid reactions than ennui. What I see happening with the Bamboo article seems more like one of those fear reactions. Because there could seem to be an ounce of truth to it, people want to believe it to be tripe. Of course, only time will tell whether the article is prescient or just another road kill on the highway if the InterWebs.There are some trends, recent history, and signs which *might* give the theory some validity. Here are some of my thoughts on the whole thing.</p>
<h3>I&#8217;m an MVP, Dang It!</h3>
<p>As an MVP for SharePoint, it might surprise you to know that I&#8217;m privy to very little information that I haven&#8217;t picked up on the Interwaves. Maybe I&#8217;m missing the memos or the conference calls or something (if I am, please someone clue me in) or maybe I&#8217;m just not paying attention in the &#8220;right&#8221; way. I think many people believe that we MVPs are invited to the product teams&#8217; houses for holidays and we get to name their children, but at least in my case, I find that I don&#8217;t know a heck of a lot more than you folks. (The few &#8220;juicy&#8221; details I&#8217;ve heard about SharePoint vNext so far aren&#8217;t really worth talking about, anyway.)</p>
<p><img style="margin: 0px 0px 0px 10px; display: inline; float: right;" src="http://2.bp.blogspot.com/_HHsELBxbLZc/SwrculkT32I/AAAAAAAAAIc/foZunNaLlaU/s1600/Brady+bunch.jpg" alt="" width="240" height="181" align="right" />SharePoint *will* go away. The questions are just when and what will initiate the process. We all know that, right? (Well, some of you younger readers may not believe it as firmly as us older folks. Remember your favorite TV show from when you were a kid? It&#8217;s not on anymore.)</p>
<h3>The Marketing Anathema</h3>
<p>Put yourself in the shoes of the Marketing people at Microsoft who are responsible for the SharePoint brand. They have some choices, which you are all familiar with from the consumer world. They can extend the brand – think Tabasco. (Microsoft Office, now with SharePoint! Microsoft Street and Trips, now better than ever, with SharePoint baked right in!) Or, they can expand the brand. Microsoft SharePoint eCommerce. Microsoft SharePoint Windows. At some point, though, they will have to realize that the brand is not longer as valuable as it once was, or has even become a detriment. That&#8217;s when the SharePoint brand will begin to disappear. Now maybe that&#8217;s already started to happen. It&#8217;s Office365, which contains SharePoint Online, not just SharePoint Online. <img style="margin: 10px 0px 5px 10px; display: inline; float: right;" src="http://www.studebakerpictures.com/pics/Studebaker.avanti.9004.jpg" alt="" width="240" height="160" align="right" />These branding and marketing decisions aren&#8217;t sad or upsetting, they are a natural part of the lifecycle of a product. We don&#8217;t buy Oldsmobiles anymore, or Edsels, or or Avantis. They were all fine brands in their day, but they all disappeared for one reason or another. We drive their descendants; in some cases, the lineage is very clear, in other cases, it isn&#8217;t.</p>
<h3>How Long Do We Have?</h3>
<p>Some of us who are on the SharePoint circuit discuss the lifecycle of SharePoint at the events we go to, either as attendees or speakers. One person has asked me repeatedly &#8220;How much longer do you think we have? What is there going to be after SharePoint for us?&#8221; I never have had good answers for these questions – I&#8217;m not omniscient– but they are questions worth pondering. *Especially* for those of us who answer the question &#8220;What do you do?&#8221; with &#8220;SharePoint,&#8221;, we *have* to be asking these questions. If we don&#8217;t we may unexpectedly end up selling pencils on the street corner.</p>
<p>The upside of all of this is that SharePoint <strong>as we know it</strong> will not be going anywhere very soon at all, barring some external catastrophe. There will be people running SharePoint 2010 for years, just as there are people still running SharePoint 2007, and even SharePoint 2003. (I think I actually heard someone mention still running SharePoint 2001 somewhere off in a corner a few months ago, but I didn&#8217;t believe it. Still running an over-ten-year-old technology? Bah! Can&#8217;t happen. Everyone&#8217;s retired Windows XP, right? Internet Explorer 6?)</p>
<h3>Is It Good Enough?</h3>
<p>The question that each of us needs to ask ourselves is how we want to play the long tail. Some of us will decide to be SharePointilists until we retire, just as there are still people in their 50s who plan to be COBOL jocks until they move to sunnier climes. Others of us will decide that what we love about SharePoint isn&#8217;t SharePoint, but what it enables and therefore we will move along to the next great thing, whatever it may be. Don&#8217;t be the person who unwittingly ends up in the pencil business.</p>
<p>I&#8217;d love to see SharePoint give it another go &#8217;round as a product, and I firmly believe that we will see SharePoint 2013 (or whatever the sorcerers decide to call it). Remember that I have no special information which allows me to say that. What I do think will happen, though, is that SharePoint 2013 will continue to be behind the times in terms of using Web technology effectively</p>
<p>A brand schism may be exactly what we need to surmount this. Some young upstart will absolutely come along and steal SharePoint&#8217;s lunch if the user experience doesn&#8217;t more closely mirror the consumer web (&#8220;Facebook for the Enterprise&#8221;, anyone?). The amount of work it takes to build out business systems with SharePoint at the base will begin to look archaic soon, and in some ways it already does. (A joke I heard recently: What&#8217;s an &#8220;enterprise-class application? One that takes over 200 developers to keep it running.)</p>
<p>Upgrading existing versions of SharePoint to meet the demands of the new wave of users may simply be prohibitive. There may not be a clean, automated way to upgrade all of that spaghetti code that developers have built in the last 10 years using the SharePoint Object Model. I know that there will have to be a fundamental change in the way SharePoint pages are rendered that will cause <a href="http://spservices.codeplex.com/" target="_blank">SPServices</a> to break entirely. Whether it will be this next version or not, I have no idea. In fact, I was really, truly, surprised that SharePoint 2010 didn&#8217;t make SPServices totally break. We&#8217;re operating with a forms UI which hasn&#8217;t changed all that much since about 2005, when the first betas were available for SharePoint 2007. (You can debate me on this all you want, but I dig into the HTML markup for SharePoint for a living, and much of that markup hasn&#8217;t changed significantly, especially in the list forms.). After a while, you stop putting lipstick on the pig, have some bacon for breakfast, and raise some new piglets.</p>
<h3>Insularity Feels Good</h3>
<p>One of the best things about SharePoint is it&#8217;s incredible sense of community. The downside of that is that the community can be somewhat insular. It turns away from negative things about SharePoint (or simply focused on a different set of negatives) and draws together against common foes. That can be both a good and a bad thing.</p>
<p>If you get out into the wild and talk to executives in organizations that have implemented SharePoint, you might be surprised to hear what some of their questions are. Things like &#8220;What has this huge investment done for us&#8221;" or &#8220;Are our people actually working more effectively together?&#8221; (They wouldn&#8217;t be asking the latter if the benefits were obvious.) They don&#8217;t ask about whether User Profile Synchronization is working well or what the right governance model for code deployment ought to be.</p>
<p>Ten years down the road from the first release of SharePoint, having these be some of the major questions is alarming. The norm in the SharePoint community is to say things like &#8220;Well, they just don&#8217;t get it.&#8221; Of course they get it. They&#8217;ve paid the bill and they want something back for their investment. So we SharePoint practitioners need to be constantly looking at what we are doing and asking &#8220;Is this good enough?&#8221; Rarely is it good enough; there&#8217;s always room for improvement. Those of us who don&#8217;t take the time for this sort of honest introspection remind me of one of my favorite quotes in the entire SharePoint sphere, from Dux Raymond Sy: &#8220;SharePoint doesn&#8217;t suck; you suck!&#8221;</p>
<p>SharePoint&#8217;s strong brand has been to it&#8217;s detriment on some levels. It&#8217;s not &#8220;our developers/implementers suck&#8221;, but &#8220;SharePoint sucks&#8221;, which is obviously bad for its makers. I can&#8217;t tell you how many times I&#8217;ve heard the rank and file at organizations say &#8220;I&#8217;ll put that into SharePoint&#8221;. While that&#8217;s a great statement to hear (they are putting it into SharePoint, which is probably the goal), SharePoint isn&#8217;t what *their* application is. It&#8217;s their Intranet or their Team Site, not their &#8220;SharePoint&#8221;.</p>
<h3>SharePoint Subsumed by SaaS?</h3>
<p>Moving from &#8220;on premise&#8221; to &#8220;software as a service&#8221; doesn&#8217;t seem all that far-fetched to me. The major players in the marketplace &#8211; the upstarts &#8211; that have been eroding the big boy&#8217;s market share over the last ten years or so have been the SaaS crown. They tend to be mire nimble, have tighter release cycles, and seem to have far better market-sensing antenna than the old guard. The old guard is no doubt sensing that to remain relevant, they need to adapt.</p>
<p><img style="margin: 0px 0px 0px 10px; display: inline; float: right;" src="http://www.strategicitarchitecture.com/wp-content/uploads/2008/12/cloud-photo1.jpg" alt="" width="230" height="240" align="right" />With Office365, Microsoft has gone &#8220;all in&#8221; (their phrase, not mine) with The Cloud. The cloud is nothing more that the next-gen SaaS or what we used to call time sharing back in the day. We&#8217;ve seen shifts back and firth on this the the 30 years or so that I&#8217;ve been in the business.</p>
<p>Think about the promise of Office365, which very definitely can be considered SaaS, if Microsoft does it right. I have heard that Microsoft claims that they will have a tight (and short) update cycle. I think that&#8217;s very ambitious for a company that has been operating on 3+ years cycles, but let&#8217;s take their word for it.</p>
<p>Some people have wondered why there isn&#8217;t an &#8220;app store&#8221; for SharePoint. (There actually are a few, like the fine work that Dan MacPherson and his team have done on <a href="http://sharevolutionhq.com/" target="_blank">ShareVolution</a>.) Let&#8217;s say that Microsoft starts to offer an app store with widgets (Web Parts, if you will). They could offer enhancements to those widgets regularly, just like Intuit does with my QuickBooks Online subscription. I don&#8217;t develop solutions on top of QuickBooks; they just keep handing them to me as part of my subscription. That&#8217;s why I stick with the online version rather than going backward to the desktop version: the product promises to get better and better.</p>
<p>Having a clear roadmap will be a key ingredient in the success of all of this. This will be another new experience for Microsoft. Can anyone tell me what the key plans are for SharePoint vNext? Not if you don&#8217;t work in a small set of buildings in Redmond, you can&#8217;t. Those update cycles will have to be pretty clearly laid out so that we can trust that we will get better and better capability and can plan for it rather than building it ourselves. Not only should admins be thinking about how Office365 is going to change their daily routine, but developers should, too. Let me assure you that the changes will be more than what causes you to complain loudly about the restrictions that sandboxed solutions put on your otherwise incredibly powerful development skills. It may well be that you need to become more attached to those – ugh, is he really going to say it – actual users to help them navigate the myriad options they get from the platform itself, rather than what you will build for them.</p>
<p>Hint: this has been going on for a long time, and you may have been choosing to ignore it. Users are out there happily sustaining themselves and solving their business problems without ever talking to a developer. Or, unfortunately, in spite of having talked to a developer and having been told &#8220;No, you can&#8217;t have that&#8221;, or &#8220;That will cost a bazillion dollars and won&#8217;t be ready until fiscal 2018.&#8221; The era of centrally managed applications continues to wane, as it has been for decades.</p>
<h3>It&#8217;s the Effect, Not the Technology</h3>
<p>Remember that the biggest upside of what SharePoint provides us its effect, not its technology. It&#8217;s helping to enable change around how we think about work and collaboration. It&#8217;s been a series of tectonic shifts &#8211; it hasn&#8217;t happened rapidly or at times even perceptibly. When I look back at the command and control management structures which were more predominant 10 or 15 years ago (which I never was very comfortable in &#8211; I&#8217;m just not a power guy), I see that technologies like SharePoint: eRoom Jive, Groove, and more currently, Google Apps, perhaps) have helped to drive some of the change . The technology didn&#8217;t do it per se, but the visionaries from the mid 90s are finally seeing some of what they wanted to happen back then in knowledge management&#8217;s heyday. We&#8217;re in the middle of long curve toward flatter, more empowered workforces in our knowledge economy.</p>
<h3>Conclusion</h3>
<p>In conclusion, I appreciated Steve&#8217;s post because it made me think about some of the same trends he was adding together; some of which I&#8217;ve seen adding together as well. As always, anytime there&#8217;s an almost militant response, I think about the provocation even more seriously. In this case, Steve may well be wrong in some of his thinking (whether there were signs for SharePoint at WPC doesn&#8217;t mean much, IMO), but I don&#8217;t believe that he can be entirely wrong. We&#8217;ll see some of the changes he predicts occur; what we will all have to wait and see about is how those changes will manifest and when.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/08/01/sharepoint-is-going-away-another-county-heard-from/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Showing a Spinning Icon When Using SPServices</title>
		<link>http://sympmarc.com/2011/07/27/showing-a-spinning-icon-when-using-spservices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=showing-a-spinning-icon-when-using-spservices</link>
		<comments>http://sympmarc.com/2011/07/27/showing-a-spinning-icon-when-using-spservices/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 05:47:30 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=13991</guid>
		<description><![CDATA[Here&#8217;s another quick question that ought to be useful to many people as they develop solutions with SPServices. Here&#8217;s the original question: Is there a way to add and animate /_layouts/images/gears_an.gif to my SPServices Page while the Service Request is being processed. Everything I have seen seems to require calling SPLongOperation from the code beside. &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/07/27/showing-a-spinning-icon-when-using-spservices/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another quick question that ought to be useful to many people as they develop solutions with <a href="http://spservices.codeplex.com" target="_blank">SPServices</a>. Here&#8217;s <a href="http://spservices.codeplex.com/discussions/266443" target="_blank">the original question</a>:</p>
<blockquote><p>Is there a way to add and animate /_layouts/images/gears_an.gif to my SPServices Page while the Service Request is being processed. Everything I have seen seems to require calling SPLongOperation from the code beside.</p></blockquote>
<p>This is a pretty common goal. We often want to show some sort of indicator while an AJAX call is happening so that the user knows that something is happening and that they may need to wait for a little while.</p>
<p>There are examples of this all over the Web, from SharePoint to Facebook to Google and beyond. Users expect this sort of feedback from Web pages these days.</p>
<p>The image referenced above ought to be a familiar one to frequent SharePoint 2007 users (it&#8217;s also available in SharePoint 2010):</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto;" src="http://www.sympraxisconsulting.com//_layouts/images/gears_an.gif" alt="" /></p>
<p>Here&#8217;s a simple example of how to show this image while a call to a Web Services with SPServices is happening, snipped from one of my test pages:</p>
<pre class="brush: jscript; title: ; notranslate">
var waitMessage = &quot;&lt;table width='100%' align='center'&gt;&lt;tr&gt;&lt;td align='center'&gt;&lt;img src='/_layouts/images/gears_an.gif'/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&quot;;
$(divId).html(waitMessage).SPServices({
  operation: &quot;GetListCollection&quot;,
  completefunc: function (xData, Status) {
    var out = $().SPServices.SPDebugXMLHttpResult({
      node: xData.responseXML,
      outputId: divId
    });
    $(divId).html(&quot;&quot;).append(&quot;&lt;b&gt;This is the output from the GetListCollection operation:&lt;/b&gt;&quot; + out);
  }
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/07/27/showing-a-spinning-icon-when-using-spservices/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tip for Using SPServices with GetListItems</title>
		<link>http://sympmarc.com/2011/07/26/tip-for-using-spservices-with-getlistitems/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tip-for-using-spservices-with-getlistitems</link>
		<comments>http://sympmarc.com/2011/07/26/tip-for-using-spservices-with-getlistitems/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 20:55:05 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[GetListItems]]></category>
		<category><![CDATA[jQuery library for SharePoint Web Services]]></category>
		<category><![CDATA[SPServices]]></category>

		<guid isPermaLink="false">http://sympmarc.com/?p=13984</guid>
		<description><![CDATA[As is often the case, one of the threads on the SPServices Discussions seemed worth bringing over as a blog post. Here&#8217;s the initial question, with the script cleaned up a little for clarity: Any help on this would be greatly appreciated.  When I first completed this project last month it was pulling all of &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/07/26/tip-for-using-spservices-with-getlistitems/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>As is often the case, one of the threads on the <a href="http://spservices.codeplex.com" target="_blank">SPServices</a> Discussions seemed worth bringing over as a blog post. Here&#8217;s <a href="http://spservices.codeplex.com/discussions/266636" target="_blank">the initial question</a>, with the script cleaned up a little for clarity:</p>
<blockquote><p>Any help on this would be greatly appreciated.  When I first completed this project last month it was pulling all of the data from the list.  Now when this script runs it&#8217;s only pulling back 4 out of 16 records.  Can you help me adjust the code to force it to pull all list items?</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;../../Style Library/jquery_library/jquery-1.5.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src= &quot;../../Style Library/jquery_library/jquery.SPServices-0.6.1.min.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
  $(function () {//-----------SPSERVICES GET ALL LIST ITEMS FROM HR KALENDAR
    $().SPServices({
      operation: &quot;GetListItems&quot;,
      async: false,
      listName: &quot;HR Kalendar&quot;,
      completefunc: function (xData, Status) {
        $(xData.responseXML).find(&quot;[nodeName='z:row']&quot;).each(function() { //--------FIND EACH RECORD FROM HR KALENDAR
          ...
        });
      }
    });
  });
</pre>
</blockquote>
<p>Matt Bramer (<a href="http://twitter/com/iOnline247" target="_blank">@iOnline247</a>) was nice enough to reply with this suggestion:</p>
<blockquote><p>What happens if you put a CAML query in there that says ID != 0</p>
<div>
<pre class="brush: xml; title: ; notranslate">&lt;Query&gt;&lt;Where&gt;&lt;Neq&gt;&lt;FieldRef Name='ID' /&gt;&lt;Value Type='Counter'&gt;0&lt;/Value&gt;&lt;/Neq&gt;&lt;/Where&gt;&lt;/Query&gt;</pre>
</div>
<p>I just wrote this query out by hand, so it may need some tweaking.  Throw that into your call and see what happens.</p></blockquote>
<p>Generally speaking Matt&#8217;s suggestion may not be necessary. However, if you don&#8217;t specify any CAML options at all, GetListItems uses the default view for the list. That view may or may not return what you think you&#8217;ve asked for. By specifying *something* for the options, you&#8217;re asking SharePoint to &#8220;step out of&#8221; the default view.</p>
<p>In SPServices itself, I generally do this by specifying:</p>
<pre class="brush: jscript; title: ; notranslate">
// Override the default view rowlimit and get all appropriate rows
CAMLRowLimit: 0,
</pre>
<p>The nice thing about setting the CAMLRowLimit is that you only need to pass zero as a parameter to make SharePoint stop thinking in terms of the default view. It&#8217;s simple, but effective, and doesn&#8217;t require any knowledge of CAML at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/07/26/tip-for-using-spservices-with-getlistitems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving My Blog from WordPress.com to Hosted WordPress.org</title>
		<link>http://sympmarc.com/2011/07/22/moving-my-blog-from-wordpress-com-to-hosted-wordpress-org/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=moving-my-blog-from-wordpress-com-to-hosted-wordpress-org</link>
		<comments>http://sympmarc.com/2011/07/22/moving-my-blog-from-wordpress-com-to-hosted-wordpress-org/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 04:46:53 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Automattic]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[HostGator]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>

		<guid isPermaLink="false">https://sympmarc.com/?p=13968</guid>
		<description><![CDATA[I&#8217;ve been thinking about moving my blog from WordPress.com to some sort of hosted environment running WordPress.org&#8217;s version of WordPress for a while. With all of the jQuery and CSS stuff that I do and other possibilities for customization and monetization, it just makes a lot of sense for me to have more control over &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/07/22/moving-my-blog-from-wordpress-com-to-hosted-wordpress-org/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><img style="display:inline;float:right;margin:0 0 0 10px;" src="http://static.jauhari.net/engine/wp-content/uploads/2011/02/New-WordPress-Logo.png" alt="" align="right" />I&#8217;ve been thinking about moving my blog from WordPress.com to some sort of hosted environment running WordPress.org&#8217;s version of WordPress for a while. With all of the jQuery and CSS stuff that I do and other possibilities for customization and monetization, it just makes a lot of sense for me to have more control over my own blog. I&#8217;ve loved using WordPress.com and their platform is generally fantastic; I&#8217;ve just outgrown it.</p>
<p>It ought to be pretty easy to do a move like this, at least in my limited view of the world. As it turned out, some parts are relatively easy, but other parts are abysmally unclear or just plain don&#8217;t work. I figured I&#8217;d document some of the thornier bits in case other might want to go down this road. I think I&#8217;m a pretty savvy guy, but I ran into some really annoying or undocumented (at least that I could find) things.</p>
<p>WordPress.com&#8217;s site has some <a href="http://en.support.wordpress.com/moving-a-blog" target="_blank">instructions</a> that make all of this sound pretty easy. I mean, it&#8217;s computer stuff. How hard can it be, right?</p>
<p>First off, exporting the content from my existing blog just plain didn&#8217;t work with IE8. I&#8217;ve known for a while now that the WordPress platform doesn&#8217;t work well with IE, but IE is my default browser because it&#8217;s what most of my client work with. I&#8217;m sort of a Microsoft guy.</p>
<p>I kept trying to run the export and was getting errors. I fiddled and fiddled, looking at the XML coming out, tweaking values, etc. For instance, as you can see below, the XML seemed to be malformed. so I tried deleting the offending tags, etc., but to no avail.</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/07/image8.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0;" title="image" src="http://sympmarc.com/wp-content/uploads/2011/07/image_thumb8.png" alt="image" width="671" height="416" border="0" /></a></p>
<p>On a whim, I tried doing the export in Firefox, and it worked fine. On the first try. Once I did the export with Firefox, I had a good XML file so that I could do an import on the other end.</p>
<blockquote><p><strong>Lesson one</strong>: WordPress likes Firefox better than Internet Explorer.</p></blockquote>
<p>I think that is probably a safe statement across the board. There are certainly odd behaviors in the online editor in WordPress with IE, and that&#8217;s probably one of the main reasons why so many of us Microsoft folks use <a href="http://explore.live.com/windows-live-writer" target="_blank">Windows Live Writer</a> instead.</p>
<p><img style="display:inline;float:right;margin:0 0 0 10px;" src="http://compixels.com/wp-content/uploads/2010/10/hostgator-logo.gif" alt="" align="right" />I chose <a href="http://www.hostgator.com/" target="_blank">HostGator</a> for my hosting company. They are on <a href="http://get.wp.com/hosting/" target="_blank">WordPress.com&#8217;s preferred list</a>, my pal Bjorn (<a href="http://twitter.com/furuknap" target="_blank">@furuknap</a>) recommended them, and they are cheap. Well, everyone&#8217;s cheap these days, really. But HostGator has a 20% off thing going, and I love cheap that&#8217;s even cheaper.</p>
<p>When I was setting things up up at HostGator, the site asked for my domain name. I didn&#8217;t think much of that, but it turned out to be a problem. The issue was that once everything was up and running and I installed WordPress (That install was fairly painless – sort of the promised single button click, except for the other 6 fields you had to fill out next without any real explanation. I guess every process starts with the &#8220;one button click&#8221;.), anything I did in the HostGator environment was linking me over to the WordPress.com &#8220;production&#8221; version of my blog – the old one. More fiddling, and I finally started a chat session with someone at HostGator. They were really helpful, but these aren&#8217;t the technologies I focus on, so some of it was Greek to me. It&#8217;s not that I couldn&#8217;t figure it out, but was it worth it? The mumbo-jumbo was different than my usual mumbo-jumbo.</p>
<blockquote><p><strong>Lesson two</strong>: Just because you know one set of technologies well doesn&#8217;t mean that you know all of them.</p></blockquote>
<p>This may be obvious, reader, but don&#8217;t tell me that you haven&#8217;t tried to build a server or something you really shouldn&#8217;t have done. Maybe it&#8217;s that &#8220;man thing&#8221;; asking for directions is actually OK.</p>
<p>What the helpful guy/gal (sometimes it&#8217;s impossible to know in a teeny chat window with foreign names – should I have asked?) ended up doing was setting up temporary URLs for my new HostGator blog site. They would need to switch it back later, but that was supposed to allow me to move forward.</p>
<blockquote><p><strong>Lesson three</strong>: Maybe you shouldn&#8217;t believe *everything* you hear from an expert.</p></blockquote>
<p>Not that s/he was wrong, necessarily, but it didn&#8217;t fix everything.</p>
<p>There were a few more chat sessions at this point to find out passwords and such, but they weren&#8217;t significant. Let it suffice to say that the UI behind the marketing screens don&#8217;t follow through at HostGator any more than they do anywhere else.</p>
<blockquote><p><strong>Lesson four</strong>: When marketing says something will be easy, we all know we shouldn&#8217;t believe that.</p></blockquote>
<p>BUT WE STILL DO. What&#8217;s wrong with us?</p>
<p>The next step was to do the actual import of the XML file. The import kept just stopping with no errors, warnings, or messages of any kind. But when I looked at the setup, I would see all my posts – through December 2007, or March 2008, or&#8230;  Back to Bing, where the posts I found said basically, it will time out and you just need to keep running the import over and over until everything is there. What? Could that be true? Every time I ran the import after the first instance, all sort of errors flew by on the screen. The posts said that was OK, so I kept going.</p>
<blockquote><p><strong>Lesson five</strong>: Sometimes something which just looks totally wrong is supposed to be right?</p></blockquote>
<p>I&#8217;m not so sure about this one.</p>
<p>After eight or ten imports (or more &#8211; I didn&#8217;t count well enough), everything looked like it *might* be there. The errors from the last few imports looked worse and worse, but they were &#8220;OK&#8221;, right?</p>
<p>At this point, I had my blog up and running with the temp URLs in the new environment at HostGator. I don&#8217;t like to trust technology too much, so I started to compare what I currently had on my blog with what I now had ion my new blog. You know, comparing counts of things, how the theme was applied, seeing what was missing, etc.</p>
<blockquote><p><strong>Lesson six</strong>: *Always* check your work.</p></blockquote>
<p>There were still some problems that gave me pause. I&#8217;ve got over 600 posts on my blog with over 2500 comments and 500+ tags (I know, too many tags, but there you go). There&#8217;s far too much there to check everything; all I can do is spot check, really.</p>
<p>Here were my big concerns after more fiddling:</p>
<p>The Post counts on my Tags were all set to zero after import. In the grand scheme of things, maybe this isn’t so important, but I sort of like the Tag Cloud widget. Since all the post counts were zero, the tag cloud was uniquely uninteresting. Singularities are only interesting to physicists. I’m guessing that there’s some script I could run to fix this up (though it should be right from the import, IMO).</p>
<p>On my current blog, I use sourcecode tags supported by the <a href="http://www.viper007bond.com/wordpress-plugins/syntaxhighlighter/">SyntaxHighlighter Evolved plugin</a> to <a href="http://en.support.wordpress.com/code/posting-source-code/">embed source code</a>. I’d like to continue using this plugin, as I find it makes the code snippets the most useful compared to any other approach I’ve seen. My blog is mainly about technology, and it contains a lot of code snippets; they have to be usable or what&#8217;s the point? The issue is that the code snippets in my existing posts seem to have gone across encoded. So rather than seeing this:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/07/clip_image002.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="clip_image002" src="http://sympmarc.com/wp-content/uploads/2011/07/clip_image002_thumb1.jpg" alt="clip_image002" width="594" height="259" border="0" /></a></p>
<p>I was seeing this:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/07/clip_image004.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0;" title="clip_image004" src="http://sympmarc.com/wp-content/uploads/2011/07/clip_image004_thumb.jpg" alt="clip_image004" width="600" height="256" border="0" /></a></p>
<p>Another thing where some script probably would fix things up, but should I have needed to?</p>
<p>The comment count on my new blog was different than on my existing blog. As I mentioned, when I did the import, I had to run it probably eight or more times to get everything imported. On every run after the first, I got all sorts of errors, but it *<strong>seemed</strong>* like most everything moved over. The posts I read said this was “normal”, but since the comment count was different, I wondered what else might be out of whack.</p>
<p>Old blog:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/07/clip_image006.gif"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0;" title="clip_image006" src="http://sympmarc.com/wp-content/uploads/2011/07/clip_image006_thumb.gif" alt="clip_image006" width="156" height="69" border="0" /></a></p>
<p>New blog:</p>
<p><a href="http://sympmarc.com/wp-content/uploads/2011/07/clip_image008.gif"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0;" title="clip_image008" src="http://sympmarc.com/wp-content/uploads/2011/07/clip_image008_thumb.gif" alt="clip_image008" width="162" height="71" border="0" /></a></p>
<p>That didn&#8217;t seem right to me. Since there were all of those odd errors and the numbers didn&#8217;t match, I had no idea what the mismatch was caused by. And the new blog had *more* comments than the old one. How could that make sense?</p>
<p>All this trouble seems so unnecessary! It would seem that when there is an offer of an export/import capability, it should just work. Because I was using WordPress.com, I *couldn&#8217;t* do any wacky customizations; all instances there should be vanilla to a large degree, if not totally.</p>
<p><img style="display:inline;float:right;margin:0 0 0 10px;" src="http://upload.wikimedia.org/wikipedia/en/e/e2/Automattic.png" alt="" align="right" />So after about four hours (or more; I should have kept track), I&#8217;m tossing in the towel. I don&#8217;t want to spend so much time on a one-time activity. I&#8217;m hiring the WordPress Happiness Engineers to do a <a href="http://en.support.wordpress.com/guided-transfer/" target="_blank">Guided Transfer</a> for me.</p>
<blockquote><p><strong>Final lesson</strong>: It doesn&#8217;t always make sense to learn how to do something if you are pretty sure you are only going to do it once.</p></blockquote>
<p>I&#8217;ll probably never move my blog from one platform to another again, or at least I won&#8217;t do it again for a long time. It&#8217;s should be truly worth the $119 I&#8217;m going to pay Automattic | WordPress.com to do the work for me. (I sincerely hope that&#8217;ll turn out to be true; you&#8217;ll hear about it in this space if it isn&#8217;t.)</p>
<p>p.s. Thanks to Josh McCarty and Bjorn Furuknap for their support and suggestions along the way in this process. I hope the two of you don&#8217;t think less of me for hiring the Happiness Engineers.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/07/22/moving-my-blog-from-wordpress-com-to-hosted-wordpress-org/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Summing a Column in a Data View Web Part (DVWP)</title>
		<link>http://sympmarc.com/2011/07/19/summing-a-column-in-a-data-view-web-part-dvwp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=summing-a-column-in-a-data-view-web-part-dvwp</link>
		<comments>http://sympmarc.com/2011/07/19/summing-a-column-in-a-data-view-web-part-dvwp/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 08:12:37 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Data View Web Part]]></category>
		<category><![CDATA[DVWP]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">https://sympmarc.com/?p=13944</guid>
		<description><![CDATA[I have a question for you… In a DVWP is there a way to total a column? Absolutely. The most common approach would be to emit a table row in the dvt_1.body template (or equivalent) which uses the sum() function. An example would be something like this. Let’s assume that you have a column called &#8230; </p><p><a class="more-link block-button" href="http://sympmarc.com/2011/07/19/summing-a-column-in-a-data-view-web-part-dvwp/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="zemanta-img">
<div class="wp-caption alignright" style="width: 310px"><a href="http://commons.wikipedia.org/wiki/File:Programming_language_textbooks.jpg"><img title="A selection of programming language textbooks ..." src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Programming_language_textbooks.jpg/300px-Programming_language_textbooks.jpg" alt="A selection of programming language textbooks ..." width="300" height="204" /></a><p class="wp-caption-text">Image via Wikipedia</p></div>
</div>
<blockquote><p>I have a question for you…</p>
<p>In a DVWP is there a way to total a column?</p></blockquote>
<p>Absolutely.</p>
<p>The most common approach would be to emit a table row in the <code>dvt_1.body</code> template (or equivalent) which uses the <code>sum()</code> function. An example would be something like this.</p>
<p>Let’s assume that you have a column called <strong>Potential Value</strong>, that it’s numeric, and that you’re displaying that column and the <strong>Title</strong>. When you set up the DVWP, your XSL will probably look something like this:</p>
<pre class="brush: xml; title: ; notranslate">
  &lt;xsl:template match=&quot;/&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;dvt_StyleName&quot;&gt;Table&lt;/xsl:variable&gt;
    &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Rows/Row&quot;/&gt;
    &lt;table border=&quot;0&quot; width=&quot;100%&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;
      &lt;tr valign=&quot;top&quot;&gt;
        &lt;xsl:if test=&quot;$dvt_1_automode = '1'&quot; ddwrt:cf_ignore=&quot;1&quot;&gt;
          &lt;th class=&quot;ms-vh&quot; width=&quot;1%&quot; nowrap=&quot;nowrap&quot;&gt;&lt;/th&gt;
        &lt;/xsl:if&gt;
        &lt;th class=&quot;ms-vh&quot; nowrap=&quot;nowrap&quot;&gt;Title&lt;/th&gt;
        &lt;th class=&quot;ms-vh&quot; nowrap=&quot;nowrap&quot;&gt;Potential Value&lt;/th&gt;
      &lt;/tr&gt;
      &lt;xsl:call-template name=&quot;dvt_1.body&quot;&gt;
        &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot;/&gt;
      &lt;/xsl:call-template&gt;
    &lt;/table&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;dvt_1.body&quot;&gt;
    &lt;xsl:param name=&quot;Rows&quot;/&gt;
    &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
      &lt;xsl:call-template name=&quot;dvt_1.rowview&quot;/&gt;
    &lt;/xsl:for-each&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name=&quot;dvt_1.rowview&quot;&gt;
    &lt;tr&gt;
      &lt;xsl:if test=&quot;position() mod 2 = 1&quot;&gt;
        &lt;xsl:attribute name=&quot;class&quot;&gt;ms-alternating&lt;/xsl:attribute&gt;
      &lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;$dvt_1_automode = '1'&quot; ddwrt:cf_ignore=&quot;1&quot;&gt;
        &lt;td class=&quot;ms-vb&quot; width=&quot;1%&quot; nowrap=&quot;nowrap&quot;&gt;
          &lt;span ddwrt:amkeyfield=&quot;ID&quot; ddwrt:amkeyvalue=&quot;ddwrt:EscapeDelims(string(@ID))&quot; ddwrt:ammode=&quot;view&quot;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/xsl:if&gt;
      &lt;td class=&quot;ms-vb&quot;&gt;
        &lt;xsl:value-of select=&quot;@Title&quot;/&gt;
      &lt;/td&gt;
      &lt;td class=&quot;ms-vb&quot;&gt;
        &lt;xsl:value-of select=&quot;@Potential_x0020_Value&quot;/&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/xsl:template&gt;
</pre>
<p>You can add a new row in your XSL to emit the total like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:template name=&quot;dvt_1.body&quot;&gt;
  &lt;xsl:param name=&quot;Rows&quot;/&gt;
  &lt;xsl:for-each select=&quot;$Rows&quot;&gt;
    &lt;xsl:call-template name=&quot;dvt_1.rowview&quot;/&gt;
  &lt;/xsl:for-each&gt;
  &lt;tr&gt;
    &lt;td&gt;
      TOTAL
    &lt;/td&gt;
    &lt;td&gt;
      &lt;xsl:value-of select=&quot;format-number(sum($Rows/@Potential_x0020_Value),'#,##0')&quot;/&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/xsl:template&gt;
</pre>
<p>Or you could add the XSL in the dvt_1 template:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xsl:template name=&quot;dvt_1&quot;&gt;
  &lt;xsl:variable name=&quot;dvt_StyleName&quot;&gt;Table&lt;/xsl:variable&gt;
  &lt;xsl:variable name=&quot;Rows&quot; select=&quot;/dsQueryResponse/Rows/Row&quot;/&gt;
  &lt;table border=&quot;0&quot; width=&quot;100%&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;
    &lt;tr valign=&quot;top&quot;&gt;
      &lt;xsl:if test=&quot;$dvt_1_automode = '1'&quot; ddwrt:cf_ignore=&quot;1&quot;&gt;
        &lt;th class=&quot;ms-vh&quot; width=&quot;1%&quot; nowrap=&quot;nowrap&quot;&gt;&lt;/th&gt;
      &lt;/xsl:if&gt;
      &lt;th class=&quot;ms-vh&quot; nowrap=&quot;nowrap&quot;&gt;Title&lt;/th&gt;
      &lt;th class=&quot;ms-vh&quot; nowrap=&quot;nowrap&quot;&gt;Potential Value&lt;/th&gt;
    &lt;/tr&gt;
    &lt;xsl:call-template name=&quot;dvt_1.body&quot;&gt;
      &lt;xsl:with-param name=&quot;Rows&quot; select=&quot;$Rows&quot;/&gt;
    &lt;/xsl:call-template&gt;
    &lt;tr&gt;
      &lt;td&gt;
        TOTAL
      &lt;/td&gt;
      &lt;td&gt;
        &lt;xsl:value-of select=&quot;format-number(sum($Rows/@Potential_x0020_Value),'#,##0')&quot;/&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/xsl:template&gt;
</pre>
<p>Either placement will work, and it will work exactly the same. As with any programming language, you can choose the style you prefer, but be consistent!</p>
<p>Of course, you can also ask SharePoint Designer to add the XSL for the total in the Common Dialogs under Sorting and Grouping, but as usual, the XSL will be a bit bloated and you won’t have as much control over the formatting.</p>
<p>Finally, since this is simple editing of XSL. it works exactly the same in SharePoint 2010 and 2007.</p>
]]></content:encoded>
			<wfw:commentRss>http://sympmarc.com/2011/07/19/summing-a-column-in-a-data-view-web-part-dvwp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 14.104 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-22 15:21:16 -->

