<?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>CleverWorkarounds &#187; Forms Services</title>
	<atom:link href="http://www.cleverworkarounds.com/category/forms-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cleverworkarounds.com</link>
	<description>After much frustration, it seems DEFAULT is the way to go...</description>
	<lastBuildDate>Thu, 02 Feb 2012 09:39:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Sack Justin Bieber with SPD2010 and Forms Services – Part 2</title>
		<link>http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/</link>
		<comments>http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 22:37:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[InfoPath]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Designer]]></category>
		<category><![CDATA[SP2010]]></category>
		<category><![CDATA[SPD]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Workflows]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/?p=2069</guid>
		<description><![CDATA[Hi This is part 2 of a quick (but huge) post on my experiences working with SharePoint Designer 2010 workflows and Forms Services. In part 1, we used the scenario of an employee termination form, and sacked Justin Bieber. Now we want to ensure that the SharePoint user experience for sacking Justin Bieber is seamless [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[</p>
<p>Hi</p>
<p>This is part 2 of a quick (but huge) post on my experiences working with SharePoint Designer 2010 workflows and Forms Services. In <a href="http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_blank">part 1</a>, we used the scenario of an employee termination form, and sacked Justin Bieber. Now we want to ensure that the SharePoint user experience for sacking Justin Bieber is seamless and intuitive.</p>
<p><em>Truth be told, I have never actually heard a Justin Bieber song because we have not had a television in the house for over a year. Ignorance is bliss, but I have seen enough news reports that I still want to sack him! </em></p>
<p>In <a href="http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_blank">part 1</a>, we examined the ability of SPD2010 to leverage InfoPath for tailoring forms used by workflows. We then covered creating a workflow utilising the <strong>Start Approval Process</strong> action, which enables us to do a couple of cool things without custom programming.</p>
<p>Now we are onto the next two steps. </p>
<p><span id="more-2069"></span></p>
<h2>Step 2: Dealing with WrkTaskIP.aspx</h2>
<p>As we covered in part 1, WrkTaskIP.aspx will render the link to the InfoPath form that triggered the task via the line <span class="asp">&lt;%</span> SPHttpUtility.NoEncode(m_pageDescription,Response.Output); <span class="asp">%&gt;</span></p>
<div class="csharpcode">
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">&lt;</span><span class="html">table</span><span class="kwrd">&gt;</span>   </pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>   </pre>
<pre class="alt"><span class="lnum">   3:  </span>      <span class="kwrd">&lt;</span><span class="html">td</span> <span class="attr">width</span><span class="kwrd">=&quot;10&quot;</span> <span class="attr">valign</span><span class="kwrd">=&quot;center&quot;</span> <span class="attr">style</span><span class="kwrd">=&quot;padding: 4px;&quot;</span><span class="kwrd">&gt;</span>   </pre>
<pre><span class="lnum">   4:  </span>          <span class="kwrd">&lt;</span><span class="html">img</span> <span class="attr">IMG</span> <span class="attr">SRC</span><span class="kwrd">=&quot;/_layouts/images/Workflows.gif&quot;</span> <span class="attr">alt</span>=&amp;<span class="attr">amp</span>;<span class="attr">lt</span>;%<span class="attr">SPHttpUtility</span>.<span class="attr">AddQuote</span>(<span class="attr">SPHttpUtility</span>.<span class="attr">HtmlEncode</span>(<span class="attr">GetLocString</span>(<span class="kwrd">&quot;WrkTask_PageTitle&quot;</span>)),<span class="attr">Response</span>.<span class="attr">Output</span>);%&amp;<span class="attr">amp</span>;<span class="attr">gt</span>;<span class="kwrd">/&gt;</span>   </pre>
<pre class="alt"><span class="lnum">   5:  </span>      <span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>   </pre>
<pre><span class="lnum">   6:  </span>      <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>   </pre>
<pre class="alt"><span class="lnum">   7:  </span>          <span class="asp">&lt;%</span> SPHttpUtility.NoEncode(m_pageDescription,Response.Output); <span class="asp">%&gt;</span>   </pre>
<pre><span class="lnum">   8:  </span>      <span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>   </pre>
<pre class="alt"><span class="lnum">   9:  </span><span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">  10:  </span><span class="kwrd">&lt;/</span><span class="html">table</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="lnum">  11:  </span><span class="kwrd">&lt;</span><span class="html">InfoPath:XmlFormView</span> <span class="attr">id</span><span class="kwrd">=&quot;XmlFormControl&quot;</span> <span class="attr">runat</span><span class="kwrd">=&quot;server&quot;</span> <span class="attr">style</span><span class="kwrd">=&quot;width:100%;&quot;</span><span class="kwrd">/&gt;</span> </pre>
</p></div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>&#160;</p>
</div>
<p>Our second step is to make a copy of WrkTaskIP.aspx. I imaginatively called my copy WrkTaskIPFS.aspx (FS meaning Forms Services). I then simply removed the entire &lt;table&gt; section from the above code, leaving behind only the code that embeds the InfoPath form (<strong><span>&lt;InfoPath:XmlFormView</span> <span class="attr">id</span><span class="kwrd">=&quot;XmlFormControl&quot;</span> <span class="attr">runat</span><span class="kwrd">=&quot;server&quot;</span> <span class="attr">style</span><span class="kwrd">=&quot;width:100%;&quot;/&gt;)</span></strong></p>
<p><em>The next step is where things </em><em>get a little tricky. I really don’t want to go off onto too much of a tangent here except to say that you should read up on the relationship between site content types and list content types, as well as the content type </em><a href="http://soerennielsen.wordpress.com/2007/09/11/propagate-site-content-types-to-list-content-types/" target="_blank"><em>propagation issues encountered</em></a><em> when using XML Based Content types (which the workflow created tasks are). </em></p>
<p>We need to modify the task content type created by the workflow action to refer to the WrkTaskIPFS.aspx file. Take care to determining what the content type name is. This is because sometimes the name of the content type created when the workflow is published is not what you expect – especially if you have set up previous <strong>Start Approval Process </strong>workflow actions before now. So if you are unsure of what content type the workflow created, just trigger the workflow and check the content type of the task created. In my dodgy example here, the content type name is “Approval”.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image34.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb34.png" width="683" height="84" /></a> </p>
<p>Now that we have found the content type we get to the tricky bit that I alluded to earlier. You might think that we just select the site content type in SharePoint Designer and change the reference to the display and edit forms right? After all, I show below that SharePoint Designer happily lets you do it?</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image35.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb35.png" width="699" height="259" /></a> </p>
<p>If you make the change from WrkTaskIP.aspx to WrkTaskIPFS.aspx for the edit and display form setting, and then refer to the task list and click to edit one of the tasks, you will be disappointed. As you can see, we are still referring to the old form page because the link has not disappeared.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image36.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb36.png" width="474" height="291" /></a> </p>
<p>The problem is that changing the display and edit form on the <strong>Approval site content type</strong> has not propagated to the <strong>Approval</strong> <strong>content type</strong> applied to the <strong>Tasks list</strong>. I tried to propagate the settings using a <a href="http://stsadm.blogspot.com/2008/05/propagate-content-type-changes.html" target="_blank">Gary Lapointe stsadm extension</a>, but it seems that extension deals with column propagation and not all properties.</p>
<p>The workaround is to apply the same setting change to the task content type applied to the tasks list. In SharePoint Designer, choose the Tasks list (or whatever task list you have associated with your workflow), and scroll down to display the content types assigned to it.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image37.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb37.png" width="430" height="182" /></a> </p>
<p>Click on the content type of interest (in my case “Approval”), and you see essentially the same content type properties screen you see when editing the site content type. The breadcrumb is the giveaway that you are working with a list content type and not the site content type. Change the reference to WrkTaskIPFS.aspx as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image38.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb38.png" width="772" height="367" /></a>&#160; </p>
<p>Now I can click on my task to sack Justin Bieber and we have removed the default link as intended.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image39.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb39.png" width="684" height="500" /></a> </p>
<p>Okay, now that we have dealt with the hyperlink to the form, lets add the hyperlink into the InfoPath form associated with the task.</p>
<h2>Part 3 &#8211; Dealing with InfoPath</h2>
<p>Now we need to add a reference back to the original employee termination form. So lets get back to our workflow and check it’s properties where we can get to the forms generated. I click on “TerminateEmployee” and we are back in InfoPath.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image70.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb70.png" width="457" height="170" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image40.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb40.png" width="662" height="357" /></a> </p>
<p>I am going to put the hyperlink in a new row, right above the status header. To do this, I need to insert a row above status and then enter a nice descriptor.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image41.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb41.png" width="653" height="211" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image42.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb42.png" width="659" height="166" /></a> </p>
<p>Now let’s deal with the hyperlink. Here is yet another trap for younger players. Your first instinct might be to add a hyperlink control to the form. If you try this, it will not behave like a form you created from scratch. A screenshot below shows what happens.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image43.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb43.png" width="461" height="356" /></a> </p>
<p>Unlike an InfoPath form that is created from scratch, this form is bound to the data provided by the workflow action. Therefore if you try and drop on a control to the form, you will be prompted to bind to a field of the existing data source. This is not how we are going to do this, but I will go through the motions anyway.</p>
<p>Insert a hyperlink control, and from the fields listed, choose the one called <strong>Related Content</strong></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image44.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb44.png" width="427" height="86" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image45.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb45.png" width="450" height="182" /></a> </p>
</p>
</p>
</p>
</p>
</p>
</p>
</p>
</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image46.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb46.png" width="667" height="123" /></a> </p>
<p>Amazed by your cleverness, you excitedly publish the form and check out the task! Yeah baby! you say to yourself! I have my hyperlink. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image47.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb47.png" width="684" height="275" /></a> </p>
<p>You now click on the hyperlink to see the magic. At this point one of two things will happen. If you happened to use a space in the original form name, then you will get a 404 error because the hyperlink control is dumb and not escaping the space in the URL. If you did not use a space in the name, you will get <strong>prompted to open the form in the native InfoPath client</strong>. </p>
<p>We are back to where we started. So we are foiled – or are we?</p>
<h2>Part 3a – A clever workaround</h2>
</p>
<p>Clearly, utilising the built in <strong>Related Content </strong>field with the InfoPath hyperlink control is kind of naff. So let’s have another crack at it. Return to your task form and delete the hyperlink control you just created. What we will do this time is add an additional field to the InfoPath data source. In InfoPath, take a look at the data pane. At the bottom is a link “Show advanced view”. Click it and we can take a look at the data source in more detail.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image48.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb48.png" width="211" height="517" /></a>&#160;&#160; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image49.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb49.png" width="205" height="520" /></a> </p>
<p>The next step is a lesson in Olympic class Microsoft usability eliteness (NOT!). <strong>Right click </strong>on the myFields dropdown and choose <strong>Add</strong>. Name the field <strong>URL</strong> and select <strong>Hyperlink </strong>as the data type as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image50.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb50.png" width="207" height="516" /></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image51.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb51.png" width="333" height="261" /></a></p>
<p>Click OK and your data source should now show our newly created field called URL (my:URL). Click on this field and from the drop down and choose <strong>Properties</strong>. (We are going to set the <strong>default value</strong> of this hyperlink to our original form, but append the <strong>&amp;OpenIn=Browser</strong> to the URL).</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image52.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb52.png" width="214" height="227" /></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image53.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb53.png" width="206" height="546" /></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image54.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb54.png" width="343" height="388" /></a> </p>
<p>Click the <u><em>fx</em></u> button and lets make a formula. If you have played with InfoPath formulas, you might think that all we have to do is use the concatenate function on the <strong>Related Content </strong>field with the string “?OpenIn=Browser” as shown below.</p>
<p><strong>concat(<u>WorkflowLink</u>, &quot;?OpenIn=Browser&quot;)</strong></p>
<p><em><u><strong>Workflowlink</strong></u>, by the way, is the reference to the original <strong>Related Contnet</strong> field in the InfoPath data source. Just click <strong>Insert Field or Group</strong> and find <strong>Related Content</strong></em></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image55.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb55.png" width="593" height="255" /></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image56.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb56.png" width="252" height="292" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image57.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb57.png" width="345" height="386" /></a> </p>
<p>So will it work? Actually many times it will. So either drag this completed field to the form to create the hyperlink control, or insert the hyperlink control from the ribbon and bind to the field. This time our new field (my:URL) is in the list to choose from when binding the hyperlink. (oh -&#160; make sure you are in advanced view, not basic view to choose your URL field). </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image58.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb58.png" width="457" height="356" /></a> </p>
<p>So having done this, you will have a primed hyperlink control on the form. Publish the form and let’s have a look at the effect when a new workflow task is created… </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image59.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb59.png" width="617" height="176" /></a> </p>
<p>Looking positive, but what happens when we click it?. In my example, we get a nasty 404. If you look closely, this is because I have a space in the URL name. *sigh*, InfoPath certainly doesn’t make it easy does it? So we need to revisit our little formula to deal with the unencoded space.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image60.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb60.png" width="568" height="172" /></a> </p>
<p>This is the part of the blog post where I feel dirty. InfoPath does not have a string replace function, and ideally what I want to do is replace any occurrence of a space “ “ with an encoded space “%20”. The built in translate() function will not suffice because it will only translate one character for another, not one character for three. <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p><em>For the geeks, InfoPath uses the XPATH 1.0 spec, however XPATH 2.0 was released in 2007 and <strong>does </strong>have a replace function. What a pity InfoPath 2010 does not appear to use XPATH 2.0.</em></p>
<p>So in my case, I will create a formula to handle one space only. Yeah I know this is lame, but given that you have control of the filename generated for InfoPath forms when you make a submit connection, this is not an overly big deal – just bloody annoying. <em>If you avoid spaces in filenames altogether, you can you my easier concatenate formula above.</em></p>
<p>I have dealt with the space, by using two built in substring formulas in combination with the concat function as shown below.</p>
<p><strong>concat(substring-before(WorkflowLink, &quot; &quot;), &quot;%20&quot;, substring-after(WorkflowLink, &quot; &quot;), &quot;?OpenIn=Browser&quot;)</strong></p>
<p>What I do here is search for the space and return all text before it, add a %20 and then return all text to the right of the space to create my URL. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image61.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb61.png" width="596" height="251" /></a> </p>
<p>Now lets republish and take a look. Aha! now it works. We can now view the form in the browser, have control over where the link is placed on the form and can manipulate the form URL.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image62.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb62.png" width="598" height="68" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image63.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb63.png" width="734" height="479" /></a> </p>
<h2>Taking a breath</h2>
<p>So if we step back and review what we have done. </p>
<p>We changed to the newer, cooler, “Start an approval process” workflow action. By the way, in case its not clear amongst the screenshot-hell that is an InfoPath post, the reason we did this was because the older workflow actions do not provide a reference to the <strong>Related Content/Workflowlink</strong> field. Yup, that&#8217;s right. The <strong>Collect Data from a User</strong>, <strong>Assign a Form to a Group </strong>and <strong>Assign a To-do Item </strong>workflow actions do not appear usable with the technique I described above. </p>
<p>That is a minor point anyway, because the new SP2010 specific workflow actions are much more powerful and flexible and should be used. We have barely scratched the surface in these posts and I encourage you to have a good look at the new process actions.</p>
<p>We then made a copy of WrkTaskIP.aspx and then changed the settings of the task content type to use the copy (WrkTaskIPFS.aspx). We also encountered a glimpse of the content type setting propagation issues that developers have to contend with on a daily basis. We modified the copy to not provide a reference to the original form, and instead, modified the task form using InfoPath to provide a hyperlink to the original form, manipulating the URL, ensuring that it will open in the browser.</p>
<p>Although I would not rate this as the cleverest of clever workarounds, its not too bad and certainly won’t be the kind of action that would prevent a future service pack being applied.</p>
<h2>Bonus Part 4</h2>
<p>So did you think this is the end? No sir. I am going to show you one other neat trick that this approach can enable. To explain, let’s do a little more form pimping. If we return to our employee termination form, I am going to add a <strong>picture button</strong> that has a rule to submit for form and then switches the form view to a “thank-you please come again” type thing. Below is the new form with the sexy “terminate” button and the new view after it is submitted.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image64.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb64.png" width="639" height="369" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image65.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb65.png" width="475" height="247" /></a> </p>
<p>This is a very common InfoPath scenario, and the problem is that if the user re-opens this form, they can again, click the submit button and the rules will be re-run. This normally would necessitate some logic in the form to test if the form has been submitted already. Adding logic to the submit process on a form is not a hard thing to do, but if you check the InfoPath toolbar that is enabled by default, there is a print preview button. I wonder what happens when we click it? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image71.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb71.png" width="551" height="141" /></a> </p>
<p>Interesting eh? No toolbar and no button. This is exactly what I want to happen when a user clicks on the task link to review the original termination application.</p>
</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image67.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb67.png" width="825" height="467" /></a> </p>
<p>So how about we change the URL to load up the print preview of the browser enabled form? If we examine the URL generated for this form it uses Print.FormServer.aspx instead of FormServer.aspx. If you load up any browser enabled InfoPath form, you can remove the toolbar and buttons by calling Print.FormServer.aspx instead.</p>
<p>Thus if we take this</p>
<p><strong>http://sp/sites/FormDemo/_layouts/FormServer.aspx?XmlLocation=/sites/formdemo/forms/justin%20bieber.xml%3Fopenin=browser</strong></p>
<p>and change to this:</p>
<p><strong>http://sp/sites/FormDemo/_layouts/Print.FormServer.aspx?XmlLocation=/sites/formdemo/forms/justin%20bieber.xml%3Fopenin=browser</strong></p>
<p>… we achieve our goal.</p>
<p>So how about we generate this as the default value for our URL field on the task form. The <strong>Related Content </strong>URL supplied from SharePoint is the full path to that content. e.g.</p>
<p><strong>http://sp/sites/FormDemo/Forms/JustinBieber.xml</strong></p>
<p>When we look at the <strong>Print.FormServer.aspx</strong> URL above and break it up into its components, we need to:</p>
<ul>
<li>Create the site collection URL </li>
<li>Create the string &quot;_layouts/Print.FormServer.aspx?XmlLocation=/&quot; </li>
<li>Grab the relative path to the form </li>
<li>Create the string &quot;&amp;OpenIn=Browser&quot; </li>
</ul>
<p>Creating the site collection URL is easy as their is a built in formula called <strong>SharePointSiteCollectionUrl().</strong> Additionally, creating the relative path can be done by taking the <strong>Related Content </strong>field (called WorkflowLink) and removing the host part of the URL. Once again built-in formulas come to the rescue here. <strong>SharePointServerRootUrl()</strong> will return the hostname of the site and <strong>substring-after() </strong>will return everything to the right of the matching substring. Therefore the formula</p>
<p><strong>substring-after(WorkflowLink, SharePointServerRootUrl())</strong> </p>
<p>will strip the hostname from the URL to the form, leaving us with the relative path.</p>
<p>Stringing that all together into a concatenation creates the following formula.</p>
<p><strong>concat(SharePointSiteCollectionUrl(), &quot;_layouts/Print.FormServer.aspx?XmlLocation=/&quot;, substring-after(WorkflowLink, SharePointServerRootUrl()), &quot;&amp;OpenIn=Browser&quot;)</strong></p>
<p>to render a sample URL of:</p>
<p><strong>http://sp/sites/FormDemo/_layouts/Print.FormServer.aspx?XmlLocation=/sites/FormDemo/Forms/Justin Bieber.xml&amp;Openin=browser</strong></p>
<h2>But the space…</h2>
<p>Those of you that have not fallen asleep at this point might notice that we have re-introduced our problem with the non encoded space. That can be dealt with using the substring-before and substring-after formula that we used earlier. Assuming the space is in the form name, we build a string up to the form name, use substring-before to grab everything prior to the space and substring-after to grab everything after.</p>
<p>The resulting formula looks like this.</p>
<p><strong>concat(substring-before(concat(SharePointSiteCollectionUrl(), &quot;_layouts/Print.FormServer.aspx?XmlLocation=/&quot;, substring-after(WorkflowLink, SharePointServerRootUrl())), &quot; &quot;), &quot;%20&quot;, substring-after(WorkflowLink, &quot; &quot;), &quot;&amp;Openin=browser&quot;)</strong></p>
<p>Ugly enough for you? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em>The reality is that spaces are deadly here and you are better off utilising form logic that does not use spaces and stick to the simpler formula. The example above might be interesting from a learning point of view, but there are a number of ways that this formula could trip up and produce a malformed URL (what if there is no space in the filename for example?)</em></p>
<h2>Conclusion</h2>
<p>Notwithstanding that InfoPath formulas suck in terms of needed functions, we now have a task form that will link to the original InfoPath form and display the form in print-preview mode. All in all not a bad effort, and an interesting exploration into what InfoPath can do.</p>
<p>I would have liked to make the URL friendlier of course, and given that this is InfoPath we are talking about, I fully expect someone to post a comment telling me the elegant, perfect way to do what I have done here <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image68.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb68.png" width="644" height="470" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image69.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb69.png" width="644" height="439" /></a> </p>
<p>Thanks for reading</p>
<p>Paul Culmsee</p>
</p>
<p><a href="http://www.sevensiogma.com.au">www.sevensiogma.com.au</a></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2010/09/22/sack-justin-bieber-with-spd2010-and-forms-services-part-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Sack Justin Bieber with SPD2010 and Forms Services – Part 1</title>
		<link>http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/</link>
		<comments>http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 12:47:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[InfoPath]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Designer]]></category>
		<category><![CDATA[SP2010]]></category>
		<category><![CDATA[SPD]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Workflows]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/?p=1995</guid>
		<description><![CDATA[Hi all A very long time ago now, I had the ambition to write an end-to-end blog post series called “A Humble Tribute to the Leave Form”. The intent was to show InfoPath Forms Services 2007 in all its glory – from its initially seductive, demo friendly first impressions, through to all of the dodgy [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p>Hi all</p>
<p>A very long time ago now, I had the ambition to write an end-to-end blog post series called “A Humble Tribute to the Leave Form”. The intent was to show InfoPath Forms Services 2007 in all its glory – from its initially seductive, demo friendly first impressions, through to all of the dodgy workarounds and .net code required to get it to adequately handle a relatively simple business process like employee leave applications. </p>
<p>As it happened, I got through seven and a half blog posts and never finished it as events kind of overtook me. Its a pity because I didn’t get to the nasty bits. But one of the side effects of getting as far as I did, was that I ended up getting a lot of work developing leave forms! </p>
<p>Thus, now that SharePoint 2010 is upon us, it was inevitable that I would eventually get called to develop a leave form for this new edition. I now have done so, and in the process learnt a couple of new things that I thought were blogworthy – especially around getting things to play nice in a sustainable manner. </p>
<p>I came to realise that anytime you write any content that involves InfoPath, you end up with a stupid number of screenshots, and you are perpetually torn on the amount of detail to cover. So this time, rather than do a twelve post monster, I’ll just do 2 posts (real programmers will still find this post waffly but hopefully normal humans won’t). </p>
<p>I am not going to do a total beginners course here, I will assume instead you have done some basic InfoPath and SharePoint Designer workflows previously, and now want to know some interesting ways to do a general approval type process using SharePoint 2010. My main focus here is to deal with handling browser based InfoPath forms with SharePoint Designer workflows. </p>
<p><span id="more-1995"></span></p>
<h2>Setting the scene</h2>
<p>To set the scene, I thought that instead of a leave form example, lets use an employee termination example instead. I have published such a form to SharePoint as a site content type called <strong>Form-EmployeeTermination</strong>. Below is the form with four perfectly legitimate reasons why someone should face instant dismissal.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb1.png" width="707" height="508" /></a> </p>
<p>Okay I realise there is a bit of testosterone there – but as far as I am concerned, even one of those reasons are grounds for instant dismissal! </p>
<p>To complete the scenario, I thought to myself, who in all the world right now would I most like to sack. The answer came quickly…</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb2.png" width="261" height="261" /></a> </p>
<p>So here is the scenario. I am going to show how to leverage SharePoint 2010 new features to sack Justin Bieber. As part of sacking Justin Bieber, we will optimise the workflow to work with forms services and play nice with browser based rendering.</p>
<h2>How it was…</h2>
<p>Now in SharePoint 2007, you would likely publish the above form as a content type, associate that content type to a forms library and create a SharePoint designer workflow for that library. Then it would be exceedingly likely that you would utilise one of the three out of the box task based workflow actions, namely;</p>
<ul>
<li>Collect Data from a User </li>
<li>Assign a Form to a Group </li>
<li>Assign a To-do Item </li>
</ul>
<p>The reason you would utilise one of these is because they create a task for someone to take an action. So for example, a user requests that Justin Bieber be terminated, a task is assigned to Justin’s boss to terminate him. When said boss has marched Justin Bieber out of the office, he then marks the task as complete in SharePoint.</p>
<p>Each of the above three actions served a particular purpose. </p>
<ul>
<li><strong>Assign a To-do Item</strong> simply created a very basic task with an “Approve/Reject” button. </li>
<li><strong>Collect Data from a User</strong> allowed you to customise the task form and collect additional data beyond the Approve/Reject </li>
<li><strong>Assign a Form to a Group</strong> did the same as Collect Data from a User, except it could assign the task to multiple users. </li>
</ul>
<p>I tended to use <strong>Collect Data from a User</strong> most of the time. because it passed you the ID of the newly created task in the task list. This was important if the task contained more than just an Approve or Reject button. Continuing our employee termination example, we might have a checkbox to note whether Justin Bieber cried or not when he was sacked. </p>
<p>Therefore, if the workflow needed to take an action based on whether Bieber was a blubbering cry-baby or not, then <strong>Collect Data from a User</strong> was the only workflow action that was suitable as we would need to refer to the task later, to check the Cry-Baby column.</p>
<p>These workflow actions also did a few other things behind the scenes. The approve task created was actually a site content type, with its own customised edit task form. SPD 2007 would create auto-generated ASPX pages for the task, incorporating any custom fields created. (If you want more detail about that then visit the “<a href="http://www.cleverworkarounds.com/2008/02/06/form-services-and-spd-workflows/" target="_blank">Theory Interlude</a>” section of <a href="http://www.cleverworkarounds.com/2008/02/06/form-services-and-spd-workflows/" target="_blank">this post</a>.)</p>
<h2>How it is now…</h2>
<p>One of the major improvements of SPD workflows with SharePoint 2010 is the integration of InfoPath. In SP2010, the aforementioned three workflow actions still exist, but when you use them, the customised task form is created as an InfoPath form embedded into the built in <strong>WrkTaskIP.aspx</strong> page, instead of an auto-generated ASPX page. </p>
<p>The screenshot below shows the basic idea. I created a simple list workflow using the <strong>Assign a To-do Item</strong> and published it. If we examine the workflow properties after publishing, we see that the workflow initialisation form and custom task are listed. I have highlighted the form for the task below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb3.png" width="357" height="171" /></a>&#160;&#160; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb4.png" width="447" height="111" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb5.png" width="817" height="448" /></a> </p>
<p>Note that there is now a form with a name that matches the name of the To-Do action. If we click on this form, we can now edit it in InfoPath and republish it. Below is a before and after dodgy InfoPath pimping effort of the <strong>Terminate Employee</strong> task form.</p>
<p>Before:</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb6.png" width="609" height="249" /></a>     <br />After:</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb7.png" width="618" height="296" /></a> </p>
<p>If I run this workflow on an item, check out the task created. It simply renders the published InfoPath form that I modified.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb8.png" width="410" height="209" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image9.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb9.png" width="539" height="303" /></a> </p>
<p>So all in all, this is a great improvement over SharePoint 2007 SPD workflows. Being able to utilise InfoPath to control the look and feel of workflow forms is very handy indeed. </p>
<p>Having showed you this now, I want you to forget it! For reasons that I will explain later, these three workflow actions should be considered legacy in many circumstances. </p>
<h2>Dealing with Forms Services</h2>
<p>Our next stop on our journey to sack Justin Bieber is to deal with a common problem that occurs when SharePoint Designer Workflows are associated with published InfoPath Forms. If we take another close look at our dodgy pimped task form, you will see that there is a reference to the original form that triggered the workflow. It is a hyperlink next to the “This workflow task applies to” text. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb10.png" width="539" height="224" /></a> </p>
<p>The problem is when we click the link, instead of the form loaded in the browser, we are prompted to save or open an XML file as shown below. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image11.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb11.png" width="685" height="362" /></a> </p>
<p>This is very common issue that is frustrating for new players. The <strong>related list item</strong> link always references the original list/library and item that the workflow was triggered from. It has no idea that this is a URL to be rendered via forms services. The default URL for the above example when referred to as an item in a form library is</p>
<p><strong>http://sp/forms/Justin Bieber.xml</strong></p>
<p>Yet when rendered within forms server, the URL is:</p>
<p><strong>http://sp/_layouts/FormServer.apsx/XmlLocation=/forms/Justin%20Bieber.xml&amp;DefaultItemOpen=1</strong></p>
<p>So, the problem is that the wrong URL is being passed into the task item as the <strong>related list item</strong>. The forms services URL is never used and therefore the form is not displayed in the browser. Ages ago, I documented a <a href="http://www.cleverworkarounds.com/2008/02/06/form-services-and-spd-workflows/" target="_blank">particularly crap workaround</a>, before someone pointed out to me that if you simply add <strong>?OpenIn=browser</strong> to the original URL, it will auto-magically redirect to the forms services URL. i.e.</p>
<p><strong>http://sp/forms/Justin Bieber.xml?OpenIn=Browser </strong>will render an InfoPath form via forms services.</p>
<p>So our mission here is to change the reference to the original Justin Bieber termination request. By appending the <strong>OpenIn=Browser </strong>parameter to the URL, we ensure that the form is rendered by forms services.</p>
<h2>Digging Deeper</h2>
<p>If we take a closer look at the task as it is rendered in the browser, you can see that the InfoPath form is actually embedded inside another page. You might also notice that the hyperlink to the Justin Bieber termination form that triggered the workflow, is <strong>not</strong> part of the embedded InfoPath form. It is part of the surrounding page.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image12.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb12.png" width="688" height="459" /></a> </p>
<p>The page that displays the workflow task is called WrkTaskIP.aspx (presumably Workflow Task for InfoPath?) and is a system file that resides in the 14 Hive (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS &#8211; this file also exists in SharePoint 2007 but is only used with Visual Studio workflows).</p>
<p>Now we all know these days that anything that lives in the Layouts folder should be treated with caution, and directly modifying this file is a giant no-no. Fortunately, as I will show in a bit, we can make a <em>copy</em> of this page and <strong>tell our task content type to use that copy</strong>. </p>
<p>But since we are here at the default page, lets have a peek inside this file to the relevant section and see what is going on. </p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span><span class="kwrd">&lt;</span><span class="html">table</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">   3:  </span>    <span class="kwrd">&lt;</span><span class="html">td</span> <span class="attr">width</span><span class="kwrd">=&quot;10&quot;</span> <span class="attr">valign</span><span class="kwrd">=&quot;center&quot;</span> <span class="attr">style</span><span class="kwrd">=&quot;padding: 4px;&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">   4:  </span>        <span class="kwrd">&lt;</span><span class="html">img</span> <span class="attr">IMG</span> <span class="attr">SRC</span><span class="kwrd">=&quot;/_layouts/images/Workflows.gif&quot;</span> <span class="attr">alt</span>=&amp;<span class="attr">lt</span>;%<span class="attr">SPHttpUtility</span>.<span class="attr">AddQuote</span>(<span class="attr">SPHttpUtility</span>.<span class="attr">HtmlEncode</span>(<span class="attr">GetLocString</span>(<span class="kwrd">&quot;WrkTask_PageTitle&quot;</span>)),<span class="attr">Response</span>.<span class="attr">Output</span>);%&amp;<span class="attr">gt</span>;<span class="kwrd">/&gt;</span></pre>
<pre><span class="lnum">   5:  </span>    <span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">   6:  </span>    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">   7:  </span>        <span class="asp">&lt;%</span> SPHttpUtility.NoEncode(m_pageDescription,Response.Output); <span class="asp">%&gt;</span></pre>
<pre><span class="lnum">   8:  </span>               <span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">   9:  </span><span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">  10:  </span><span class="kwrd">&lt;/</span><span class="html">table</span><span class="kwrd">&gt;</span></pre>
<pre><span class="lnum">  11:  </span><span class="kwrd">&lt;</span><span class="html">InfoPath:XmlFormView</span> <span class="attr">id</span><span class="kwrd">=&quot;XmlFormControl&quot;</span> <span class="attr">runat</span><span class="kwrd">=&quot;server&quot;</span> <span class="attr">style</span><span class="kwrd">=&quot;width:100%;&quot;</span><span class="kwrd">/&gt;</span></pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Now you don’t necessarily have to be a developer to work out that the line <span class="asp">&lt;%</span> SPHttpUtility.NoEncode(m_pageDescription,Response.Output); <span class="asp">%&gt;</span> is generating the hyperlink to the original form. (Actually if you are a developer then check this <a href="http://ntorrent.wordpress.com/2008/04/15/moss-2007-workflow-infopath-form-associated/" target="_blank">excellent article</a> for a deeper examination, albeit for SP2007). Now a developer could easily take a copy of this page and modify some JavaScript code to add the ?OpenIn=Browser string required to make it render properly. </p>
<p>But not all of us are developers and I have another idea. Let’s make the copy of WrkTaskIP.aspx, but <strong>remove </strong>the hyperlink reference to the form altogether. Instead, lets use the <strong>embedded InfoPath form</strong> to do the job of rendering the hyperlink to the form. At least that way, we have more control over the hyperlink that is generated.</p>
<p>To do this, we have three major steps to complete.</p>
<ol>
<li>Changing the workflow action to “Start Approval Process” to take advantage of the richer SharePoint data it provides </li>
<li>Making a copy of WrkTaskIP.aspx and updating the task content types </li>
<li>Modifying the task form to display the correct hyperlink </li>
</ol>
<p>&#160;</p>
<h2>Step 1: The one workflow action to rule them all</h2>
<p>First up, we are going to use a new workflow action that is SP2010 only. The reason for doing this will become clear later. For simplicity I will create a list based workflow called “Employee Termination”, as opposed to a reusable one. </p>
<p>Create a new workflow and assign it to the list where your form content type has been published to (In my example it is simply a form library called “forms”). </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image13.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb13.png" width="427" height="229" /></a></p>
<p>In the newly created workflow, choose “Start Approval Process” from the actions button in the ribbon.</p>
<p>&#160;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image14.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb14.png" width="424" height="410" /></a> </p>
<p>Now up until this point, you would think this looks and feels like a regular workflow action. But as you will see, this innocuous looking action packs a hell of a lot of punch! First up, lets for now, assign this approval process to one user – the administrator account. We do this by clicking on the last parameter – the hyperlinked “these users” link.</p>
<p>&#160;<a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image15.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb15.png" width="601" height="84" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image16.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb16.png" width="342" height="239" /></a> </p>
<p>While we are here, let’s take a quick look at this screen. This workflow action allows you to add more than one participant, as well as set some defaults, such as the title of the workflow task, as well as being able to set a task duration as shown below.</p>
<p>&#160;<a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image17.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb17.png" width="515" height="480" /></a> </p>
<p>At this point we have configured the workflow participants. The next step is to delve into an innocent looking hyperlink that opens up a world of possibilities. </p>
<p>Click on the “Approval” hyperlink and you will be presented with a page that controls this new workflow action. This innocuous looking page has within it some impressive functionality. We will examine a little of it as we work through this scenario. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image18.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb18.png" width="608" height="90" /></a><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image19.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb19.png" width="969" height="425" /></a> </p>
<p>Let’s give this task a better name than “Approval”. We will call it “Employee Termination Request”.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image20.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb20.png" width="500" height="112" /></a> </p>
<p>Next step, we will add an additional field to the workflow approval task. I previously referred to the need to know if a terminated employee cried like a baby when they were sacked, so let’s add a Boolean field to represent this. </p>
<p>From the “Task Form Fields” section above, you will see a “new” button. From there you add a new field and set its type.</p>
<p><em>Note that once the field has been added, you can also control if it required or not in the resulting form.</em></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image21.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb21.png" width="276" height="307" /></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image22.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb22.png" width="400" height="174" /></a></p>
<p>Next, let’s make the form more user friendly by re-labelling some of the task outcomes. Again we will not get into the depth of this here – you can think of it as customising the buttons on the soon to be created task form. Let’s change Approve to “Terminate!”, Rejected to “No Way!”, and add a third task outcome called Warning with the button text of “Reprimand!”</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image23.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb23.png" width="315" height="129" /></a>&#160;<a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image24.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb24.png" width="318" height="128" /></a> </p>
<p>Now that we have set these initial parameters, lets save the workflow and examine the InfoPath form that has been generated. </p>
<p>Using the breadcrumb in SharePoint Designer, choose the “Editor” link and then choose “Workflow Settings” from the ribbon</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image75.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image75_thumb.png" width="574" height="53" /></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image94.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image94_thumb.png" width="499" height="86" /></a> </p>
<p>At this point. there are no generated InfoPath forms (note that the Forms section is empty in the bottom right).&#160; </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image27.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb27.png" width="827" height="545" /></a> </p>
<p>Let’s publish this workflow and take a look at what happens in the aforementioned Forms section.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image28.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb28.png" width="244" height="126" /></a>&#160; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image29.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb29.png" width="526" height="124" /></a> </p>
<p>Aha! Now we have two forms. One is the workflow initiation form and the other is the task form. Taking a peek at the generated task form in InfoPath, we can see that it reflects the settings we applied earlier (check the buttons).</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image30.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb30.png" width="782" height="366" /></a> </p>
<p>Additionally, a workflow task content type has been created with the same name. That task has been configured to use the above form.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image31.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb31.png" width="785" height="170" /></a> </p>
<p><em>This content type is important as we need to make a modification to it in part two. </em></p>
<h2>Conclusion</h2>
<p>Since the workflow has been published, let’s test where we have got to. I have my original Justin Bieber sacking form in the form library, so let’s manually trigger the workflow and take a look at the task created.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image32.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb32.png" width="492" height="189" /></a>&#160;</p>
<p>If you look at this form, you can see that my adjusted buttons have been created, and the additional crybaby Boolean field has been created.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image33.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2010/09/image_thumb33.png" width="685" height="539" /></a> </p>
<h2></h2>
</p>
<p>At this point, this post is getting kind of huge, so let’s leave it at step 1. In part 2 of this series, we will make a copy of WrkTaskIP.aspx, modify the task content type to use the copy and then tweak the above form to display the reference to Justin Bieber via forms services. I’ll also show you another neat trick (and some InfoPath suckiness too).</p>
<p>Thanks for reading</p>
<p>&#160;</p>
<p>Paul Culmsee</p>
<p><a href="http://www.sevensigma.com.au">www.sevensigma.com.au</a></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/&title=Sack+Justin+Bieber+with+SPD2010+and+Forms+Services+%E2%80%93+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2010/09/21/sack-justin-bieber-with-spd2010-and-forms-services-part-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>SPD workflows: &#8220;ERROR: request not found in the TrackedRequests&#8221;</title>
		<link>http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/</link>
		<comments>http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 08:08:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[InfoPath]]></category>
		<category><![CDATA[SharePoint Designer]]></category>
		<category><![CDATA[SPD]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[Workflows]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/?p=1440</guid>
		<description><![CDATA[I’ve written this post to document a dumbass thing that I did and the error that it caused. Hopefully it might help someone googling in desperation sometime… The popularity of the “Tribute to the humble leave form” series over at SharePoint Magazine, has meant that we actually get a few gigs implementing &#8211; surprise, surprise [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"><!--
google_ad_client = "pub-6551570212921028";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel = "";
google_ui_features = "rc:6";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>I’ve written this post to document a dumbass thing that I did and the error that it caused. Hopefully it might help someone googling in desperation sometime…</p>
<p>The popularity of the “<a href="http://sharepointmagazine.net/technical/development/a-tribute-to-the-humble-leave-form" target="_blank">Tribute to the humble leave form</a>” series over at <a href="http://sharepointmagazine.net" target="_blank">SharePoint Magazine</a>, has meant that we actually get a few gigs implementing &#8211; surprise, surprise &#8211; InfoPath leave forms with SharePoint Designer workflows! This was actually quite unexpected, as I wrote that series as a joke and for end-user training purposes.</p>
<p>Now, I fully realise that many people don’t like tools like SharePoint Designer in the hands of mere mortals, but I personally think it is a terrific means to encourage buy-in and user evangelism and I encourage its sustainable use. Although “real developers” may disagree with me here, SPD workflows enable quick results without the embarrassing aftermath of premature code compilation (which always leads to frustration, right girls? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  ).</p>
<p>Anyhow enough sexual innuendo – here is my error with my lessons learned</p>
<h2>The symptoms</h2>
<p>Recently, a happily running leave form workflow ground to a halt with an error as shown below. What the screenshot below shows is that the workflow died right after a “Pause for duration” workflow action. (Note the “pausing for 2 minutes” line, just before the actual workflow error).</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image-thumb3.png" width="595" height="282" /></a></p>
<p>Now, the interesting thing here is that the pause action never happened. The workflow bombed out straight away and there was no pause at all. Yet, the fact that the pause action logged to the history list meant that it attempted to do so. It seemed that the pause action ran for long enough to log that it was about to pause, but died when actually trying to.</p>
<p>The pause action occurred in step 2 of my workflow, but it is worthwhile showing you the first workflow step first.</p>
<p>Below is a screenshot of step 1 of the workflow. This first step is called “Modify Item Permissions” and we are using the <a href="http://www.codeplex.com/SPDActivities" target="_blank">codeplex custom workflow actions</a> to modify permissions of the submitted leave form, ensuring that only the requestor of the leave (and their boss) can see or modify the form.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image-thumb4.png" width="548" height="231" /></a></p>
<p>The step in the workflow, called “Manager Approval”, shows where we pause for 2 minutes. The reason we pause is to get around another workflow error that I will explain at the end of the post. After the pause action was completed and the workflow recommenced, it performed a “Collect data from user” task as shown below. This created a task for the requestors manager to approve the leave request.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image-thumb5.png" width="550" height="202" /></a></p>
<p>We know that the “Collect data from user” action never ran, because the “Employee Leave Approval” task never actually got created in the task list. Thus, we know the error occurred at the pause action. Or, did it?</p>
<p>This error occurred consistently whether the workflow was manually started or auto-triggered. Checked all the usual suspects &#8211; timber jobs ok, permissions unchanged and working well, etc. Scanning the ULS logs at this time showed an interesting error with a much less interesting stack trace (that I have pasted at the end of the post for readability).</p>
<p><strong>“Unexpected&#160;&#160;&#160; ERROR: request not found in the TrackedRequests. We might be creating and closing webs on different threads” </strong></p>
<p>Hmm, what is TrackedRequests and why is a request not found? Googling that error message wasn’t much help at all. Although it is quite common, nothing matched my particular context. But then I received a lucky break. When I <strong>cancelled</strong> the running workflow that was in this error state, I received a <strong>new</strong> error that made it quite easy to work out what was going on.</p>
<p><strong>WinWF Internal Error, terminating workflow Id# 02334a17-3211-4d30-902f-bf34e20354c6&#160;&#160;&#160;&#160; <br />Unexpected&#160;&#160;&#160; System.Workflow.Runtime.Hosting.PersistenceException: Object reference not set to an instance of an object. &#8212;&gt; System.NullReferenceException: Object reference not set to an instance of an object.&#160;&#160;&#160;&#160; at DP.Sharepoint.Workflow.Common.RemoveListItemPermissionEntry(SPListItem item, String principalName, Boolean breakRoleInheritance)&#160;&#160;&#160;&#160; </strong></p>
<p>It was this error that gave it away. For a start, the method being called was <strong>DP.Sharepoint.Workflow.Common.RemoveListItemPermissionEntry</strong> and the exception was a <strong>null reference</strong>. RemoveListItemPermissionEntry sounded suspiciously like the permission based workflow actions of the “Modify Item Permissions” step as highlighted below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2009/06/image-thumb6.png" width="562" height="241" /></a></p>
<p>But wait… the workflow never failed at this line at all. It actually failed at the first action of the next step (“Manager Approval”)&#160; with the “request not found in the TrackedRequests” error. Interesting, eh?</p>
<p>Let’s put aside the issue of what step and what action the workflow failed on for a moment, and examine the second error message more closely. If you examine the “Modify Item Permissions” action highlighted above, can you think of any reason that I would get a null reference exception?</p>
<p>Ah! What happens if the previous action called “Set Variable”, set a <strong>blank or null value</strong>? I suspect that the “Grant permissions on an item” workflow action will attempt to change permissions of the item to a blank or null user. The result? That workflow action will die with a null reference exception &#8211; precisely what the error states.</p>
<p>When I checked the source of the variable “LineManagerAccount”, it was looking up a contact list for the manager of the requestor. Sure enough, it did turn out that that column was blank for some users. Thus, a simple exercise in input validation combined with a small correction to that list item and the problem was solved.</p>
<h2>Further questions and further information</h2>
<p>I could stop this post there I suppose and perhaps someone, sometime might find this post and think “Wohoo!”. But this problem raised a couple of issues, as well as made it clear to me that I had been stupid in how I designed this one. Let’s tackle them one by one.</p>
<h3>1. When did it die again?</h3>
<p>Clearly the error that caused all of this, occurred at the last action of the “Modify Item Permissions” step. We know this because the step before was where the lookup to the contact list happened, and this is where the null value came from that caused the exception. But then why did the workflow not stop at this point? Why did it continue onward and attempt to move to the “Manager Approval” steps and die on the “Pause for duration” action?</p>
<p>Whether this is default behaviour of SPD workflows or a logic fault in the exception handling code in the codeplex-based “Grant Permission on an Item” action, this makes life hard to troubleshoot because the error message never made sense. I only found out the true root cause when I terminated the workflow manually and got lucky because the offending exception suddenly appeared.</p>
<p>So, the conclusion to draw? If your SPD workflow dies with “ERROR: request not found in the TrackedRequests” in the logs, it may be that the real cause of the problem <strong>is a previous workflow step </strong>and not the step where the workflow actually stopped.</p>
<h3>2. Paul is a dumbass</h3>
<p>Okay, so let’s talk about lessons learnt. Some people reading this may wonder why I never used Active Directory or the user profile store to store manager details for a user and to do the lookup from there. The answer is that this contact list approach simply made sense for this client and this is actually not the dumb thing that I did. The dumb thing that I did was to forget that all of the necessary business logic and data validation steps could have been performed in the InfoPath form itself.</p>
<p>Remember that InfoPath forms can have data connections to all sorts of sources such as SharePoint lists, web services and relational databases. (I am not going into detail on how to do that here because I have already covered it in quite a lot in <a href="http://sharepointmagazine.net/technical/a-humble-tribute-to-the-leave-form-part-5" target="_blank">part 5</a> of the “<a href="http://sharepointmagazine.net/technical/development/a-tribute-to-the-humble-leave-form" target="_blank">Leave Form Tribute</a>” series). We can have a published InfoPath form connect to any SharePoint list or library across the entire farm to look up business logic details, such as an approver. This is something that SharePoint Designer workflows cannot do out of the box – it can only lookup from the site where the workflow has been created.</p>
<p>But, more important than that, we can easily use InfoPath rules and data validation functionality to ensure that the values are not null before submitting.</p>
<p>What this all means is that your SPD workflows end up being simpler and easier to maintain because InfoPath is providing all of the data to the workflow as well as the validation of the data. Therefore, the workflow now doesn’t have to do the lookup work and have unnecessary steps and actions.</p>
<p>For these reasons I think that, if you can, grab all of the data you need for a business process using the InfoPath form using hidden fields. Then publish the form and ensure these hidden fields are published as site columns.</p>
<p>For this particular purpose, I think that InfoPath is a lesser evil than SharePoint Designer workflows.</p>
<h3>3. What are the pause actions there for anyway?</h3>
<p>Finally, I promised I’d explain why I had a pause action in the workflow. This is to get around a race condition with workflows that produces an intermittent error message:</p>
<p>“This task is currently locked by a running workflow and cannot be edited”</p>
<p>I’ve seen this occur in several situations and it pretty much boils down to some workflow actions being synchronous and subsequent actions starting before the previous action properly completed. Consider this example.</p>
<p>One workflow creates or updates an item in a list, say a task list. But the task list also has a workflow attached to it. This means that the first workflow creates the task item and then moves onto the next step. Meanwhile, a new workflow has been triggered for that new task list item. This secondary workflow refers to information stored in the main item which causes the race condition.&#160; If the information in the main item is not committed before this workflow attempts to use it, you’ll get null values when the main item is a new item.&#160; When working with SPD workflows, these null values will show up as ????.&#160; </p>
<p>To resolve the race condition, I had to ensure that the main item was committed before the secondary workflow was started by pausing the workflow.&#160; Why does pausing the workflow cause the changes to be committed?&#160; According to the MSDN article “How Windows SharePoint Services Processes Workflow Activities” <a href="http://msdn.microsoft.com/en-us/library/ms442249.aspx">http://msdn.microsoft.com/en-us/library/ms442249.aspx</a></p>
<blockquote><p>Windows SharePoint Services runs the workflow until it reaches a point where it cannot proceed because it is waiting for some event to occur: for example, a user must designate a task as completed. Only at this &quot;commit point&quot; does Windows SharePoint Services commit the changes made in the previous Windows SharePoint Services-specific workflow activities…</p>
</blockquote>
<p>The not-so-clever workaround is to pause the workflow in between actions. When you add a pause, the workflow “cannot proceed because it is waiting for some event to occur” and therefore makes it a commit point. Not pretty – but works.</p>
<p>I hope that you find this article of use in your SharePoint Designer workflow troubleshooting endeavours. Below, I have pasted the complete stack traces (for the search engines).</p>
<p>Thanks for reading</p>
<p>Paul Culmsee</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6551570212921028";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel = "";
google_ui_features = "rc:6";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<div class="csharpcode"></div>
<div class="csharpcode">
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46 w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected ERROR: request not found in the TrackedRequests. We might be creating and closing webs on different threads. ThreadId = 1, Free call stack = at Microsoft.SharePoint.SPRequestManager.Release(SPRequest request) at Microsoft.SharePoint.SPWeb.Invalidate() at Microsoft.SharePoint.SPWeb.Close() at Microsoft.SharePoint.SPSite.Close() at Microsoft.SharePoint.SPSite.Dispose() at Microsoft.SharePoint.Workflow.SPWorkflowManager.<span class="kwrd">&lt;&gt;</span>c__DisplayClass1.<span class="kwrd">&lt;</span><span class="html">StartWorkflow</span><span class="kwrd">&gt;</span>b__0() at Microsoft.SharePoint.SPSecurity.CodeToRunElevatedWrapper(Object state) at Microsoft.SharePoint.SPSecurity.<span class="kwrd">&lt;&gt;</span>c__DisplayClass4.<span class="kwrd">&lt;</span><span class="html">RunWithElevatedPrivileges</span><span class="kwrd">&gt;</span>b__2() at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) at Microsoft.SharePoint.SPSecurity.RunWithEl&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;evatedPrivileges(WaitCallback secureCode, Object param) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode) at Microsoft.SharePoint.Workflow.SPWorkflowManager.StartWorkflow(SPListItem item, SPWorkflowAssociation association, SPWorkflowEvent startEvent, Boolean bAutoStart, Boolean bCreateOnly) at Microsoft.SharePoint.Workflow.SPWorkflowManager.StartWorkflow(SPListItem item, SPWorkflowAssociation association, String eventData, Boolean isAutoStart) at Microsoft.SharePoint.Workflow.SPWorkflowManager.StartWorkflow(SPListItem item, SPWorkflowAssociation association, String eventData) at Microsoft.SharePoint.WebControls.SPWorkflowDataSourceView.Insert(IDictionary values) at Microsoft.SharePoint.WebControls.SPWorkflowDataSourceView.Ins&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;ert(IDictionary values, DataSourceViewOperationCallback callback) at Microsoft.SharePoint.WebPartPages.DataFormWebPart.FlatCommit() at Microsoft.SharePoint.WebPartPages.DataFormWebPart.PerformCommit() at Microsoft.SharePoint.WebPartPages.DataFormWebPart.HandleOnSave(Object sender, EventArgs e) at Microsoft.SharePoint.WebPartPages.DataFormWebPart.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includ&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;eStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) at System.Web.UI.Page.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) at System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(Exception error) at System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) at System.Web.HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr) at Sys&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;tem.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType) , Allocation call stack (if present) at Microsoft.SharePoint.Library.SPRequest..ctor() at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous) at Microsoft.SharePoint.SPWeb.InitializeSPRequest() at Microsoft.SharePoint.SPWeb.EnsureSPRequest() at Microsoft.SharePoint.SPWeb.get_Request() at Microsoft.SharePoint.SPWeb.InitWebPublic() at Microsoft.SharePoint.SPWeb.get_ServerRelativeUrl() at Microsoft.SharePoint.SPWeb.get_Url() at Microsoft.SharePoint.SPUser.InitMember() at Microsoft.SharePoint.SPUser..ctor(SPWeb web, ISecura&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;bleObject scope, String strIdentifier, Object[,] arrUsersData, UInt32 index, Int32 iByParamId, String strByParamSID, String strByParamEmail, SPUserCollectionType userCollectionType, Boolean isSiteAuditor) at Microsoft.SharePoint.SPUser..ctor(SPWeb web, ISecurableObject scope, String strIdentifier, Object[,] arrUsersData, UInt32 index, Int32 iByParamId, String strByParamSID, String strByParamEmail, SPUserCollectionType userCollectionType) at Microsoft.SharePoint.SPUserCollection.GetByIDNoThrow(Int32 id) at Microsoft.SharePoint.SPSite.get_SystemAccount() at Microsoft.SharePoint.WorkflowActions.Helper.ResolveUserField(WorkflowContext context, Object fvalue) at Microsoft.SharePoint.WorkflowActions.Helper.LookupUser(WorkflowContext context, Guid listId, Int32 listItem, Strin&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;g fieldName) at Microsoft.SharePoint.WorkflowActions.Helper.LookupUser(WorkflowContext context, String listIdOrName, Int32 listItem, String fieldName) at Microsoft.SharePoint.WorkflowActions.LookupActivity.Execute(ActivityExecutionContext provider) at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime) at System.Workflow.Runtime.Scheduler.Run() at System.Workflow.Runtime.WorkflowExecutor.RunScheduler() at System.Workflow.Runtime.WorkflowExecutor.RunSome(Object ignored) &#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;at System.Workflow.Runtime.Hosting.DefaultWorkflowSchedulerService.WorkItem.Invoke(WorkflowSchedulerService service) at System.Workflow.Runtime.Hosting.DefaultWorkflowSchedulerService.QueueWorkerProcess(Object state) at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading._ThreadPoolW&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:25:20.46* w3wp.exe (0x0BA8) 0x16F8 Windows SharePoint Services General 0 Unexpected &#8230;aitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack) at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state) </span></p>
<p><span style="font-size: xx-small">&#160; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:27:16.49 w3wp.exe (0x0BA8) 0x1CB4 Windows SharePoint Services Workflow Infrastructure 88xr Unexpected WinWF Internal Error, terminating workflow Id# 02334a17-3211-4d30-902f-bf34e20354c6 </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:27:16.49 w3wp.exe (0x0BA8) 0x1CB4 Windows SharePoint Services Workflow Infrastructure 98d4 Unexpected System.Workflow.Runtime.Hosting.PersistenceException: Object reference not set to an instance of an object. &#8212;<span class="kwrd">&gt;</span> System.NullReferenceException: Object reference not set to an instance of an object. at DP.Sharepoint.Workflow.Common.RemoveListItemPermissionEntry(SPListItem item, String principalName, Boolean breakRoleInheritance) at DP.Sharepoint.Workflow.PermissionsService.<span class="kwrd">&lt;&gt;</span>c__DisplayClass1.<span class="kwrd">&lt;</span><span class="html">ProcessGrantRequest</span><span class="kwrd">&gt;</span>b__0() at Microsoft.SharePoint.SPSecurity.CodeToRunElevatedWrapper(Object state) at Microsoft.SharePoint.SPSecurity.<span class="kwrd">&lt;&gt;</span>c__DisplayClass4.<span class="kwrd">&lt;</span><span class="html">RunWithElevatedPrivileges</span><span class="kwrd">&gt;</span>b__2() at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:27:16.49* w3wp.exe (0x0BA8) 0x1CB4 Windows SharePoint Services Workflow Infrastructure 98d4 Unexpected &#8230; at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode) at DP.Sharepoint.Workflow.PermissionsService.ProcessGrantRequest(PermissionRequest pr) at DP.Sharepoint.Workflow.PermissionsService.Commit(Transaction transaction, ICollection items) at System.Workflow.Runtime.WorkBatch.PendingWorkCollection.Commit(Transaction transaction) at System.Workflow.Runtime.WorkBatch.Commit(Transaction transaction) at System.Workflow.Runtime.VolatileResourceManager.Commit() at System.Workflow.Runtime.WorkflowExecutor.DoResourceManagerCommit() at System.Workflow.Runtime.Hosting.WorkflowCommitWorkBatchService.CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback) at System.Workflow.Runtime.Hosting.DefaultWorkflowCommitWorkBatchSer&#8230; </span></p>
<p><span style="font-size: xx-small">06/25/2009 12:27:16.49* w3wp.exe (0x0BA8) 0x1CB4 Windows SharePoint Services Workflow Infrastructure 98d4 Unexpected &#8230;vice.CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback) at System.Workflow.Runtime.WorkflowExecutor.CommitTransaction(Activity activityContext) at System.Workflow.Runtime.WorkflowExecutor.Persist(Activity dynamicActivity, Boolean unlock, Boolean needsCompensation) &#8212; End of inner exception stack trace &#8212; at System.Workflow.Runtime.WorkflowExecutor.Persist(Activity dynamicActivity, Boolean unlock, Boolean needsCompensation) at System.Workflow.Runtime.WorkflowExecutor.ProtectedPersist(Boolean unlock) </span></p>
</p></div>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/&title=SPD+workflows%3A+%26ldquo%3BERROR%3A+request+not+found+in+the+TrackedRequests%26rdquo%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/&title=SPD+workflows%3A+%26ldquo%3BERROR%3A+request+not+found+in+the+TrackedRequests%26rdquo%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/&title=SPD+workflows%3A+%26ldquo%3BERROR%3A+request+not+found+in+the+TrackedRequests%26rdquo%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/&title=SPD+workflows%3A+%26ldquo%3BERROR%3A+request+not+found+in+the+TrackedRequests%26rdquo%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2009/06/28/spd-workflows-error-request-not-found-in-the-trackedrequests/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Why InfoPath rocks</title>
		<link>http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/</link>
		<comments>http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 12:31:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[InfoPath]]></category>
		<category><![CDATA[Offbeat]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/</guid>
		<description><![CDATA[At the San Diego Best Practices SharePoint conference, I sat quietly and listened to the governance godfather himself, Robert Bogue, discussing with the other SharePoint &#34;big kids&#34; various reasons why InfoPath sucks in many situations and some of its current design faults. I mean, anybody who has used forms services knows what a pain redeployment [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>At the San Diego Best Practices SharePoint conference, I sat quietly and listened to the governance godfather himself, <a href="http://www.thorprojects.com/blog/default.aspx" target="_blank">Robert Bogue</a>, discussing with the other SharePoint &quot;big kids&quot; various reasons why InfoPath sucks in many situations and some of its current design faults. I mean, anybody who has used forms services knows what a pain redeployment is, how much of a pain managed code is, the horrible performance of web services, branding crap and the like. Thus, all were perfectly valid points.</p>
<p>But irrespective of how correct those points are, I&#8217;d like to <strong>categorically state why </strong>InfoPath 2007 and Forms Services are the <strong>best</strong> pieces of technology that Microsoft has ever invented.</p>
<p>The simple reason is this. </p>
<p><u>My wife likes it!</u></p>
<p>To fully explain the implications of why InfoPath rocks, I have created an <a href="http://www.cleverworkarounds.com/2009/03/04/the-one-best-practice-to-rule-them-all-part-4/" target="_blank">IBIS issue map</a> that makes the argumentation quite clear.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2009/03/image13.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2009/03/image-thumb13.png" width="978" border="0" /></a> </p>
<p>I rest my case.</p>
<p>&#160;</p>
<p>Thanks for reading</p>
<p>Paul Culmsee</p>
<p><a href="http://www.sevensigma.com.au">www.sevensigma.com.au</a></p>
</p>
<p> <!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/&title=Why+InfoPath+rocks" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/&title=Why+InfoPath+rocks" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/&title=Why+InfoPath+rocks" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/&title=Why+InfoPath+rocks" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2009/03/05/why-infopath-rocks/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Leave form article 6 up at SharePointMagazine.net</title>
		<link>http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/</link>
		<comments>http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 23:09:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/</guid>
		<description><![CDATA[Due to a sudden burst of motivation (that has since evaporated , I finished off part 6 and part 7 of the InfoPath &#34;leave form tribute&#34; series. Arno has just posted part 6 which you can read here: http://sharepointmagazine.net/technical/a-tribute-to-the-humble-leave-form-part-6 Looking for part 7? Ask Arno nicely as I&#8217;m not sure when he plans to publish [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p>Due to a sudden burst of motivation (that has since evaporated <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , I finished off part 6 and part 7 of the InfoPath &quot;leave form tribute&quot; series. Arno has just posted part 6 which you can read here:</p>
<p><a title="http://sharepointmagazine.net/technical/a-tribute-to-the-humble-leave-form-part-6" href="http://sharepointmagazine.net/technical/a-tribute-to-the-humble-leave-form-part-6">http://sharepointmagazine.net/technical/a-tribute-to-the-humble-leave-form-part-6</a></p>
<p>Looking for part 7? Ask Arno nicely as I&#8217;m not sure when he plans to publish that one <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/&title=Leave+form+article+6+up+at+SharePointMagazine.net" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/&title=Leave+form+article+6+up+at+SharePointMagazine.net" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/&title=Leave+form+article+6+up+at+SharePointMagazine.net" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/&title=Leave+form+article+6+up+at+SharePointMagazine.net" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/11/30/leave-form-article-6-up-at-sharepointmagazinenet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A tribute to the humble leave form part 5</title>
		<link>http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/</link>
		<comments>http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 01:03:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[Offbeat]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/</guid>
		<description><![CDATA[Arno over at Sharepoint Magazine has published part 5 of my &#34;Leave Form Tribute&#34; series of articles. This latest article is a bit of a graduation from the first four, that were pitched squarely at new users. In part 5 we are now getting into the more advanced stuff &#8211; like attempting to explain web [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>Arno over at <a href="http://sharepointmagazine.net" target="_blank">Sharepoint Magazine</a> has published <a href="http://sharepointmagazine.net/technical/a-humble-tribute-to-the-leave-form-part-5" target="_blank">part 5</a> of my &quot;<a href="http://sharepointmagazine.net/author/cleverworkarounds" target="_blank">Leave Form Tribute</a>&quot; series of articles. This latest article is a bit of a graduation from the first four, that were pitched squarely at new users. In part 5 we are now getting into the more advanced stuff &#8211; like attempting to explain web services to the masses <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  I have found this to be a very challenging article to write.</p>
<p> <a href="http://sharepointmagazine.net/technical/a-humble-tribute-to-the-leave-form-part-5" target="_blank">Read it now!</a>
</p>
<p> <!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/&title=A+tribute+to+the+humble+leave+form+part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/&title=A+tribute+to+the+humble+leave+form+part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/&title=A+tribute+to+the+humble+leave+form+part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/&title=A+tribute+to+the+humble+leave+form+part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/10/04/a-tribute-to-the-humble-leave-form-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Part 4 in the &quot;Leave Form Tribute&#8230;&quot; series posted</title>
		<link>http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/</link>
		<comments>http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 02:42:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/</guid>
		<description><![CDATA[Hi all Arno over at SharePoint Magazine has published part 4 of my &#34;Tribute to the humble leave form&#34; series. This series is aimed at beginners and those starting out in SharePoint. This particular post covers publishing to forms services for the first time. cheers Paul p.s Want a new certification? Try the CCLFD &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;No [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p>Hi all</p>
<p>Arno over at <a href="http://sharepointmagazine.net" target="_blank">SharePoint Magazine</a> has published <a href="http://sharepointmagazine.net/technical/customisation/a-tribute-to-the-humble-leave-form-part-4" target="_blank">part 4</a> of my &quot;<a href="http://sharepointmagazine.net/author/cleverworkarounds" target="_blank">Tribute to the humble leave form</a>&quot; series. This series is aimed at beginners and those starting out in SharePoint. This particular post covers publishing to forms services for the first time. </p>
<p>cheers</p>
<p>Paul</p>
<p>p.s Want a new certification? Try the <a href="http://sharepointmagazine.net/technical/customisation/a-tribute-to-the-humble-leave-form-part-4" target="_blank">CCLFD</a> <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/&title=Part+4+in+the+%26quot%3BLeave+Form+Tribute%26%238230%3B%26quot%3B+series+posted" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/&title=Part+4+in+the+%26quot%3BLeave+Form+Tribute%26%238230%3B%26quot%3B+series+posted" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/&title=Part+4+in+the+%26quot%3BLeave+Form+Tribute%26%238230%3B%26quot%3B+series+posted" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/&title=Part+4+in+the+%26quot%3BLeave+Form+Tribute%26%238230%3B%26quot%3B+series+posted" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/09/13/part-4-in-the-leave-form-tribute-series-posted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latest article on SharePoint Magazine posted&#8230;</title>
		<link>http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/</link>
		<comments>http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 12:53:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[Offbeat]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/</guid>
		<description><![CDATA[The second article in the tribute to the humble leave form series has just been posted at SharePoint Magazine. I eagerly await the &#34;cease and desist&#34; letter Matt Groenings legal team Enjoy! &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;No Tags<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>The second article in the tribute to the humble leave form series has just been posted at <a href="http://sharepointmagazine.net/technical/customisation/a-tribute-to-the-humble-leave-form-part-2" target="_blank">SharePoint Magazine</a>.</p>
<p>I eagerly await the &quot;cease and desist&quot; letter Matt Groenings legal team <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Enjoy!</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/07/image14.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="194" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/07/image-thumb14.png" width="244" border="0" /></a> </p>
<p> <!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/&title=Latest+article+on+SharePoint+Magazine+posted%26%238230%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/&title=Latest+article+on+SharePoint+Magazine+posted%26%238230%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/&title=Latest+article+on+SharePoint+Magazine+posted%26%238230%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/&title=Latest+article+on+SharePoint+Magazine+posted%26%238230%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/07/31/latest-article-on-sharepoint-magazine-posted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lots of writing (just not here)</title>
		<link>http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/</link>
		<comments>http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 13:28:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Forms Services]]></category>
		<category><![CDATA[InfoPath]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Strategy]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/</guid>
		<description><![CDATA[Hi all My poor-old cleverworkarounds blog has been sadly neglected lately (and my numbers are reflecting that too dammit). But I have actually been doing a while lot of writing for other SharePoint online publications, namely EndUserSharePoint and SharePoint Magazine. The feedback from both has been great and much appreciated. If you haven&#8217;t read these [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>Hi all</p>
<p>My poor-old cleverworkarounds blog has been sadly neglected lately (and my numbers are reflecting that too dammit). But I have actually been doing a while lot of writing for other SharePoint online publications, namely <a target="_blank" href="http://www.endusersharepoint.com/">EndUserSharePoint</a> and <a target="_blank" href="www.sharepointmagazine.net">SharePoint Magazine</a>.</p>
<p>The feedback from both has been great and much appreciated. If you haven&#8217;t read these articles, then here is your quick reference.</p>
<p>Series 1: Rethinking SharePoint</p>
<p>This is a 4 part series that was a serious attempt to delve into SharePoint headspace. I focused very much on the human/social side of SharePoint projects. I was pretty pleased with how it came out and look forward to the final part being published soon.</p>
<ul>
<li><a target="_blank" href="http://www.endusersharepoint.com/?p=354">Thinking SharePoint &#8211; and listen to your mother!</a></li>
<li><a target="_blank" href="http://www.endusersharepoint.com/?p=447">Thinking SharePoint Part 2 &#8211; The &#8220;unconsciously competent&#8221; Ikea Mecca</a></li>
<li><a target="_blank" href="http://www.endusersharepoint.com/?p=550">Thinking SharePoint Part 3 &#8211; A Tale of Two Clients</a></li>
<li><a target="_blank" href="http://www.endusersharepoint.com/?p=575">Thinking SharePoint Part 4 &#8211; Zen and the art of SharePoint</a></li>
</ul>
<p>Series 2: A tribute to the leave form</p>
<p>This series is an offbeat look at the world of InfoPath Forms Services and SharePoint Designer workflow. Although I am having a bit of fun with this, there is a serious message behind it. While forms services looks terrific in demos, sometimes looks can be deceiving! The trick with this series is that they are also written to cater for a large audience, and that will be quite a challenge when we get into web services and code behind in InfoPath.</p>
<p>I&#8217;ve written 4 articles so far and I&#8217;d say there could easily be a dozen by the time I am done. The feedback has been really good, so here&#8217;s hoping I can deliver the rest!</p>
<ul>
<li><a target="_blank" href="http://sharepointmagazine.net/technical/development/a-tribute-to-the-humble-leave-form">A tribute to the humble &#8220;leave form&#8221; &#8211; Part 1</a></li>
<li>A tribute to the humble &#8220;leave form&#8221; &#8211; Part 2 *not yet released*</li>
<li>A tribute to the humble &#8220;leave form&#8221; &#8211; Part 3 *not yet released*</li>
<li>A tribute to the humble &#8220;leave form&#8221; &#8211; Part 4 *not yet released*</li>
<li>.</li>
<li>.</li>
<li>A tribute to the humble &#8220;leave form&#8221; &#8211; Part n *not yet written* <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>I have a large list of topics to also get well and truly stuck into, so hopefully I&#8217;ll have some quality stuff for you fairly soon.</p>
<p>Stay tuned</p>
<p>Paul Culmsee</p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/&title=Lots+of+writing+%28just+not+here%29" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/&title=Lots+of+writing+%28just+not+here%29" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/&title=Lots+of+writing+%28just+not+here%29" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/&title=Lots+of+writing+%28just+not+here%29" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/07/18/lots-of-writing-just-not-here/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

