<?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"
	>

<channel>
	<title>novolocus.com &#187; 2006 &#187; September</title>
	<atom:link href="http://www.novolocus.com/2006/09/feed" rel="self" type="application/rss+xml" />
	<link>http://www.novolocus.com</link>
	<description>Whatever Andy Burns is working on...</description>
	<pubDate>Tue, 06 Jan 2009 16:36:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>The frustration of Parallel activities</title>
		<link>http://www.novolocus.com/2006/09/29/the-frustration-of-parallel-activities/</link>
		<comments>http://www.novolocus.com/2006/09/29/the-frustration-of-parallel-activities/#comments</comments>
		<pubDate>Fri, 29 Sep 2006 14:09:19 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=139</guid>
		<description><![CDATA[So, I came across an interesting situation.
I have be told to look at trying to build the workflow I&#8217;ve been working on (a state machine workflow) as a sequential workflow.
In this workflow, I need to run two parallel tasks. On one side, I wait for a task to be completed, and on the other, I [...]]]></description>
			<content:encoded><![CDATA[<p>So, I came across an interesting situation.</p>
<p><img style="float: right" src="http://www.novolocus.com/wp-content/oldImages/55.png" border="1" alt="" />I have be told to look at trying to build the workflow I&#8217;ve been working on (a state machine workflow) as a sequential workflow.</p>
<p>In this workflow, I need to run two parallel tasks. On one side, I wait for a task to be completed, and on the other, I want to have a delay step followed by an email activity, to send the reminder email after a delay.</p>
<p>The problem is, the ParallelActivity step will only complete when BOTH branches have completed. I can&#8217;t <em>stop</em> the branch with the email. In other words, the user finishes their work on the step, but the workflow won&#8217;t continue until the reminder email sent!</p>
<p>Equally, if the delay step was some sort of escalation process (rather than an email, it wouldn&#8217;t be able to escalate until the user had finished with the step!</p>
<p>There has to be a way around this, I&#8217;m not sure what I&#8217;m doing wrong though.</p>
<p class="oldCommentOuter">Comments from my old blog:</p>
<p class="oldCommentInner">
<p class="oldComment">Hi,</p>
<p>you have to use an Listen activity, probably inside a while activity.</p>
<p>Note: the createTask activity you have to put outside the while.</p>
<p class="oldCommentFooter">By Sandro Pereira at 10:54:19 Monday 11th December 2006</p>
<p class="oldCommentInner">
<p class="oldComment">Yup, I realised I was being a bit slow - and that an event listener activity could have multiple branches, and completes when any of the events is done. I don&#8217;t think I&#8217;d need a while loop, though.</p>
<p>I was just using the wrong activity type.</p>
<p class="oldCommentFooter">By Andy B at 15:32:23 Monday 11th December 2006</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/29/the-frustration-of-parallel-activities/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Setting DelayActivity.TimeoutDuration at runtime in WSS3 workflows</title>
		<link>http://www.novolocus.com/2006/09/28/setting-delayactivitytimeoutduration-at-runtime-in-wss3-workflows/</link>
		<comments>http://www.novolocus.com/2006/09/28/setting-delayactivitytimeoutduration-at-runtime-in-wss3-workflows/#comments</comments>
		<pubDate>Thu, 28 Sep 2006 12:09:29 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=140</guid>
		<description><![CDATA[I need to use DelayActivity steps to &#8216;hold&#8217; the sending of some notification emails until the correct time. That time is to be set at runtime.
However, it appears that in State Machine workflows the TimeoutDuration of a DelayActivity can only be set at design time. Trying to set it at runtime causes the DelayActivity to [...]]]></description>
			<content:encoded><![CDATA[<p>I need to use DelayActivity steps to &#8216;hold&#8217; the sending of some notification emails until the correct time. That time is to be set at runtime.</p>
<p>However, it appears that in State Machine workflows the TimeoutDuration of a DelayActivity can only be set at design time. Trying to set it at runtime causes the DelayActivity to never expire.</p>
<p>I tried the same for a sequential workflow, and it worked okay. It seems this only affects State Machine workflows in SharePoint 2007 (MOSS)</p>
<p><strong>EDIT:</strong> correction, it DIDN&#8217;T work okay in a sequential workflow. I&#8217;m sure I did this before, though. Perhaps it&#8217;s broken in Beta 2 TR, or maybe my memory is failing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/28/setting-delayactivitytimeoutduration-at-runtime-in-wss3-workflows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#34;Send to&#34; and the Lutz Reflector</title>
		<link>http://www.novolocus.com/2006/09/27/send-to-and-the-lutz-reflector/</link>
		<comments>http://www.novolocus.com/2006/09/27/send-to-and-the-lutz-reflector/#comments</comments>
		<pubDate>Wed, 27 Sep 2006 11:09:02 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=141</guid>
		<description><![CDATA[Neat tip for .NET development. Put the Lutz Reflector into the context menu in windows.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zimakki.com/blog/?p=13">Neat tip</a> for .NET development. Put the Lutz Reflector into the context menu in windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/27/send-to-and-the-lutz-reflector/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Testing</title>
		<link>http://www.novolocus.com/2006/09/27/testing/</link>
		<comments>http://www.novolocus.com/2006/09/27/testing/#comments</comments>
		<pubDate>Wed, 27 Sep 2006 10:09:29 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=142</guid>
		<description><![CDATA[Some useful links to things to remember in testing in Coding Horror. I agree; developers are poor testers, and the guy who wrote it is the worst person to do testing.
]]></description>
			<content:encoded><![CDATA[<p>Some useful links to <a href="http://www.codinghorror.com/blog/archives/000690.html">things to remember in testing</a> in Coding Horror. I agree; developers are poor testers, and the guy who wrote it is the worst person to do testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/27/testing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Making MOSS a Search Provider in IE7</title>
		<link>http://www.novolocus.com/2006/09/25/making-moss-a-search-provider-in-ie7/</link>
		<comments>http://www.novolocus.com/2006/09/25/making-moss-a-search-provider-in-ie7/#comments</comments>
		<pubDate>Mon, 25 Sep 2006 12:09:03 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=145</guid>
		<description><![CDATA[Described on Mark Harrison&#8217;s Blog (notice the typo mentioned)
Edit: And more about integrating with a website&#8217;s own search
]]></description>
			<content:encoded><![CDATA[<p><a href="http://markharrison.co.uk/blog/2006/09/adding-moss-search-to-ie7.htm">Described on Mark Harrison&#8217;s Blog</a> (notice the typo mentioned)</p>
<p><strong>Edit:</strong> And more about integrating with <a href="http://markharrison.co.uk/blog/2006/09/ie7-search-discovery.htm">a website&#8217;s own search</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/25/making-moss-a-search-provider-in-ie7/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dealing with data concurrency using the ADO.net Dataset object</title>
		<link>http://www.novolocus.com/2006/09/23/dealing-with-data-concurrency-using-the-adonet-dataset-object/</link>
		<comments>http://www.novolocus.com/2006/09/23/dealing-with-data-concurrency-using-the-adonet-dataset-object/#comments</comments>
		<pubDate>Sat, 23 Sep 2006 09:09:44 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=146</guid>
		<description><![CDATA[So I&#8217;m not really familiar yet with .NET, and the Dataset object had the Java programmer in me a bit puzzled - but this article is actually quite good at highlighting some of the potential issues and dealing with them.
]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;m not really familiar yet with .NET, and the Dataset object had the Java programmer in me a bit puzzled - but <a href="http://msdn.microsoft.com/msdnmag/issues/03/04/DataConcurrency/">this article</a> is actually quite good at highlighting some of the potential issues and dealing with them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/23/dealing-with-data-concurrency-using-the-adonet-dataset-object/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Heatmaps</title>
		<link>http://www.novolocus.com/2006/09/23/heatmaps/</link>
		<comments>http://www.novolocus.com/2006/09/23/heatmaps/#comments</comments>
		<pubDate>Sat, 23 Sep 2006 09:09:14 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Graphics, Design and UI]]></category>

		<category><![CDATA[HTML &amp; Web]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=147</guid>
		<description><![CDATA[Heatmaps are apparently the next thing in web site statistics - and what a clever idea. For a while I worked on a JS file that would report the mouse moving over, out, and clicking on DOM elements in a page, but to be honest, that was a bit excessive - and much harder to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.corunet.com/english/the-definitive-heatmap">Heatmaps</a> are apparently the next thing in web site statistics - and what a clever idea. For a while I worked on a JS file that would report the mouse moving over, out, and clicking on DOM elements in a page, but to be honest, that was a bit excessive - and much harder to visualise.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/23/heatmaps/feed/</wfw:commentRss>
		</item>
		<item>
		<title>When attaching forms to workflow tasks&#8230;</title>
		<link>http://www.novolocus.com/2006/09/18/when-attaching-forms-to-workflow-tasks/</link>
		<comments>http://www.novolocus.com/2006/09/18/when-attaching-forms-to-workflow-tasks/#comments</comments>
		<pubDate>Mon, 18 Sep 2006 15:09:34 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Workflow]]></category>

		<category><![CDATA[Infopath]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=148</guid>
		<description><![CDATA[Follow the correct procedure&#8230; &#8230;it makes a difference.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://msdn2.microsoft.com/en-us/library/ms550782.aspx">Follow the correct procedure&#8230;</a> &#8230;it makes a difference.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/18/when-attaching-forms-to-workflow-tasks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tech Refresh, and updating Task&#8217;s user</title>
		<link>http://www.novolocus.com/2006/09/18/tech-refresh-and-updating-tasks-user/</link>
		<comments>http://www.novolocus.com/2006/09/18/tech-refresh-and-updating-tasks-user/#comments</comments>
		<pubDate>Mon, 18 Sep 2006 09:09:17 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=149</guid>
		<description><![CDATA[So, the tech refresh fixes the &#8216;UpdateTask&#8217; activity. By setting the task properties used by this step, it is possible to update the assigned user for a task. Hurrah! Something fixed by  the refresh. All I have to do now is figure out why I&#8217;m not able to get data to or from my [...]]]></description>
			<content:encoded><![CDATA[<p>So, the tech refresh fixes the &#8216;UpdateTask&#8217; activity. By setting the task properties used by this step, it is possible to update the assigned user for a task. Hurrah! Something fixed by  the refresh. All I have to do now is figure out why I&#8217;m not able to get data to or from my forms anymore. (Well, actually, &#8216;to&#8217; never worked, and &#8216;from&#8217; has a bug with repeating sections).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/18/tech-refresh-and-updating-tasks-user/feed/</wfw:commentRss>
		</item>
		<item>
		<title>InfoPath forms, repeating sections, and Workflow Tasks in SharePoint 2007</title>
		<link>http://www.novolocus.com/2006/09/13/infopath-forms-repeating-sections-and-workflow-tasks-in-sharepoint-2007/</link>
		<comments>http://www.novolocus.com/2006/09/13/infopath-forms-repeating-sections-and-workflow-tasks-in-sharepoint-2007/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 11:09:11 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Infopath]]></category>

		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=150</guid>
		<description><![CDATA[This was just bound to not work
So, the project I&#8217;m working on needs a repeating section in an InfoPath form, which is being used as the display form for a Workflow Task. (Well, apparently it is &#8216;required&#8217;).
InfoPath forms hand back their data into a SPWorkflowTaskProperties object, and custom data - including all the fields on [...]]]></description>
			<content:encoded><![CDATA[<p>This was just bound to not work</p>
<p>So, the project I&#8217;m working on needs a repeating section in an InfoPath form, which is being used as the display form for a Workflow Task. (Well, apparently it is &#8216;required&#8217;).</p>
<p>InfoPath forms hand back their data into a SPWorkflowTaskProperties object, and custom data - including all the fields on the form - gets put in the ExtendedProperties &#8216;Dictionary&#8217; (or Hash table, if you&#8217;re like me).</p>
<p>The thing is, the items in that hash table are keyed by the name of the field on the form. For example, the following would get the value of the &#8216;name&#8217; field:</p>
<p><code>x = AfterTaskChangedProperties1.ExtendedProperties["name"];</code></p>
<p>The thing about repeating sections, though, is that those field names will be repeated. But the hash key must be unique. So how are repeating sections represented.</p>
<p>I built a form to test this out. When the task was changed, I logged the key and value of everything in the Extended Properties. There were some other things in their - &#8217;standard&#8217; extended properties - and I&#8217;ve stripped them from the log below.</p>
<p>What I did was I opened up the form. I filled in the fields. The repeating section was shown once - one line on the &#8216;UsersLog&#8217; section. I filled it in, added 2 rows, and filled them in. I then submitted the form. Here&#8217;s what the log said:<br />
<code>"DocumentURL" = "Kumquat"<br />
"UsersLog" = "<br />
&lt;ns1:User xmlns:ns1="urn:soj-deltascheme-com.invoiceapproval"&gt;<br />
&lt;ns1:NetworkId&gt;1234567890&lt;/ns1:NetworkId&gt;<br />
&lt;ns1:Name&gt;AndyData1&lt;/ns1:Name&gt;<br />
&lt;/ns1:User&gt;<br />
&lt;ns1:User xmlns:ns1="urn:soj-deltascheme-com.invoiceapproval"&gt;<br />
&lt;ns1:NetworkId&gt;&lt;/ns1:NetworkId&gt;&lt;ns1:Name&gt;&lt;/ns1:Name&gt;&lt;/ns1:User&gt;<br />
&lt;ns1:User xmlns:ns1="urn:soj-deltascheme-com.invoiceapproval"&gt;<br />
&lt;ns1:NetworkId&gt;&lt;/ns1:NetworkId&gt;&lt;ns1:Name&gt;&lt;/ns1:Name&gt;&lt;/ns1:User&gt;<br />
"<br />
"InvoiceId" = "Juggernaut"<br />
"InvoiceCategory" = "34134"</code></p>
<p>So, the repeating section gets handed in as a chunk of XML. Great! That could be really useful - except&#8230;</p>
<p><strong>Except that it is missing the data from 2 of my lines!</strong> It&#8217;s got the correct number of &#8216;ns1:User&#8217; nodes (3), but only the first one ever has data. I&#8217;ve repeated, this seems to always be the case.</p>
<p>Bug. Let&#8217;s hope the tech refresh fixes it, &#8216;cos I can&#8217;t build the workflow I&#8217;ve been asked to with Beta 2.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/13/infopath-forms-repeating-sections-and-workflow-tasks-in-sharepoint-2007/feed/</wfw:commentRss>
		</item>
		<item>
		<title>STILL trying to update the Task Assignee</title>
		<link>http://www.novolocus.com/2006/09/13/still-trying-to-update-the-task-assignee/</link>
		<comments>http://www.novolocus.com/2006/09/13/still-trying-to-update-the-task-assignee/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 09:09:15 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Workflow]]></category>

		<category><![CDATA[Tasks]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=151</guid>
		<description><![CDATA[Right, so I had a suggestion from Nick Swan, and it was a good one, so I gave it a try.
What he said was:
With OnTaskChanged there is the BeforeProperties and AfterProperties variables.
In the event can&#8217;t you set the AssignedTo in the AfterProperties?
This seemed perfectly reasonable - and I hadn&#8217;t thought of it already, so it [...]]]></description>
			<content:encoded><![CDATA[<p>Right, so I had a suggestion from <a href="http://weblog.vb-tech.com/nick/">Nick Swan</a>, and it was a good one, so I gave it a try.</p>
<p>What he said was:</p>
<p class="insetA">With OnTaskChanged there is the BeforeProperties and AfterProperties variables.</p>
<p>In the event can&#8217;t you set the AssignedTo in the AfterProperties?</p>
<p>This seemed perfectly reasonable - and I hadn&#8217;t thought of it already, so it was worth a try (wood/trees obscuration).</p>
<p>I created a workflow that consisted of 3 steps - a Create Task step, a While Loop (that is always true) and in the While, I put an onTaskChanged event step.</p>
<p>Creating the task, you set the assignee using an SPWorkflowTaskProperties object. Here is my line for doing that:</p>
<p><code>TaskProperties.AssignedTo = "MOSS\\Domain Users";</code></p>
<p>That&#8217;s pretty clear. I then wrote code to set the AfterProperties of the onTaskChanged event:</p>
<p><code>TaskAfterProperties.AssignedTo = e.Identity;</code></p>
<p>Typically, e.Identity is something link &#8220;MOSS\\burnsa&#8221;. I&#8217;ve checked. And that&#8217;s what I&#8217;d expect it to be.</p>
<p>So, the workflow enters the while loop - which as I say, deliberately never exits - an the workflow awaits a change in the task. When that change comes, I&#8217;m going to look at the AssignedTo field of both the BeforeProperties, and AfterProperties. Oh, yeah, and I deliberately WASN&#8217;T changing the assignee within the task.</p>
<p>BeforeProperties - Expected: &#8220;MOSS\\Domain Users&#8221; - Actual: null</p>
<p>AfterProperties - Expected: &#8220;MOSS\\Domain Users&#8221; - Actual: &#8220;16&#8243;</p>
<p>&#8230;and setting the AfterProperties with e.Identity did damn all. WTF?</p>
<p>I could understand that setting AfterProperties with e.Identity might not work - although it seems a reasonable thing to try and do - but the AssignedTo fields being null, and then 16? Don&#8217;t make no sense.</p>
<p>Oh, further - I tried again, but this time setting the assignee as my change to fire the onTaskChanged event. This time the AfterProperties assignedTo field was &#8216;13&#8242;, so clearly it is some sort of identity - just not an obvious or particularly useful one.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/13/still-trying-to-update-the-task-assignee/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A real piece of computing history&#8230;</title>
		<link>http://www.novolocus.com/2006/09/13/a-real-piece-of-computing-history/</link>
		<comments>http://www.novolocus.com/2006/09/13/a-real-piece-of-computing-history/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 07:09:45 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[A Bit Random]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=152</guid>
		<description><![CDATA[Although Britain takes too much credit for Engima (the Poles figured out how to break it, although they didn&#8217;t &#8216;industrialise&#8217; it), the Turing Bombes are incredible, and it&#8217;s great to see one built.
]]></description>
			<content:encoded><![CDATA[<p>Although Britain takes too much credit for Engima (<a href="http://en.wikipedia.org/wiki/Biuro_Szyfr%C3%B3w">the Poles figured out how to break it</a>, although they didn&#8217;t &#8216;industrialise&#8217; it), <a href="http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2006/09/07/nbletchley07.xml">the Turing Bombes</a> are incredible, and it&#8217;s great to see one built.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/13/a-real-piece-of-computing-history/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Records management in SharePoint, and a drink or two in Soho</title>
		<link>http://www.novolocus.com/2006/09/11/records-management-in-sharepoint-and-a-drink-or-two-in-soho/</link>
		<comments>http://www.novolocus.com/2006/09/11/records-management-in-sharepoint-and-a-drink-or-two-in-soho/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 13:09:00 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Records Management]]></category>

		<category><![CDATA[Suguk]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=155</guid>
		<description><![CDATA[Before I went on holiday last week, I attended the SharePoint user group meeting that was happening in London. A couple of guys from Cap Gemini were doing a presentation on records management (RM) in SharePoint 2007. This will describe my impressions (my memory ain&#8217;t so good, so these are my notes&#8230;), and how it [...]]]></description>
			<content:encoded><![CDATA[<p>Before I went on holiday last week, I attended the SharePoint user group meeting that was happening in London. A couple of guys from Cap Gemini were doing a presentation on records management (RM) in SharePoint 2007. This will describe my impressions (my memory ain&#8217;t so good, so these are my notes&#8230;), and how it appears to work. I&#8217;ll start with my conclusions, and then move on to how the thing actually works.<span id="more-155"></span></p>
<p><strong>Conclusion: </strong> Well, it has basic RM functionality, but the guy taking the presentation did comment that it doesn&#8217;t fulfil all the legal requirements for some of the countries in Europe. Nobody was entirely sure which ones, though, and I&#8217;m not sure about the UK. Because of the structure of the system, I did find myself wondering if you might not end up with absurdly large lists of documents (see below). It should be possible, to some degree, to plug into the RM facilities of the system, and the use of the workflow foundation on the expiry of the retention schedule is nice as it should provide a good degree of flexibility.</p>
<p>Okay, so how does it work? First, a little about the structure of SharePoint sites and lists. Then we&#8217;ll consider content types, and then policies and RM.</p>
<p>So SharePoint is made up of Site Collections, which are collections of, well, Sites. Sites contain Lists and, potentially, subsites. This is kind of a difficult concept coming from the Livelink world, and the analogies of folders or projects don&#8217;t really fit. It&#8217;s almost that sites provide the hierarchy, while lists are the folders, discussions, task lists, etc., that you get in Livelink. Sites can contain many lists of the same type. So, for example, you might have a structure like</p>
<ul>
<li>Organisation SharePoint 2007 system
<ul>
<li>Organisation Site Collection
<ul>
<li>Accounts Site
<ul>
<li>Travel Expenses List</li>
<li>Documents In List</li>
<li>Documents Out List</li>
<li>Discussion List</li>
<li>&#8230;</li>
</ul>
</li>
<li>Invoice Site
<ul>
<li>Travel Expenses List</li>
<li>Invoice Forms List</li>
<li>&#8230;</li>
</ul>
</li>
<li>Pensions Site
<ul>
<li>Travel Expenses List</li>
<li>Pensions Documents List</li>
<li>Complaint Documents List</li>
<li>Pensions Form List</li>
<li>Project Deathrattle Sub site
<ul>
<li>Project&#8217;s Documents List</li>
<li>Projects News List</li>
</ul>
</li>
<li>&#8230;</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>(For some reason, Documents Lists and Forms Lists are actually called &#8216;Libraries&#8217; in SharePoint terminology. I&#8217;m going to call them lists though).</p>
<p>Okay, next concept - content types. This is basically a definition of &#8216;columns&#8217; of metadata that we want to capture. These definitions can then be applied to Lists throughout the site. For example, we might want to define a &#8216;Travel Expenses&#8217; content type, which we could apply to the &#8216;Travel Expenses&#8217; lists in each of the 3 sites in the example above. It could define metadata like, date of travel, cost, destination, etc., and we could make this mandatory. Thus, we define what we want to capture for multiple lists.</p>
<p>Content types are important as they control where a document ends up in the Record management system. We&#8217;ll see this in a bit.</p>
<p>Records Management adds a special &#8216;Records Repository&#8217; site to the SharePoint system - I&#8217;m not clear if this is on a system or site collection level. This site is optimised for RM - options on menus, etc., are geared towards RM actions and stuff.</p>
<p>What we do is create an Information Management Policy (retention schedule) for either a content type, or a particular document list. For example, we could define a policy just for the Pension &#8216;Complaint Documents List&#8217;, or if we created a policy for our &#8216;Travel Expenses&#8217; content type, then all 3 lists using it would have an information policy defined.</p>
<p>The information policy has features like Labels, auditing, Barcodes, expiration dates and rendition to other formats. We didn&#8217;t really go into these options. Expiration has a number of &#8217;standard&#8217; options (like deleting the document), or you can create a Windows workflow to run when expiration occurs.</p>
<p>Having defined a source, we define a destination in the Records Repository (see <a href="http://msdn2.microsoft.com/en-us/library/ms519734.aspx">here</a>). This will be a list, with a content type specifying the metadata to capture. I don&#8217;t think that this HAS to be the same as the content type in the source list, though that would be a logical choice.</p>
<p>Defining the source and destination like that populates a &#8216;routing table&#8217;. A user can then select a function from a document&#8217;s menu to save a copy of the document as a record. It is worth noting, it IS a copy of the document. SharePoint looks up the document&#8217;s content type, and routes it (based upon the &#8216;routing table&#8217;) to the appropriate list. There are special lists for &#8216;unclassified&#8217; documents (those without a routing), and for documents with incomplete mandatory metadata (these can be completed and put into the right lists)</p>
<p>So, for example, we might have a &#8216;Travel Expenses Records&#8217; list, and have any document with a content type of &#8216;Travel Expenses&#8217; that is declared as a record gets put in this list. Thus, travel expenses records from all 3 departments would end up in this list. &#8216;Complaint Documents&#8217; might be routed to a different list.</p>
<p>So, we&#8217;ve got a bunch of documents in our lists, and they have retention schedules, which will eventually expire and delete/archive the documents. When we&#8217;re sued, though, we might want to &#8216;hold&#8217; documents related to the case, so they don&#8217;t get deleted.</p>
<p>First, we create a hold (giving it a name, details, etc.), and then we add documents to it. Documents and holds have a many-to-many relationship - a hold can apply to many documents, and documents can be part of many holds. If a document has any holds applied, it can&#8217;t expire or be deleted. It is possible to perform a search, and then hold all documents returned by the search.</p>
<p>The other part of the demonstration looked at declaring a document as a record twice. This would create 2 records in the Records Repository, even if the document is unchanged - i.e.. EVEN IF THE TWO RECORDS ARE THE SAME. So, the second part of the demo looked at adding to the &#8216;routing stack&#8217; - a series of things that happen when a document is declared a record. Basically, what this did was add a &#8216;filter&#8217;, which recorded which items had been stored as records, and rejected attempts to store an item that had been recorded already. See <a href="http://msdn2.microsoft.com/en-us/library/ms492872.aspx">here</a> for more details.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/11/records-management-in-sharepoint-and-a-drink-or-two-in-soho/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Even more on Updating SharePoint Workflow Tasks</title>
		<link>http://www.novolocus.com/2006/09/11/even-more-on-updating-sharepoint-workflow-tasks/</link>
		<comments>http://www.novolocus.com/2006/09/11/even-more-on-updating-sharepoint-workflow-tasks/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 09:09:11 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Workflow]]></category>

		<category><![CDATA[Tasks]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=156</guid>
		<description><![CDATA[Okay, so having tried the programmatic route and got stuck, and investigated it, I realised that I&#8217;d been dumb.
There is an UpdateTask workflow activity
Okay, so I missed the obvious - that to update a task would require an activity if it is to work in SharePoint Designer. However, I tried adding this to a workflow. [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, so having tried the programmatic route and got stuck, and <a href="http://www.novolocus.com/display.php?id=304">investigated it</a>, I realised that I&#8217;d been dumb.</p>
<p><strong>There is an UpdateTask workflow activity</strong></p>
<p>Okay, so I missed the obvious - that to update a task would require an activity if it is to work in SharePoint Designer. However, I tried adding this to a workflow. When I went to the workflow code, I got the error:</p>
<blockquote><p>Code generation for property &#8216;PercentComplete&#8217; failed. Error was: &#8216;Property accessor &#8216;PercentComplete&#8217; on object &#8216;Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties&#8217; threw the following exeception: &#8216;Object reference not set to an instance of an object&#8217;</p></blockquote>
<p>Phew. Nice error. Then, sometimes, I managed to get the Designer view to have errors - it couldn&#8217;t draw the workflow. And build failed - the workflow designer.cs file lacked the line defining the private variable referencing the UpdateTask object. Oh, and trying to set properties of the task to update - more errors.</p>
<p>The short is, in Beta 2, Update Task doesn&#8217;t seem to work. I don&#8217;t think that there is a lot I can do to fix this&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/11/even-more-on-updating-sharepoint-workflow-tasks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using CSS to underline text in a textbox</title>
		<link>http://www.novolocus.com/2006/09/11/using-css-to-underline-text-in-a-textbox/</link>
		<comments>http://www.novolocus.com/2006/09/11/using-css-to-underline-text-in-a-textbox/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 08:09:48 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/?p=157</guid>
		<description><![CDATA[As used in SharePoint 2007 - putting a red wavy line below text in a text box. Neat.
Just in case I ever need this (and the page goes missing):
&#60;style&#62;
.squiggle
{
background-image:url("squiggle.gif");
background-repeat:repeat-x;
background-position:left bottom;
padding-bottom:2px;
vertical-align:text-top;
font-style:italic;
}
.container
{
border:1px solid #a5a5a5;
overflow-x: hidden;
width: 100%;
color: windowtext;
height: 18px;
background-color: window
}
&#60;/style&#62;
&#60;div class="container" contenteditable="true" tabindex="0"&#62;
&#60;span class="squiggle" contenteditable="false" tabindex="-1"&#62;
&#60;div style="DISPLAY: none" displaytext="here"&#62;&#60;/div&#62;
&#60;span contenteditable="true" tabindex="-1"&#62;unresolved!&#60;/span&#62;
&#60;/span&#62;
&#60;/div&#62;

]]></description>
			<content:encoded><![CDATA[<p>As used in SharePoint 2007 - <a href="http://fooshen.blogspot.com/2006/05/sharepoint-2007-neat-and-tidy.html">putting a red wavy line below text in a text box</a>. Neat.</p>
<p>Just in case I ever need this (and the page goes missing):</p>
<p><code>&lt;style&gt;<br />
.squiggle<br />
{<br />
background-image:url("squiggle.gif");<br />
background-repeat:repeat-x;<br />
background-position:left bottom;<br />
padding-bottom:2px;<br />
vertical-align:text-top;<br />
font-style:italic;<br />
}<br />
.container<br />
{<br />
border:1px solid #a5a5a5;<br />
overflow-x: hidden;<br />
width: 100%;<br />
color: windowtext;<br />
height: 18px;<br />
background-color: window<br />
}<br />
&lt;/style&gt;<br />
&lt;div class="container" contenteditable="true" tabindex="0"&gt;<br />
&lt;span class="squiggle" contenteditable="false" tabindex="-1"&gt;<br />
&lt;div style="DISPLAY: none" displaytext="here"&gt;&lt;/div&gt;<br />
&lt;span contenteditable="true" tabindex="-1"&gt;unresolved!&lt;/span&gt;<br />
&lt;/span&gt;<br />
&lt;/div&gt;<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2006/09/11/using-css-to-underline-text-in-a-textbox/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
