<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Stefano Pescosolido's Weblog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/stefanpe/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/stefanpe/feed.xml</link>
    <description>Sharing the Lesson Learned...</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:31:08 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Dipendenza da Internet</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/dipendenza-da-internet</link>
      <pubDate>Wed, 09 Apr 2014 02:43:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2014/04/09/dipendenza-da-internet/</guid>
      <description><![CDATA[Nella presentazione allegata ho raccolto alcune informazioni sul tema della "Dipendenza da Internet"...]]></description>
      <content:encoded><![CDATA[<p>Nella presentazione allegata ho raccolto alcune informazioni sul tema della "<strong>Dipendenza da Internet</strong>" (<em>Internet Addiction Disorder</em> - IAD), nuovo fenomeno sociale da tenere sotto osservazione.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/51/55/63/SID%202014%20-%20Dipendenza%20da%20Internet%20-%20StefanPe%20-%20PUBLIC.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-51-55-63/SID-2014-_2D00_-Dipendenza-da-Internet-_2D00_-StefanPe-_2D00_-PUBLIC.pdf">SID 2014 - Dipendenza da Internet - StefanPe - PUBLIC.pdf</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Internet e gli adolescenti - Informazioni e riflessioni per le scuole elementari</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/internet-e-gli-adolescenti-informazioni-e-riflessioni-per-le-scuole-elementari</link>
      <pubDate>Tue, 15 May 2012 20:23:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2012/05/15/internet-e-gli-adolescenti-informazioni-e-riflessioni-per-le-scuole-elementari/</guid>
      <description><![CDATA[&nbsp;- Ultimo aggiornamento: 27 maggio 2012&nbsp;- 
Salve a tutti!
Condivido la presentazione che...]]></description>
      <content:encoded><![CDATA[<p style="text-align: center;"><span style="font-family: comic sans ms,sans-serif;">&nbsp;- Ultimo aggiornamento: <strong><span style="color: #ff0000; text-decoration: underline;">27 maggio 2012</span></strong><span style="color: #000000;">&nbsp;- </span></span></p>
<p>Salve a tutti!</p>
<p>Condivido la presentazione che ho preparato qualche giorno fa per parlare della sicurezza in Internet ai bambini di alcune IV e V elementari; si tratta di incontri organizzati nell'ambito delle iniziative per il Safer Internet Day, a cui Microsoft partecipa&nbsp;da anni.&nbsp;</p>
<p><strong>Potete scaricarla in formato PDF (<a title="parte 1" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/7774.SID%202012%20-%20Elementari%20-%20StefanPe-parte%201.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/7774.SID-2012-_2D00_-Elementari-_2D00_-StefanPe_2D00_parte-1.pdf" target="_blank">parte 1</a> e <a title="parte 2" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/0882.SID%202012%20-%20Elementari%20-%20StefanPe-parte%202.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/0882.SID-2012-_2D00_-Elementari-_2D00_-StefanPe_2D00_parte-2.pdf" target="_blank">parte 2</a>), oppure <a title="visualizzarla direttamente via web" href="https://skydrive.live.com/?cid=30e2827196021ad0&amp;sc=documents#!/view.aspx?cid=30E2827196021AD0&amp;resid=30E2827196021AD0%211043" target="_blank">sfogliarla direttamente via web</a></strong> (attenzione: per vedere bene&nbsp;le animazioni e visualizzare le slide "nascoste", &egrave; necessario aprirla in PowerPoint; &egrave; possibile farlo da quest'ultimo collegamento).&nbsp;E' ora disponibile anche <strong><span style="text-decoration: underline;">un'appendice</span></strong> sull'uso di Facebook, pubblicata in formato <strong><a title="PDF" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/7610.SID%202012%20-%20Elementari%20-%20Appendice%20Facebook%20-%20StefanPe.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/7610.SID-2012-_2D00_-Elementari-_2D00_-Appendice-Facebook-_2D00_-StefanPe.pdf" target="_blank">PDF</a></strong> e&nbsp;<strong><a title="PowerPoint" href="https://skydrive.live.com/view.aspx?cid=30E2827196021AD0&amp;resid=30E2827196021AD0%211043#!/view.aspx?cid=30E2827196021AD0&amp;resid=30E2827196021AD0%211046" target="_blank">PowerPoint</a></strong>.</p>
<p>Due anni fa, avevo preparato una simpatica <a title="presentazione  " href="https://skydrive.live.com/?cid=30e2827196021ad0&amp;sc=documents#!/view.aspx?cid=30E2827196021AD0&amp;resid=30E2827196021AD0%211042" target="_blank">presentazione</a> (per quanto un po' troppo lunga e dettagliata...) nella quale spiegavo i concetti di base della sicurezza in Internet; ricordo che, a suo tempo (...di fatto, in un passato cos&igrave; recente&hellip;), quando chiedevo alle classi &lt;&lt;<em>chi <strong>*conosce*</strong> Facebook?</em>&gt;&gt; si alzavano pochissime mani.</p>
<p>Oggi mi sembra impensabile riproporre la stessa presentazione di due anni fa: a parit&agrave; di et&agrave;, quando domando alle classi &lt;&lt;<em>chi <strong>*&egrave; su*</strong> Facebook?</em>&gt;&gt;, si alzano le mani di moltissimi bambini (parliamo di bambini di 9-10 anni, sebbene Facebook - cos&igrave; come molti altri social network - richieda di avere almeno 13 anni per effettuare l'iscrizione&hellip; Del resto, loro sanno benissimo come "ingannarlo"...).</p>
<p>Per quanto appena detto, quest'anno ho pensato di organizzare la presentazione dando per scontato che i bambini conoscano (o intuiscano) molti concetti di base ed immaginando delle <strong>situazioni impreviste o difficili</strong> da sottoporre alla loro attenzione, per poi ragionare insieme su come possono o devono comportarsi.</p>
<p>Dopo i primi riscontri, devo ammettere che la consapevolezza dei bambini sui pericoli di Internet mi sembra molto migliorata rispetto a due anni fa; ascoltando le loro risposte , mi &egrave; venuto pi&ugrave; volte il dubbio di aver immaginato per loro delle situazioni fin troppo banali (...per altro, <strong>ogni suggerimento per migliorare il contenuto della presentazione &egrave; ben gradito!</strong>). &Egrave; pur vero, comunque, che un buon "ripasso" pu&ograve; risultare sempre utile; inoltre, leggendo i giornali&nbsp;(...vi rimando a queste <strong><a title="evidenze" href="https://blogs.msdn.com/b/stefanpe/archive/2012/05/06/internet-e-gli-adolescenti-alcune-evidenze.aspx" target="_blank">evidenze</a></strong>...), sembra che non tutti gli adolescenti sappiano riconoscere ed evitare i pericoli.</p>
<p>Mi auguro che questo materiale possa essere di aiuto.</p>
<p>Per approfondimenti, vi riporto i collegamenti al sito&nbsp;delle iniziative per il&nbsp;<a title="Safer Internet Day  " href="https://www.saferinternetday.org" target="_blank">Safer Internet Day</a> ed al sito in cui &egrave; descritto l'<a title="impegno di Microsoft" href="https://www.sicuramenteweb.it" target="_blank">impegno di Microsoft</a> per un'utilizzo pi&ugrave; sicuro e responsabile della rete da parte degli adolescenti.</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Internet e gli adolescenti - Alcune evidenze</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/internet-e-gli-adolescenti-alcune-evidenze</link>
      <pubDate>Sun, 06 May 2012 09:45:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2012/05/06/internet-e-gli-adolescenti-alcune-evidenze/</guid>
      <description><![CDATA[Salve a tutti.
Condivido i risultati di una ricerca che ho recentemente effettuato&nbsp;tra&nbsp;le...]]></description>
      <content:encoded><![CDATA[<p>Salve a tutti.</p>
<p>Condivido i risultati di una ricerca che ho recentemente effettuato&nbsp;tra&nbsp;le notizie pubblicate in Italia nel corso degli ultimi anni, riguardanti il&nbsp;tema della "<strong>sicurezza su Internet per gli adolescenti</strong>".</p>
<p>Ho effettettuato questo lavoro per prepararmi ad affrontare al meglio i nuovi incontri con adolescenti, genitori ed insegnati, organizzati presso alcune scuole elementari e medie&nbsp;nell'ambito delle iniziative per il Safer Internet Day a cui Microsoft aderisce da anni. Per quanto credo sia giusto rappresentare i pericoli indipendentemente dal numero di&nbsp;casi reali che si sono verificati, mi pare sia comunque utile avere l'evidenza di quanto certe situazioni e certi comportamenti siano comuni.</p>
<p>La ricerca mi ha permesso di redigere una piccola rassegna stampa che - pur nella sua dichiarata ed evidente incompletezza - offre diversi spunti di riflessione ed approfondimento&nbsp;per genitori ed educatori interessati a comprendere le "ultime&nbsp;dinamiche" dei rapporti sociali tra gli adolescenti, che vedono Internet come strumento di comunicazione e palcoscenico. Certo, la mia ricerca &egrave; stata fatta con lo scopo di mettere alla luce solo&nbsp;i pericoli e le degenerazioni; lascio al lettore la riflessione su quanto ci sia di positivo nella <a title="The Social Media Revolution - YouTube" href="https://www.youtube.com/watch?v=3SuNx0UrnEo&amp;list=FLO7wtzGDRmv-Nt8rE73pQug&amp;index=3&amp;feature=plpp_video" target="_blank">Social Media Revolution</a> :-).</p>
<p><strong><a title="I risultati di questa ricerca sono disponibili in formato PDF" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/30/15/59/SID%202012%20-%20Genitori%20-%20Evidenze%20-%20StefanPe.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-30-15-59/SID-2012-_2D00_-Genitori-_2D00_-Evidenze-_2D00_-StefanPe.pdf" target="_blank">I risultati di questa ricerca sono disponibili in formato PDF</a></strong> come allegato a questo post&nbsp;<strong>ed in formato PowerPoint, visualizzabile via web o scaricabile&nbsp;<a title="Presentazione risultati ricerca sicurezza Internet adolescenti" href="https://skydrive.live.com/?cid=30e2827196021ad0&amp;sc=documents#!/view.aspx?cid=30E2827196021AD0&amp;resid=30E2827196021AD0%211037" target="_blank">a&nbsp;questo link</a></strong>.</p>
<p>Segnalo, infine, che aggiorner&ograve; la presentazione quando avr&ograve; evidenza di nuovi contenuti interessanti da inserire... tempo a disposizione permettendo... (<span style="text-decoration: underline;">ultimo aggiornamento: <span style="color: #ff0000; text-decoration: underline;"><strong>10/5/2012</strong></span></span>).</p>
<p>Stefano</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/30/15/59/SID%202012%20-%20Genitori%20-%20Evidenze%20-%20StefanPe.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-30-15-59/SID-2012-_2D00_-Genitori-_2D00_-Evidenze-_2D00_-StefanPe.pdf">SID 2012 - Genitori - Evidenze - StefanPe.pdf</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Open Data in Italia: opportunità e soluzioni con le tecnologie cloud di Microsoft</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/open-data-in-italia-opportunit-e-soluzioni-con-le-tecnologie-cloud-di-microsoft</link>
      <pubDate>Fri, 27 Jan 2012 15:07:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2012/01/27/open-data-in-italia-opportunit-e-soluzioni-con-le-tecnologie-cloud-di-microsoft/</guid>
      <description><![CDATA[[This post is only in Italian; I apologize to the international readers.&nbsp;A&nbsp;few parts will...]]></description>
      <content:encoded><![CDATA[<p style="text-align: center;"><span style="color: #ff0000;">[This post is only in Italian; I apologize to the international readers.&nbsp;A&nbsp;few parts will be probably translated in the future...]</span></p>
<p><span style="color: #000000;">Condivido un mio recente&nbsp;lavoro sul tema dell'Open Data.</span></p>
<p><span style="color: #000000;">Si tratta di un&nbsp;documento alquanto corposo (ca. 150 pag.) che c</span><span style="color: #000000;">ontiene una descrizione abbastanza approfondita dei seguenti argomenti:</span></p>
<ul>
<li><span style="color: #000000;">concetti, motivazioni, benefici e problematiche&nbsp;dell'<strong>Open Data</strong>, con particolare riferimento allo scenario italiano;</span></li>
<li><span style="color: #000000;">motivazioni per l'utilizzo di tecnologie cloud nelle soluzioni Open Data;</span></li>
<li><span style="color: #000000;">aspetti funzionali, architetturali ed economici della soluzione cloud di Microsoft con modello di servizio di tipo <em>Platform as a Service</em> [PaaS] denominata "<strong>Windows Azure</strong>";</span></li>
<li><span style="color: #000000;"><span style="color: #000000;">aspetti </span>funzionali ed&nbsp;architetturali della soluzione di Open Data denominata "<strong>Open Government Data Initiative</strong>" [OGDI],&nbsp;basata su Windows Azure e distribuita con modello <em>open source</em>;</span></li>
<li>guida passo-passo per la predisposizione di un ambiente <strong>demo</strong> basato su OGDI e prova di importazione di alcuni dataset della Regione Piemonte (modifiche del codice, configurazioni su Azure, predisposizione dei dati, caricamento e test di accesso)</li>
</ul>
<p>Il documento<strong> </strong>&egrave; stato redatto tra ottobre e dicembre 2011, nel contesto dello stage di fine corso per il Master in "Interoperabilit&agrave; per la Pubblica Amministrazione e le Imprese" organizzato dall'Universit&agrave; "La Sapienza" di Roma nell'A.A. 2010-2011. La versione gi&agrave; consegnata all'Universit&agrave; &egrave;&nbsp;visualizzabile e scaricabile&nbsp;dal seguente link: "<strong><a title="Tesi sull'Open Data in Italia" href="https://skydrive.live.com/redir.aspx?cid=30e2827196021ad0&amp;resid=30E2827196021AD0!1032&amp;parid=30E2827196021AD0!640&amp;authkey=!ACG6egD0xDZm734" target="_blank">Open Data in Italia: opportunit&agrave; e soluzioni con le tecnologie cloud di Microsoft</a></strong>" ed &egrave; resa disponibile con licenza CC-BY-3.0.</p>
<p><a title="CC BY 3.0" href="https://creativecommons.org/licenses/by/3.0/" target="_blank"><img style="border: 0; margin-right: auto; margin-left: auto; display: block;" alt="" src="https://i.creativecommons.org/l/by/3.0/88x31.png" width="88" height="31" /></a></p>
<p>Una brevissima&nbsp;presentazione di tipo "executive summary" (10-15 minuti) sull'Open Data - tratta dai contenuti del suddetto documento -&nbsp;&egrave; scaricabile da questo link: <a title="presentazione" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/0552.Open%20Data%20in%20Italia%20-%20Presentazione-10min-20120124.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/0552.Open-Data-in-Italia-_2D00_-Presentazione_2D00_10min_2D00_20120124.pdf">presentazione</a>&nbsp;ed &egrave; offerta con lo stesso tipo di licenza.</p>
<p>Mi auguro che&nbsp;questo materiale possa essere di aiuto per chi ha l'esigenza di approfondire il tema dei dati aperti e/o per chi desidera comprendere come sperimentare i servizi cloud di Windows Azure e la soluzione OGDI.</p>]]></content:encoded>
    </item>
    <item>
      <title>Articulating the Benefits of the Italian National Enterprise Architecture (SPCoop) using the BDN Methodology</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/articulating-the-benefits-of-the-italian-national-enterprise-architecture-spcoop-using-the-bdn-methodology</link>
      <pubDate>Sun, 24 Jul 2011 22:57:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2011/07/24/articulating-the-benefits-of-the-italian-national-enterprise-architecture-spcoop-using-the-bdn-methodology/</guid>
      <description><![CDATA[Organizations wishing to collaborate can benefit from the opportunities offered by the...]]></description>
      <content:encoded><![CDATA[<p>Organizations wishing to collaborate can benefit from the opportunities offered by the interoperability in Information Technology and, in particular, by the cooperation of the software systems and services.</p>
<div _msthash="826319">
<p>For public administrations, a similar collaboration can produce economic and social benefits.</p>
<p>I had recently the opportunity to apply the Benefit Dependency Network (BDN) methodology - with a few changes, approximations and personalization - for analyzing the benefits of the Italian "<strong>SPCoop</strong>" - "<strong>Sistema Pubblico di Cooperazione</strong>&rdquo; (meaning "Public Cooperative System") - a nationwide enterprise architecture developed&nbsp;in accordance to the National interoperability framework, defined in the law decree named&nbsp;"<strong>CAD</strong>" -&nbsp;"<strong>Codice dell'Amministrazione Digitale</strong>" (meaning &ldquo;Digital Administration Code&rdquo;).</p>
<p>This is a quick look to the resulting map:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/2480.MasterInterop.WorkItem1.FullBDN.png" original-url="https://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/2480.MasterInterop.WorkItem1.FullBDN.png"><img style="max-width: 550px;" border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/2480.MasterInterop.WorkItem1.FullBDN.png" original-url="https://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/2480.MasterInterop.WorkItem1.FullBDN.png" /></a></p>
<p>If&nbsp;you are interested (...and Italian-language speaking...), here is the full document describing the map in details: <strong><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/1440.Valutazione%20dei%20benefici%20dell'interoperabilitE000%20-%20Stefano%20Pescosolido%20-%20v.1-DOC.pdf" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/1440.Valutazione-dei-benefici-dell_2700_interoperabilit_E000_-_2D00_-Stefano-Pescosolido-_2D00_-v.1_2D00_DOC.pdf" target="_blank">Valutazione dei benefici dell'interoperabilit&agrave; - Stefano Pescosolido - v.2-DOC.pdf</a> (<span style="color: #ff0000;">italian version only</span>).</strong></p>
<p>I hope you will find this material useful.</p>
</div>
<p></p>
<p></p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>Identity Federation And Interoperability Using Web Browsers</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/identity-federation-and-interoperability-using-web-browsers</link>
      <pubDate>Sun, 24 Jul 2011 16:04:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2011/07/24/identity-federation-and-interoperability-using-web-browsers/</guid>
      <description><![CDATA[Recently, I had the opportunity to delve into the operation of the Microsoft AD FS 2.0 and Windows...]]></description>
      <content:encoded><![CDATA[<p>Recently, I had the opportunity to delve into the operation of the Microsoft AD FS 2.0 and Windows Azure ACS 2.0&nbsp;services, especially for configuring them as gateways between different Identity Federation protocols.</p>
<p>More in details, I have setup up a lab with the following protocols and standards:</p>
<ul>
<li>WS-Federation&nbsp;(Passive Requestor&nbsp;Profile)</li>
<li>SAML 2.0 Protocols, Bindings and Profiles</li>
<li>OpenID 2.0</li>
<li>OAuth 2.0</li>
</ul>
<p>Specifically, I have set up a demo environment where the authentication for accessing a single SharePoint Server 2010 web site or a single custom ASP.NET web site&nbsp;can be performed by specifying user credetials available on a wide set of different identity providers:</p>
<ul>
<li>Active Directory (directly from SharePoint or through AD FS)</li>
<li>Shibboleth (allowing the authentication against an LDAP of type AD LDS)</li>
<li>Windows Live ID, Google Accounts and Facebook (through Windows Azure ACS and AD FS)</li>
</ul>
<p>This is a logical view of the demo environment:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/5444.MasterInterop.WorkItem2.LogicalView.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/5444.MasterInterop.WorkItem2.LogicalView.png"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/33/32/5444.MasterInterop.WorkItem2.LogicalView.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-33-32/5444.MasterInterop.WorkItem2.LogicalView.png" /></a></p>
<p>If you are interested, please look at the following material:</p>
<ul>
<li>the <strong>demo objectives and evidences</strong> on&nbsp;this <strong><a href="https://skydrive.live.com/?cid=30e2827196021ad0&amp;sc=documents#!/view.aspx?cid=30E2827196021AD0&amp;resid=30E2827196021AD0%21659" target="_blank">PowerPoint presentation</a></strong> (web-browsable on SkyDrive);</li>
<li>the lab environment <strong>installation log</strong> on&nbsp;this <strong><a href="https://skydrive.live.com/?cid=30e2827196021ad0&amp;sc=documents#!/view.aspx?cid=30E2827196021AD0&amp;resid=30E2827196021AD0%21643" target="_blank">OneNote&nbsp;notebook</a>&nbsp;</strong>(web-browsable on SkyDrive).</li>
</ul>
<p><br />I hope that you will find this information useful.</p>
<p>&nbsp;Stefano</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Rapid “Data Collection” Solutions – Part 4: designing and implementing a security model</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/rapid-data-collection-solutions-part-4-designing-and-implementing-a-security-model</link>
      <pubDate>Wed, 07 Apr 2010 05:35:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2010/04/07/rapid-data-collection-solutions-part-4-designing-and-implementing-a-security-model/</guid>
      <description><![CDATA[I refer to the business problem already described in the post “Rapid “Data Collection” Solutions –...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>I refer to the business problem already described in the post “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/02/04/rapid-data-collection-solutions-part-1-defining-the-business-problem.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT color=#0000ff size=3 face=Calibri>Rapid “Data Collection” Solutions – Part 1: defining the business problem</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>”. In this series of posts, I am considering the options available for building a quick and – possibly – zero-code solution based on a SharePoint web environment. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>In my previous post “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/02/04/rapid-data-collection-solutions-part-2-designing-and-implementing-a-data-model.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT color=#0000ff size=3 face=Calibri>Rapid “Data Collection” Solutions – Part 2: designing and implementing a data model</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>” I have considered the problem of “preparing the storage” for the data that need to be collected; in that post I have also described the possibility to implement some kind of “<I style="mso-bidi-font-style: normal">data-completion workflows</I>”, helpful especially when it is desired to automate the filling of “redundant columns”. In the sequent post “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/03/12/rapid-data-collection-solutions-part-3-designing-and-implementing-the-business-process.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>Rapid “Data Collection” Solutions – Part 3: designing and implementing the business process</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>” I have considered some aspects of the “<I style="mso-bidi-font-style: normal">business process workflows</I>” (or “<I style="mso-bidi-font-style: normal">human workflows</I>”) implementation.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>In this post I will describe the most important concerns that must be addressed when planning and implementing the security model for such a kind of data collection solution.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>I will not explain the SharePoint security model: I assume that this is already well known to the reader; if it is not, I suggest starting with the reading of these articles: “</FONT></SPAN><A href="https://technet.microsoft.com/en-us/library/cc287752(office.14).aspx" target=_blank mce_href="https://technet.microsoft.com/en-us/library/cc287752(office.14).aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT color=#0000ff size=3 face=Calibri>Plan site permissions (SharePoint Foundation 2010)</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>” “</FONT></SPAN><A href="https://technet.microsoft.com/en-us/library/cc262778(office.14).aspx" target=_blank mce_href="https://technet.microsoft.com/en-us/library/cc262778(office.14).aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT color=#0000ff size=3 face=Calibri>Plan site permissions (SharePoint Server 2010)</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>” (both articles are about SharePoint 2010 but the same concepts are valid for WSS 3.0 and MOSS 2007). I summarize what is written in these articles with the following sentence (that also gives me the opportunity to set the “security vocabulary” used in the rest of this post):<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt 18pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>In SharePoint, the authorization mechanism consists in assigning, on a <B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal">securable object</I></B><I style="mso-bidi-font-style: normal"> </I>(web, list, item or folder), one or more <B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal">permissions levels</I></B> (set of <I style="mso-bidi-font-style: normal">base permissions</I>) to a <B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal">security principal</I></B> (user or group); the assignment can be <I style="mso-bidi-font-style: normal">explicit</I> or <I style="mso-bidi-font-style: normal">inherited</I> from the permissions set on the above securable objects in the site collection hierarchy. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Another important rule that need to be considered here is the following one:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt 18pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>A declarative workflow designed and deployed through SharePoint Designer is always executed in the <B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal">security context</I> of the user that started the workflow</B>.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Now, it is time to summarize what are the elements that compose the data collection solution described in this and in my previous posts. When considering the involved “securable objects”, it is important to notice that the entire solution is confined into a single SharePoint web; in detail, we have considered the following securable objects:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l2 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>The “<U>main list</U>” containing the result of the data collection initiative; it is worth to highlight that this is the list where the optional “<I style="mso-bidi-font-style: normal">data-completion workflows</I>” and the “<I style="mso-bidi-font-style: normal">business process workflows</I>” are associated.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l2 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>A set of “<U>related lookup lists</U>”, allowing the representation of an optional data model around the collected data<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l2 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>A “<U>Tasks list</U>”, containing the tasks assigned to the users involved by the “<I style="mso-bidi-font-style: normal">business process workflow</I>”; with SPD 2007, all the workflows deployed in a web must use the same tasks list; with SPD 2010 you have the option to assign a specific list to each workflow. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l2 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>A hidden “<U>History list</U>” containing the messages logged by the implemented workflows (the messages shown on the workflow’s status page); with SPD 2007, all the workflows deployed in a web must use the same history list; with SPD 2010 you have the option to assign a specific list to each workflow. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l2 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Optionally a “<U>custom history list</U>”, containing the evolution of the important values in the items subjected to the “<I style="mso-bidi-font-style: normal">business process workflows</I>”.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 38.7pt; mso-list: l2 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>A set of “<U>custom forms</U>” – stored into an hidden document library – automatically created (as “.xsn” files in SharePoint 2010 and as “.aspx” files in SharePoint 2007) during the deployment of the “<I style="mso-bidi-font-style: normal">business process workflow</I>” (why do I explicitly mention these forms? I will explain shortly why they must be considered when planning and implementing the security model…)<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>What about the “roles” that we have considered in this series of posts? They were not explicitly mentioned until now; it is time to define them. Trying to be generic, it is possible to say that:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l5 level1 lfo2; mso-add-space: auto" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>there are individuals that must be able to prepare and manage the data stored into the “model” designed around the data to be collected;<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l5 level1 lfo2; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>there are individuals that must be involved into the data collection process as contributors only for the part of data that they own;<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 38.7pt; mso-list: l5 level1 lfo2; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>there are individuals that need a read-only access to the collected data.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Certainly, in this way I have not described all the possible situations in details: there are scenarios, for example, where a certain group of individuals must be able to manage only a specific set of the data model designed around the data to be collected. A more detailed description of all the possible security requirements is not practically possible in this post; now I need to consider a more generic and simplified vision, in order to define at least a “base solution” for the security model.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Trying to map these “base security needs” with the SharePoint security model principles and with the declarative workflow security rule mentioned above, we can design the solution described into the following table in terms of permission levels that must be assigned to the involved security principals on the involved securable objects:<o:p></o:p></FONT></FONT></SPAN></P>
<TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" class=MsoTableGrid border=1 cellSpacing=0 cellPadding=0 class="MsoTableGrid">
<TBODY>
<TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" vAlign=top width=132>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=136>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Users managing the data model around the collected data<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 89.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=119>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Users allowed to start the<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>“<I style="mso-bidi-font-style: normal">business process workflow</I>”<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=137>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Users involved as contributors by the “<I style="mso-bidi-font-style: normal">business process workflow</I>”<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.75pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=133>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Readers<o:p></o:p></FONT></FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 1">
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=132>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Main list<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=136>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 89.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=119>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Contribute<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=137>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.75pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=133>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 2">
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=132>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Optional related lookup lists<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=136>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Contribute<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 89.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=119>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=137>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.75pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=133>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 3">
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=132>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Task list<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=136>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 89.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=119>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Contribute<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=137>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Contribute<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.75pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=133>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 4">
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=132>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Optional custom history list<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=136>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 89.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=119>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Contribute<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=137>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.75pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=133>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 5; mso-yfti-lastrow: yes">
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=132>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Custom task forms<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=136>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 89.05pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=119>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 102.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=137>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD>
<TD style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 99.75pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=133>
<P style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Read<o:p></o:p></FONT></FONT></SPAN></P></TD></TR></TBODY></TABLE>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>In the previous table I have not explicitly considered the standard hidden “history list” where the workflows log their messages, because the permission assignments on this list are managed directly by SharePoint.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>The “Read” permission level assignment to the “custom task forms” is done automatically during the workflow deployment; there are situations where you may need to update these assignments by adding new security principals; for more information on this subject I suggest reading this post: “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/03/17/dynamic-tasks-assignment-and-access-denied-errors-in-declarative-workflows.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT color=#0000ff size=3 face=Calibri>Dynamic tasks assignment and access denied errors in declarative workflows [SPD 2007 only]</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>”.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>It is important to notice that the described solution for the security model allows to implement a “<B style="mso-bidi-font-weight: normal">separation of contexts</B>”: the users involved by the <I style="mso-bidi-font-style: normal">business process workflow</I> as contributors in the data collection process require the “contribute” permission level on the “tasks list” but do not need the “contribute” permission level on the “main list”, neither when the information provided by these users are copied back in this list (accordingly to the approach that I have described in “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/03/12/rapid-data-collection-solutions-part-3-designing-and-implementing-the-business-process.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>Rapid “Data Collection” Solutions – Part 3: designing and implementing the business process</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>”). This is true because this copy is done by the workflow, which is always executed in the security context of the user that started it (the completion of a task by an assignee does not change this security context!). <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>For the same reason, it is important to notice that the users allowed to start the “<I style="mso-bidi-font-style: normal">business process workflow</I>” require the contribute permission into the (optional) “custom history list” and into the “tasks list”.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>The “<I style="mso-bidi-font-style: normal">business process workflow</I>” is normally configured to be started automatically by the creation of a new item in the “main list”; for this reason, in the previous table, I have depicted the “Contribute” permission level as the only permission assignment required on the “main list” for the users allowed to start this workflow. If the startup of this workflow must instead be done as a manual operation, it is possible to require the possession of the “Manage list” base permissions (which is not part of the standard “Contribute” permission level). This option allows to further implement a “separation of contexts”: the contributors of the main list prepare the items where specific enabled users can start the “<I style="mso-bidi-font-style: normal">business process workflow</I>”.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Please note that, in this post, I will not consider the following SharePoint functionalities related to the list content security management: <o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l4 level1 lfo7" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>the list item “approval mechanism”;<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l4 level1 lfo7" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>the “item-level security” (I am referring to the options available in the advanced list settings);<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>In the rest of this post I will consider some specific but quite common security needs:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo5" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>How to avoid the deletion of the items, especially from the “main list” and/or from the “custom history list”?<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo5" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>How to protect the value of specific fields for the items in the “main list”?<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo5" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>How to protect the “tasks” created by the workflow, in order to allow only their assignee to update and complete them?<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></P>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Avoiding the deletion of items<o:p></o:p></FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>A common need consists in avoiding the deletion of the items, especially from the “main list” and/or from the “custom history list”. This requirement can be easily enforced by simply replacing the base “Contribute” permission level with a custom permission level, created as copy of the “Contribute” permission level but <U>deprived of the “Delete items” and “Delete versions” base permissions</U>. This approach, associated with the <U>enablement of the standard versioning mechanism</U> on both lists, allows the complete control over the modifications that happen on both these lists. If you need to have this control while maintaining the right – for your users – to delete the items, you have to set up the SharePoint auditing mechanism.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></P>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Protecting specific fields<o:p></o:p></FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Another common need consists in “protecting” specific fields, especially in the “main list”; for example, you may not want the contributors on the “main list” to be allowed to change the content of specific list item fields whose value should be automatically managed by the workflow; these fields may contain: <o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l3 level1 lfo4" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>the status of the item, according to the process implemented by the <I style="mso-bidi-font-style: normal">business process workflow</I>;<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l3 level1 lfo4" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>the information provided by the involved users in their completed tasks and copied back on the current list item by the same <I style="mso-bidi-font-style: normal">business process workflow</I>. <SPAN style="mso-spacerun: yes">&nbsp;</SPAN><o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>We need to point out that this requirement <U>cannot be completely satisfied</U>, because the SharePoint security model does not allow the protection of the fields (the fields are not <I style="mso-bidi-font-style: normal">securable objects</I>). In spite of this limitation, you can implement a strategy allowing a <U>“good protection” of the “sensitive fields”</U>. This strategy may be realized by imposing the following settings on the “main list”:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo3" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri><FONT size=3><U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>hide these fields from the new/edit item forms</SPAN></U><SPAN style="mso-ansi-language: EN-US" lang=EN-US> (in order to do this, you have to temporarily enable the content types association on the advanced settings of the list; the hide option is then available on the specific content type fields settings);<o:p></o:p></SPAN></FONT></FONT></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo3" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri><FONT size=3><U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>hide these fields from the views associated to the list</SPAN></U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>;<o:p></o:p></SPAN></FONT></FONT></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo3" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri><U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>add a “shadow field” for each of the fields previously hidden</SPAN></U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>; this shadow field is simply a field of type “calculated value”, showing the content of its related field (for example, an “Item Status – View Only” shadow field should be created with the following formula for its value: “</SPAN></FONT><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US" lang=EN-US>=[Item Status]</SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri>”, where “Item Status” is the name of the protected sensitive field)<o:p></o:p></FONT></SPAN></FONT></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo3" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri><FONT size=3><U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>add these shadow fields to the views associated to the list</SPAN></U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>;<o:p></o:p></SPAN></FONT></FONT></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo3" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri><FONT size=3><U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>enable the versioning on the list</SPAN></U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>, in order to have a log of the modifications occurred to each item;<o:p></o:p></SPAN></FONT></FONT></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l1 level1 lfo3" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri><U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>replace the base “Contribute” permission level</SPAN></U><SPAN style="mso-ansi-language: EN-US" lang=EN-US> – associated to the users allowed to start the <I style="mso-bidi-font-style: normal">business process workflow</I> – with a custom permission level, created as copy of the “Contribute” permission level but <U>deprived of the “Delete items”, “Delete versions” and “Manage Personal Views” base permissions</U>.<o:p></o:p></SPAN></FONT></FONT></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>When the above settings are enforced, the users will not be able to modify the content of the protected fields by using the standard SharePoint web pages (the list views pages, the list view web parts and the list item forms).<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>I am suggesting the use of the “shadow fields” because, when you only hide the protected fields in the new/edit list item forms, the users are still enabled to edit their values in any list view showing them; in order to do so, they can simply switch the view in “Datasheet mode” (if the view is not already a “Datasheet View”). By adding the “shadow fields” to the configured list views (instead of directly the protected fields), your users will still be able to see the value of the protected fields but they will not be able to update them. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>Please note that this solution requires that your contributors on the “main list” will not be enabled to create personal views (they must be deprived of the “Manage Personal Views” base permissions); otherwise they could create a personal view including the protected fields, making them available for modifications.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>It is important to point out that, with the proposed solution, the contributors of the “main list” are still able to modify the value of these protected fields when they access them outside the standard SharePoint web pages. For example, they can modify these fields by editing the list with Access 2007/2010 (using the linked table feature of SharePoint/Access). Fortunately, in the described configuration, the versioning mechanism (to be enabled on the “main list”) and the missing “Delete items” and “Delete versions” base permission assignment allow to find such undesired “behaviors” of your users; in this situations, a proper “communication strategy” addressed to your users is the only way to fill the final gap towards a complete protection of the sensitive fields…<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></P>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Protecting the tasks items<o:p></o:p></FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>A third common need consists in <B style="mso-bidi-font-weight: normal">protecting the single task items</B> by allowing them to be seen/modified only by their assignees. By default, the items created in the “Tasks list” inherits the security settings of the list; for this reason, all the contributors on this list are allowed to edit /complete/ delete any existing task, no matter to whom the specific task is assigned to.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>Unfortunately, it is not possible to obtain this restriction without coding. If the task level security is a requirement, a valuable option could consists in creating, with Visual Studio, a custom action allowing the creation of a task with the “Contribute” permission level automatically granted to its specific assignee (user or group) and, optionally, with the “Read” permission level granted to other users or groups specified somehow. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>Please note that the use of the simple “Set Permissions on Item” custom activity available in the “</FONT></SPAN><A href="https://spdactivities.codeplex.com/" target=_blank mce_href="https://spdactivities.codeplex.com/"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>Useful Sharepoint Designer Custom Workflow Activities</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>” (from CodePlex) is not valid: you cannot create a task using the standard “tasks activities” and then set the permissions on the task with that specific custom activity because each of the “tasks activities” cause the stop of the workflow just after the task creation, until the task is completed.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>An intermediate and limited solution – allowing a partial protection but not requiring the development and deployment of custom code – consists in limiting, on the “Tasks” list, the use of the “My Tasks” view to all the possible tasks assignees. This can be easily done by deleting the other views and by removing the “Manage Personal Views” base permissions from the permission level assigned to this set of users on this list. This approach has two important leaks:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l6 level1 lfo6" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><FONT size=3>firstly, the users can still access and modify the other list items not shown in the prepared views (the tasks not assigned to them) just by accessing them with one of the many tools that allow this functionality outside the SharePoint web pages. For example, they can modify these tasks by editing the list with Access 2007/2010 (using the linked table feature of SharePoint/Access);<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l6 level1 lfo6" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri>secondly, the views can only filter the tasks directly assigned to the current user (the standard “My Tasks” view, for example, uses the filter “”Assigned To” “is equal to” “</FONT></SPAN><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US" lang=EN-US>[Me]</SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri>”); these views cannot filter the tasks assigned to a group (SharePoint group or Active Directory group or generic identity provider role) to whom the current user belongs.<o:p></o:p></FONT></SPAN></FONT></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>It is worth to notice that the standard “Approval” workflow template available in MOSS 2007 and SharePoint Server 2010 (but not in WSS 3.0/SharePoint Foundation) enforces the protection of the tasks (if a non-assignee tries to update a task, the operation is aborted with the generic error message “</FONT></SPAN><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Tahoma','sans-serif'; COLOR: #4c4c4c; FONT-SIZE: 8pt; mso-ansi-language: EN-US" lang=EN-US>Task update was not accepted</SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>”). This behavior is not obtained with a standard permission level grant but with other custom mechanisms. The same behavior is not present in other standard workflow templates; for example, it is not present in the (similar) “Collect Feedback” workflow template available in MOSS 2007/SP 2010.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3 face=Calibri></FONT></o:p></SPAN></P>]]></content:encoded>
    </item>
    <item>
      <title>Declarative workflow versioning and workflow instances duplication</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/declarative-workflow-versioning-and-workflow-instances-duplication</link>
      <pubDate>Tue, 06 Apr 2010 08:12:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2010/04/06/declarative-workflow-versioning-and-workflow-instances-duplication/</guid>
      <description><![CDATA[In this post I will describe how the versioning mechanism for the declarative workflows (created...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>In this post I will describe how the versioning mechanism for the declarative workflows (created either with SharePoint Designer [SPD] 2007 or 2010), in some circumstances, can cause an undesired duplication of “some” workflow instances already running on specific list items. </FONT></FONT></SPAN></P><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT face=Calibri><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>I refer to a sample scenario, but the concepts here described are generic. Before delving into the sample scenario, I repeat here below two basic concepts regarding the declarative workflows.</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P><SPAN style="mso-ansi-language: EN-US" lang=EN-US>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Two basic (preliminary) concepts…</FONT></FONT></FONT></SPAN></H2>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In SharePoint, the workflow engine allows only one single <I style="mso-bidi-font-style: normal">workflow instance</I> of a certain <I style="mso-bidi-font-style: normal">workflow type</I> (also known as <I style="mso-bidi-font-style: normal">workflow model</I> or <I style="mso-bidi-font-style: normal">workflow definition</I>) to be running on a specific list item.<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Every time a (declarative) <I style="mso-bidi-font-style: normal">workflow type</I> is “modified and published” using the Workflow Designer tool in SPD 2007/2010, a new “version” of the <I style="mso-bidi-font-style: normal">workflow type</I> is attached to the specific list; the previous versions of the same <I style="mso-bidi-font-style: normal">workflow type</I> are maintained because there could be running <I style="mso-bidi-font-style: normal">workflow instances</I> referring to that specific versions; obviously, it is not possible to start new instances of older versions.<o:p></o:p></FONT></SPAN></P></SPAN>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><U><o:p></o:p></U></FONT></SPAN>&nbsp;</P>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>The sample scenario</FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>I consider the simple scenario of an “issue management” workflow, where two individuals contributors, in sequence, must do an action on&nbsp;an open&nbsp;issue: a first individual is asked to propose a “technical solution”; a second individual is asked to define the “communication actions” to be taken.</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>This workflow can be described with a simple sequential flowchart, as shown below (with the actors and the status). <o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal>&nbsp;<A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/84/dwid-01-flowchart.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991184/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991184/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 422px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/84/dwid-01-flowchart.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991184/425x422.aspx" width=425 height=422 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991184/425x422.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>We can implement this scenario with two lists:<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>An “Issues” list, created using the standard “Issues Tracking” list definition. <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l1 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>A “<EM>Tasks</EM>” list, automatically created by SPD (at the moment of the first workflow publishing) using the standard “Tasks” list definition<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>On the “Issues” list we need to customize the “Issue Status” field with the four values described in the previous figure<SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>and here summarized</SPAN>:<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo2" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><I style="mso-bidi-font-style: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Active<o:p></o:p></FONT></SPAN></I></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo2" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><I style="mso-bidi-font-style: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In Charge by Tech. Team<o:p></o:p></FONT></SPAN></I></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo2" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><I style="mso-bidi-font-style: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In Charge by Comm. team<o:p></o:p></FONT></SPAN></I></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo2" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><I style="mso-bidi-font-style: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Closed<o:p></o:p></FONT></SPAN></I></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>It is also useful to hide the “Issue Status” field in the new/edit forms of the “Issue” content type associated to the list; in fact, we want to manage the value of this column automatically, using a workflow. A final customization on this list consists in renaming the “Assigned To” field in “Assigned To – Tech. Team” and adding a new identical field named “Assigned To – Comm. Team”.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>The base implementation of the workflow can be realized with a single step, as shown below:<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal>&nbsp;<IMG style="WIDTH: 878px; HEIGHT: 289px" title="Base workflow implementation" border=0 alt="Base workflow implementation" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/85/dwid-02-base_implementation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991185/original.aspx" width=878 height=289 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991185/original.aspx"></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>It is possible to notice that the workflow consists in a simple sequence of the following activities:<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>“Set Field in Current Item” activity (used to set the “Issue Status” field)<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>“Collect Data from User” activity (used to collect the technical and communication contribution)<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Let us suppose that we need to automatically activate the workflow, not only when an issue is created but also when an issue is modified:<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><IMG style="WIDTH: 320px; HEIGHT: 193px" title="Workflow startup options" border=0 alt="Workflow startup options" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/86/dwid-03-startup_options.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991186/original.aspx" width=320 height=193 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991186/original.aspx"></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>After creating a new item…</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><IMG style="WIDTH: 334px; HEIGHT: 228px" title="New item creation" border=0 alt="New item creation" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/87/dwid-04-new_item_creation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991187/original.aspx" width=334 height=228 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991187/original.aspx"></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>…the workflow starts and works as expected, as shown in the following picture:<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/88/dwid-05-normal_behavior.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991188/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991188/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 275px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/88/dwid-05-normal_behavior.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991188/425x275.aspx" width=425 height=275 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991188/425x275.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;</P>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>The problem of the duplicated instances…<o:p></o:p></FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Now, let us suppose that, after the first publishing of this simple workflow model, the following sequence of events happens, in the order shown here below:<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>there are already active workflow instances, waiting for the completion of the “first type” of task (some “technical contributors” have been already contacted by the workflow but they have not yet completed their tasks);<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>a web designer opens the workflow in SharePoint Designer and presses the “Finish” button on the Workflow Designer tool (accidentally or in order to save an even minimal modification, like the change of a string message);<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>one of the assignees of a “first type” of task (a “technical contributor”) completes its assigned task.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In this situation, the following assignee (the “communication contributor”) of that specific issue is correctly assigned the “second type” of task but, at the same time, the first assignee of that issue (the same “technical contributor” that has just answered…) unexpectedly sees a new task assigned to him, identical to the one just completed and referring to the same issue! This will be probably judged as an incomprehensible behavior of the workflow…!<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;<A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/89/dwid-06-instances_duplication.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991189/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991189/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 301px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/89/dwid-06-instances_duplication.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991189/425x301.aspx" width=425 height=301 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991189/425x301.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Looking more in detail, we can see that a new instance of the workflow is started on that specific list item (the worked issue). Why this happens? Because, after pressing the “Finish” button on the Workflow Designer tool, a new version of the workflow is created and associated to the list. This new version is not considered “the same <I style="mso-bidi-font-style: normal">workflow type</I>”, so a new instance of this new version can start even if there is an already running instance of the previous version.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Specifically, in our example, when the first assignee pushes the “Complete Task” button (see step 4 in the figure above), the “Set Field in Current Item” action (setting the new issue status) causes the startup of a new workflow instance of the new workflow type; this last creates a new task of the “first type” (a “technical contribution” task).<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Please note that the problem is not only tied to the fact that the workflow itself updates a field on the current item: there are situations where the users need to repeatedly change the list item to whom workflows are attached, even when workflow instances are still running. These manual updates normally do not cause the startup of new workflow instances (just one instance of a certain workflow type can be running in a given moment) but, when a new version of a certain workflow is published, <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>such kind of changes cause the startup of new instances of that specific workflow version.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>It is worth to notice also that this problem is not tied to the existence of the “task” activities in the workflow model: also a “wait” activity can cause the type of running workflow instances to become obsolete and, so, possibly subjected to duplication…</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><o:p></o:p></FONT></SPAN>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In summary, this unwanted workflow instances duplication may happen for <I style="mso-bidi-font-style: normal">workflow types</I> with the following <U>characteristics</U>:<o:p></o:p></FONT></SPAN></B></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 40.6pt; mso-list: l0 level1 lfo2; mso-add-space: auto" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>they are configured to start when their associated item is changed;<o:p></o:p></FONT></SPAN></B></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 40.6pt; mso-list: l0 level1 lfo2; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>they contains activities causing the “dehydration” of their workflow instances (“wait” activities or “user task” activities).<o:p></o:p></FONT></SPAN></B></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3></FONT></SPAN></B>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Specifically, these kind of <I style="mso-bidi-font-style: normal">workflow types</I> are subjected to the described workflow instances duplication when the following <U>conditions</U> are met:<o:p></o:p></FONT></SPAN></B></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>there are dehydrated workflow instances (waiting for a user task completion or for the end-condition of a “wait” activity) at the time when a new version of their <I style="mso-bidi-font-style: normal">workflow type </I>is published;<o:p></o:p></FONT></SPAN></B></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>one or both the following situations happens:<o:p></o:p></FONT></SPAN></B></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 72pt; mso-list: l1 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Courier New'" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>a user updates a list items to whom one of the dehydrated workflow instances is associated; <o:p></o:p></FONT></SPAN></B></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 72pt; mso-list: l1 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Courier New'" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>the workflow instance itself, after the re-hydration, updates one or more fields on the associated list item.<o:p></o:p></FONT></SPAN></B></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Unfortunately, these conditions are met quite often in real-world workflow implementation… You can imagine what confusion can be caused by the re-publishing of a workflow, if it causes the duplication of hundred of tasks!</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><o:p></o:p></FONT></SPAN>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>A possible solution<o:p></o:p></FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>It is worth to repeat that the problem of the workflow instances duplication described in this post is not a bug; it is just the consequence of the workflow versioning mechanism and&nbsp;it appears only in the described conditions.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Here I propose a possible solution for the creation of workflows (with the characteristics mentioned above) having a more “predictable behavior” when they are updated (even if the conditions mentioned above are met). <o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>I want to anticipate an important consideration: this solution “is not for free”, in the sense that it causes an important increment of complexity in the workflow design… For this reason, my first suggestion is to attentively consider <U>if this unwanted workflow duplication can really cause “big problems” to your users</U> (will you have dozens of users potentially affected? Can you handle these situations with a proper communication strategy?)<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>If you consider the risk of the duplicated instances as unacceptable in your scenario, you should firstly check if: <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo2" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>[<B style="mso-bidi-font-weight: normal">Question A</B>] you have to deal with users that can or need to update the “base list items” even when these items have workflow instances already running; <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l1 level1 lfo2" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>[<B style="mso-bidi-font-weight: normal">Question B</B>] an instance of your workflow model, after the re-hydration, can update the current item (possibly causing the startup of another instance of a new type).<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Accordingly to the answer that you give to the previous two questions, I propose here below a solution that can be composed of just one or both the following parts:<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>[<B style="mso-bidi-font-weight: normal">Solution part #1</B> – <U>To be used only if the answer to “<B style="mso-bidi-font-weight: normal">Question A</B>” is ‘yes’</U>]: immediately stop any new workflow instance if there is another instance running for a previous version of the same workflow type.<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>[<B style="mso-bidi-font-weight: normal">Solution part #2</B> – <U>To be used only if the answer to “<B style="mso-bidi-font-weight: normal">Question B</B>” is ‘yes’</U>]: immediately after any re-hydration, check if the current workflow instance is “of the latest published version” for its workflow type. If not, execute a “stop-and-restart”: predispose the startup of a new instance (of the latest version for the workflow type) and stop the current instance before doing any other action; the new instance should be able to restart the execution at the same “logical workflow point” where the previous instance left.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>The “<B style="mso-bidi-font-weight: normal">part #1</B>” of the solution can be implemented in the following manner: <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>You have to create a custom list for each workflow type you have to deal with (for example, named <STRONG>“Running Workflow Instances - Type XYZ”</STRONG>); this list will contain a ‘lookup’ to the current item in your main list <U>if and only if</U> there is already a running workflow instance (of that specific workflow type, no matter of what version) on that specific list item. <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>As very first action, your workflow model needs to query this custom list in order to check if it contains the ‘lookup’ for the current list item. If this lookup is found, then the workflow should <U>stop itself</U> immediately. Otherwise the current instance must <U>register itself</U> by adding the lookup to the current item in the previous list.<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>As very last action, your workflow model needs to <U>unregister itself</U> by deleting the lookup to the current list item. <o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3>&nbsp;</FONT></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>The “<B style="mso-bidi-font-weight: normal">part #2</B>” of the solution can be implemented in the following manner: <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>You have to create a custom list (if you do not already have one defined; for example, you can name it <STRONG>“Configuration Parameters”</STRONG>) where you can manually insert an <U>item specifying the number of the latest version</U> which has been published for the current workflow type (note: the “version” numbering here defined does not need to be the same used by the workflow versioning mechanism; you can define your own numbering strategy, for example just using 1, 2, 3, etc…).<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In your workflow model, you have to specify the <U>current version in an appropriate workflow variable</U>; this variable must be manually updated every time you update and re-publish the model.<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>After each possible re-hydration (that is, after the completion of a user assigned task or after the completion of a pause), <U>the workflow instance should check if its version (read from the variable) is still the same specified in the configuration list</U>; if it is the same, the instance can continue its execution; otherwise: <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Courier New'" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>the current instance must <U>unregister itself</U> (this step is required only if the registration mechanism previously described for the “part #1” of the solution has been set up);<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Courier New'" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>the current instance must make a <U>“fake update” on the current item</U> (for example, you can override a field with its actual value). This is required in order to trigger the restart of a instance of the new version for the workflow type;<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 72pt; mso-list: l0 level2 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Courier New'" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>the current instance must <U>stop itself</U>.<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Each action composing the workflow model should be <U>wrapped into an appropriate “if” condition</U>, checking for the expected status of the current list item; this will allow the new workflow instance to restart the execution exactly where the previous instance left. The status of an item usually can be read from one or from a combination of its field values.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><FONT size=3>&nbsp;</FONT></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Here below I show how the described strategy is practically applied to the simple scenario proposed above.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Firstly, I want to emphasize the evident increment of complexity in the workflow design, by showing how a “single-step” workflow is now composed by&nbsp;8 steps:<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;<IMG style="WIDTH: 266px; HEIGHT: 256px" title="Steps in the solution" border=0 alt="Steps in the solution" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/90/dwid-07-soln_steps.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991190/original.aspx" width=266 height=256 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991190/original.aspx"></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Here I show how the workflow instance registration mechanism (<STRONG>part #1</STRONG>)&nbsp;is realized:<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/93/dwid-09-soln_part1_implementation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991193/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991193/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 243px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/93/dwid-09-soln_part1_implementation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991193/425x243.aspx" width=425 height=243 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991193/425x243.aspx"></A>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>This figure shows how this mechanism works on a practical example:</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><o:p><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/91/dwid-08-soln_part1_behavior.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991191/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991191/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 280px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/91/dwid-08-soln_part1_behavior.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991191/425x280.aspx" width=425 height=280 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991191/425x280.aspx"></A></o:p></FONT></SPAN></P><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><o:p></o:p></FONT></SPAN>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Here I show the version registration that is performed at startup and the version check that is performed after each re-hydration (<STRONG>part #2</STRONG>):</FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/94/dwid-10-soln_part2_implementation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991194/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991194/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 370px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/94/dwid-10-soln_part2_implementation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991194/425x370.aspx" width=425 height=370 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991194/425x370.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Please note that, in my example, I can simply check the status of the item by looking at the value of a single field (the “Issue Status” field).<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>As you see, in order to restart a new instance <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>I just overwrite the title field of the current item with its actual value.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Here below I show how the status check must be performed at every single step:<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/97/dwid-13-soln_part2_implementation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991197/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991197/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 241px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/97/dwid-13-soln_part2_implementation.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991197/425x241.aspx" width=425 height=241 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991197/425x241.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>The following figure shows how the described mechanism works; in the example, the assignee of the first task (the “Technical Contribution Task”) completes it after that a new version of the workflow was published (and registered into the “Configuration Parameters” list). As you can see in the figure, the current running instance stops itself and a new instance automatically restarts the flow execution just at the correct point.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true"><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/95/dwid-11-soln_part2_behavior.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991195/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991195/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 326px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/95/dwid-11-soln_part2_behavior.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991195/425x326.aspx" width=425 height=326 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991195/425x326.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;</P>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Do SharePoint 2010 and SPD 2010 change the game?<o:p></o:p></FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In my opinion, minimally…: the problem described in this post is still valid, caused by the same reasons already detailed; also the described solution can still be applied. <o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>The appreciable change is in the many enhancements of the “Workflow Editor” tool&nbsp;in SPD 2010; for example, it is now possible to easily nest the steps and the conditions, allowing a simpler and more readable organization of the workflow design.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>The following figure shows the two parts of the solution applied to the workflow design for the scenario show as example in this post; as you can see, all the conditions and checks can be nicely organized into a single step.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;<A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/96/dwid-12-soln_part1and2_SPD2010.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991196/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9991196/original.aspx"><IMG style="WIDTH: 375px; HEIGHT: 425px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/11/96/dwid-12-soln_part1and2_SPD2010.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9991196/375x425.aspx" width=375 height=425 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9991196/375x425.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;</P>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>A few other considerations<o:p></o:p></FONT></FONT></FONT></SPAN></H2>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>You may wonder why, in the “<B style="mso-bidi-font-weight: normal">part #1</B>” of the proposed solution (the part aimed to avoid workflow instanced duplication when a user manually updates the current list item), I suggest to write and read into a custom “Running Workflow Instances” list, <U>instead then simply checking the status of the current list item</U> (like I do in the “part #2” of the proposed solution). A&nbsp;status check is not practical for the aim pursued in "part #1": in general, for every possible list item status, there are situations where a new workflow instance must start, in order to continue the work of a previous instance, according to the desired “logical” organization of the flow (which may be composed by more than one declarative workflow implementation); for example, this happen when you have loops in your flowchart representation of the overall logical flow.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>A simpler and smarter idea for the “<B style="mso-bidi-font-weight: normal">part #1</B>” of the proposed solution could be to <U>query the current list item in order to check if there are other workflow instances running</U>. Unfortunately, the field named as the current workflow type only gives information about the (numeric) status of the latest workflow instance run or running for the latest version of the current workflow type; it is not helpful if you want to discover the existance of workflow instances still running for the previous versions of the current workflow type.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Looking at the “<B style="mso-bidi-font-weight: normal">part #2</B>” of the proposed solution, it is important to notice that <U>it does not protect against the accidental re-publishing of the current workflow type</U> (for example, in SPD 2007/2010, when the workflow model was only shown but not modified, and the web designer&nbsp;closes the Workflow Editor tool with the ‘Publish’ button instead that with the ‘Cancel’ button). In that case, the current workflow version in the predisposed workflow variable – matched with the value of predisposed list item into the “Configuration Parameters” list – is not updated; for that reason, when a dehydrated instance of a previous workflow version will be re-hydrated, the proposed stop-and-restart mechanism is not executed and the “standard but unwanted” workflow instance duplication will happen. </FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>It is important to notice that both parts of the described solutions can greatly reduce the occurrences of the workflow instances duplication but <U>do not give the sure confidentiality that… no more unexpected situations will arise</U>. In effect, they contains some “set of actions” that should be executed – by different workflow instances and/or by users – according to an expected logical timing sequence; unfortunately, this last may be subjected to unexpected “timing and concurrency issues”. Just as an example…: it is unlikely but it may happen that the new instance of the new workflow version – triggered by the stop-and-restart mechanism executed after the re-hydration, accordingly to the “part #2” of the proposed solution – will start faster that the completion of the list item cancellation into the “Running Workflow Instances” list; such an unpredictable situation will obviously cause the new workflow instance to stop itself.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In my experience, it is difficult to predict the occurrence rate for the “timing and concurrency issues”: it may be null where the servers are not heavily used and where the users’ concurrency rate is small; it may be somehow appreciable otherwise. There are other tips allowing the reduction of the incidence of this kind of problems; for example, it may be safer to introduce another custom list with another workflow, causing the restart of the main workflow (in its new version) after a pause of a few minutes (this may be considered as acceptable in a human workflow implementation). I am planning to write more about my experiences on this kind of problems in other posts. <o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>The solution proposed in this post is valid even when the workflow implementation is more complex; for example, the “conceptual model” of the overall workflow (represented with a flowchart or with a state machine or with other techniques) can contain loops (in our example, what if a third contributor need to evaluate the first and the second contributions, possibly asking for a reworking of one or both these contributions?). As you know, the “Workflow Designer/Editor” tool in SPD 2007/2010 does not allow the introduction of loops; in spite of this limitation, there are techniques allowing the creation of loops with the implementation of two or more workflow types triggering themselves as described in the following post (in the SPD team blog): “</FONT></SPAN><A href="https://blogs.msdn.com/sharepointdesigner/archive/2009/07/13/service-pack-2-prevents-an-on-change-workflow-from-starting-itself.aspx" target=_blank mce_href="https://blogs.msdn.com/sharepointdesigner/archive/2009/07/13/service-pack-2-prevents-an-on-change-workflow-from-starting-itself.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>Service Pack 2 prevents an on-change workflow from starting itself</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>”. Even in this situation, the solution described in this post can allow for a more predictable workflow behavior when the main workflow is updated. <o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;</P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US>
<H2 style="MARGIN: 10pt 0cm 0pt"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Wrapping up…<o:p></o:p></FONT></FONT></FONT></SPAN></H2></SPAN>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>In this post I have tried to pursue two aims: <o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>I have highlighted how the standard and powerful versioning mechanism for the SPD 2007/2010 declarative workflows, in certain conditions, can cause a workflow instances duplication which may produce confusion and the perception of a misbehaving workflow implementation;<o:p></o:p></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>I have proposed a repeatable solution designed to greatly reduce the risk that such unwanted situations will happen.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>I admit that the solution that I am proposing is complex and difficult to be implemented (but sometime necessary) in real workflow designs, because the additional logic must be potentially repeated many times in a single workflow implementation; moreover, not all the possible causes of problems are finally addressed (for example, the solution does not protect against the “accidental” workflow re-publishing).<SPAN style="mso-spacerun: yes">&nbsp; </SPAN><o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3>I will be glad to see, in the comments to this post, if other simpler and/or wider approaches can be used instead.<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">&nbsp;</P></o:p></FONT></SPAN>]]></content:encoded>
    </item>
    <item>
      <title>Dynamic tasks assignment and access denied errors in declarative workflows [SPD 2007 only]</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/dynamic-tasks-assignment-and-access-denied-errors-in-declarative-workflows-spd-2007-only</link>
      <pubDate>Tue, 16 Mar 2010 22:45:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2010/03/16/dynamic-tasks-assignment-and-access-denied-errors-in-declarative-workflows-spd-2007-only/</guid>
      <description><![CDATA[Recently – with SharePoint Designer 2007 – I realized a workflow where a specific task was assigned...]]></description>
      <content:encoded><![CDATA[<P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US>Recently – with SharePoint Designer 2007 – I realized a workflow where a specific task was assigned to a dynamically selected SharePoint group; quite an easy work thanks to the “<B style="mso-bidi-font-weight: normal">Collect Data from a User</B>” task action, which allows selecting the assignee with a workflow lookup (to a variable or to a list item field):</SPAN></P>
<P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/59/20100317-1-CollectDataFromAUser.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980159/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980159/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 248px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/59/20100317-1-CollectDataFromAUser.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980159/425x248.aspx" width=425 height=248 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980159/425x248.aspx"></A></SPAN></P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>In my specific scenario:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>A custom list of the “<I style="mso-bidi-font-style: normal">Enabled Groups</I>” was prepared on the web; this list was designed only with two columns: a column named “<I style="mso-bidi-font-style: normal">Group Name</I>” (of type: “<U>Person or Group</U>”) and the standard “<I style="mso-bidi-font-style: normal">Title</I>” column, hidden in the view/edit forms and automatically set to the name of the group specified in the “<I style="mso-bidi-font-style: normal">Group Name</I>” column by a very simple custom “<I style="mso-bidi-font-style: normal">Data Completion Workflow</I>”.<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>The “<I style="mso-bidi-font-style: normal">Main List</I>” – with the “<I style="mso-bidi-font-style: normal">Main Workflow</I>” attached – was defined with a “<U>Lookup</U>” column – named “<I style="mso-bidi-font-style: normal">Ask to Group</I>” – referencing the “<I style="mso-bidi-font-style: normal">Title</I>” column of the “<I style="mso-bidi-font-style: normal">Enabled Group</I>” list<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>The “<I style="mso-bidi-font-style: normal">Main Workflow</I>” was designed<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>to dynamically assign the custom task to the SharePoint group specified in the “<I style="mso-bidi-font-style: normal">Ask to Group</I>” field in the current list item.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>The following figure shows the simple “<I style="mso-bidi-font-style: normal">Data Completion Workflow</I>” behavior on the “<I style="mso-bidi-font-style: normal">Enabled Groups</I>”:<o:p></o:p></SPAN></P>
<P><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/61/20100317-2-EnabledGroupsList.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980161/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980161/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 204px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/61/20100317-2-EnabledGroupsList.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980161/425x204.aspx" width=425 height=204 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980161/425x204.aspx"></A></P>
<P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US>The following figure shows the result of the dynamic task assignment:</SPAN></P>
<P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/62/20100317-3-MainList.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980162/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980162/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 259px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/62/20100317-3-MainList.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980162/425x259.aspx" width=425 height=259 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980162/425x259.aspx"></A></SPAN></P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin" lang=EN-US>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Before the first deployment of the “<I style="mso-bidi-font-style: normal">Main Workflow</I>”, every possible target SharePoint group was already created on the site collection, listed into the “<I style="mso-bidi-font-style: normal">Enabled Groups</I>” list and assigned the permission level of “Contribute” on the “Tasks” list.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Everything worked perfectly in the production environment. After a few weeks, it was necessary to add a new group to the list of possible enabled SharePoint groups; I have done the following actions:<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 37.9pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>I have created the new target SharePoint group (into the site collection)<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 37.9pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>I have added a new item into the “Enabled Group” list, referencing the new SharePoint group<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 37.9pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>I have assigned to the new SharePoint group the “Contribute” permission level on the current “Tasks” list.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>I was sure it was enough! Unfortunately, after few minutes the members of the new target group told me that they were not able to complete the tasks assigned to them because <B style="mso-bidi-font-weight: normal">they were receiving an “<U>Access Denied</U>” error when trying to access their tasks</B>, as shown below: <o:p></o:p></SPAN></P>
<P><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/63/20100317-4-AccessDenied.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980163/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980163/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 250px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/63/20100317-4-AccessDenied.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980163/425x250.aspx" width=425 height=250 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980163/425x250.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>How was it possible, considering that they were contributors on the “Tasks” lists?<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>After a quick investigation, I discovered the cause of the problem: the new target group was not authorized to read the custom task form (the ASPX page automatically created by the “Collect Data from a User” task action during the workflow deployment) which is located into the hidden “Workflows” library on the current web: <o:p></o:p></SPAN></P>
<P><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/64/20100317-5-InitialPermissions.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980164/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980164/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 158px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/64/20100317-5-InitialPermissions.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980164/425x158.aspx" width=425 height=158 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980164/425x158.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>I have noticed that, during the initial workflow deployment, all the users and groups authorized on the current web (which was not inheriting the authorization settings) were assigned the read permissions on this specific form; the users and groups added thereafter did not owned this privilege! How to quickly solve this problem? And, most important: how to enable the web administrators to add new target groups in the future?<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>A quick manual solution consists in performing the following steps:<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 37.9pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Explicitly assign a permission level to the new group on the current web; for example, assign the “Read” permission level (please note that this step is strictly required: if the group has only the “<I style="mso-bidi-font-style: normal">Limited Access</I>” permission level on the web – as a result of the permission assignment on the “Tasks” list – the following step has not the desired consequence! See below for further thoughts about this limitation…)<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 37.9pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Check-out and then check-in the custom task form page using SPD 2007 (and/or make any kind of modification to this page)<o:p></o:p></SPAN></P>
<P><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/65/20100317-6-ManualSolution.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980165/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980165/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 229px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/65/20100317-6-ManualSolution.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980165/425x229.aspx" width=425 height=229 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980165/425x229.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>A nice automated solution consists in adding the check-out/in actions to the “<I style="mso-bidi-font-style: normal">Data Completion Workflow</I>” associated to the “<I style="mso-bidi-font-style: normal">Enabled Group</I>” list; in order to select the “<I style="mso-bidi-font-style: normal">Workflows</I>” list, it must be temporarily unhidden using SPD 2007:</SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/66/20100317-7-UnhideWorkflowsList.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980166/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980166/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 234px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/66/20100317-7-UnhideWorkflowsList.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980166/425x234.aspx" width=425 height=234 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980166/425x234.aspx"></A></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/67/20100317-8-CheckOutIn.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980167/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980167/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 196px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/67/20100317-8-CheckOutIn.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980167/425x196.aspx" width=425 height=196 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980167/425x196.aspx"></A></o:p></SPAN></P><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>The result is shown in following figure: the members of the new target groups can access the custom task form because the group is authorized on that file.</SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/68/20100317-9-FinalPermissions.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980168/425x298.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980168/425x298.aspx"><IMG style="WIDTH: 425px; HEIGHT: 298px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/68/20100317-9-FinalPermissions.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980168/425x298.aspx" width=425 height=298 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980168/425x298.aspx"></A></o:p></SPAN></P><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>[BTW: why this happens? I could not find any “official” documentation explaining this behavior; it looks like an event handler is acting on the hidden “Workflows” list, checking and assigning the permissions to all the users and group explicitly associated to the current web…]<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><U><SPAN style="mso-ansi-language: EN-US" lang=EN-US>What if the current web must inherit the permissions from its parent web?</SPAN></U><SPAN style="mso-ansi-language: EN-US" lang=EN-US> In this situation, it is not possible to explicitly assign a permission level to the current web on the new group; I have directly experimented that, without this assignment, the check-out/in action on the custom form page has no effects on the new group <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>permissions. <U>In this situation, I do not see any solution without installing custom code on the SharePoint servers</U> (which, many times, is not an option; for example, this is not allowed in hosted environments like Microsoft BPOS). <o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>If the installation of custom components on the SharePoint servers is allowed by the server administrators, I suggest this quick solution:<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Install the “<A href="https://spdactivities.codeplex.com/" target=_blank mce_href="https://spdactivities.codeplex.com/">Useful Sharepoint Designer Custom Workflow Activities</A>” from CodePlex (a detail: in my environment, I needed to manually add the following line into the “</SPAN><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US" lang=EN-US>authorizedTypes</SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>” section of the web.config: </SPAN><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US" lang=EN-US>&lt;authorizedType Assembly="DP.Sharepoint.Workflow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0298457208daed83" Namespace="DP.Sharepoint.Workflow" TypeName="*" Authorized="True" /&gt;)</SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Modify the “<I style="mso-bidi-font-style: normal">Data Completion Workflow</I>” associated to the “<I style="mso-bidi-font-style: normal">Enabled Group</I>” list (again, before you need to temporarily unhide “<I style="mso-bidi-font-style: normal">Workflows</I>” list): instead of doing check-out/in, use the “<I style="mso-bidi-font-style: normal">Grant Permissions on Item</I>” custom activity to explicitly assign the “Read” permission level on the custom form page to the current group. <o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/70/20100317-10-GrantPermissions.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980170/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980170/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 213px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/70/20100317-10-GrantPermissions.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980170/425x213.aspx" width=425 height=213 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980170/425x213.aspx"></A></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Before finishing this post, it is worth to notice that the problem of <U>the “Access Denied” error here described does not exist in SharePoint 2010</U>; this is a consequence of the fact that, in SP 2010, the custom forms created by the “Collect Data from a User” task action are XSN files, instead of ASPX pages. I suppose that the XSN files are retrieved by the hosting ASP.NET page using an elevation of privileges.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>The following figure shows a custom task form accessed by a user belonging to a new group that is not explicitly authorized on the XSN file.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><A href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/71/20100317-11-SP2010.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980171/425x266.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9980171/425x266.aspx"><IMG style="WIDTH: 425px; HEIGHT: 266px" title="Click to enlarge" border=0 alt="Click to enlarge" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/98/01/71/20100317-11-SP2010.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9980171/425x266.aspx" width=425 height=266 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9980171/425x266.aspx"></A>&nbsp;</P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal mce_keep="true">So... another reason to move to the SPD 2010 workflows :-)</P></o:p></SPAN></o:p></SPAN></SPAN></SPAN>]]></content:encoded>
    </item>
    <item>
      <title>Rapid “Data Collection” Solutions – Part 3: designing and implementing the business process</title>
      <link>https://docs.microsoft.com/archive/blogs/stefanpe/rapid-data-collection-solutions-part-3-designing-and-implementing-the-business-process</link>
      <pubDate>Thu, 11 Mar 2010 21:49:00 GMT</pubDate>
      <dc:creator><![CDATA[Stefano Pescosolido]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/stefanpe/2010/03/11/rapid-data-collection-solutions-part-3-designing-and-implementing-the-business-process/</guid>
      <description><![CDATA[I refer to the business problem already described in the post “Rapid “Data Collection” Solutions –...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>I refer to the business problem already described in the post “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/02/04/rapid-data-collection-solutions-part-1-defining-the-business-problem.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT color=#0000ff size=3 face=Calibri>Rapid “Data Collection” Solutions – Part 1: defining the business problem</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>”. In this series of posts, I am considering the options available for building a quick and – possibly – zero-code solution based on a SharePoint web environment. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>In my previous post “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/02/04/rapid-data-collection-solutions-part-2-designing-and-implementing-a-data-model.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>Rapid “Data Collection” Solutions – Part 2: designing and implementing a data model</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>” I have considered the problem of “preparing the storage” for the data that need to be collected; in that post I have also described the possibility to implement some kind of “<I style="mso-bidi-font-style: normal">data-completion workflows</I>”, helpful especially when it is desired to automate the filling of “redundant columns”. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>In this post I will consider the problem of contacting the users that need to provide that data. Sometimes it’s enough to send them an email with the link to the SharePoint list where they are invited to write their data. Other times a more complicated business process need to be implemented: it may happen, for example, that the users to be involved must be chosen with some kind of specific logic; other times, the problem of completing the set of information in a certain “row” can be subjected to a custom review process, where the reviewers can decide to recollect part or all that information from the same authors or from other users. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>The tool allowing the creation of zero-code workflow solutions for a SharePoint environment is the “Workflow Designer” (or “Workflow Editor”) in SharePoint Designer [SPD]; this tool – which was already available in SPD 2007 – has been greatly enriched in terms of functionalities and usability in SPD 2010. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>While it seems often trivial to write and deploy simple workflows in SPD 2010, the implementation of medium or complex business processes may introduce the need to face tricky challenges; in my previous post “</FONT></SPAN><A href="https://blogs.msdn.com/stefanpe/archive/2010/03/10/common-challenges-with-sharepoint-and-sharepoint-designer-workflows.aspx"><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3 face=Calibri>Common Challenges with SharePoint and SharePoint Designer Workflows</FONT></SPAN></A><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>” I have listed the most important problems and thought that I have encountered – and, somehow, solved… or, sometime, avoided – in my real-world workflow experiences. It may be necessary to consider all of these challenges when implementing a business process for a data collection solution.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>One of the mentioned thoughts is especially important in the scenario of a data collection business process; I am referring to the consideration about <B style="mso-bidi-font-weight: normal">where to store the collected data</B>; here below I will describe the available options. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>The workflows functioning mechanism in SharePoint uses the “Tasks” lists in order to:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpFirst><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>wait for any kind of human intervention;<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpMiddle><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>offer, to the involved users, a web user interface (the task form) where they can provide their contribution (data);<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 38.7pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin" lang=EN-US><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US><FONT size=3><FONT face=Calibri>automatically resume the execution when the expected contribution is arrived (that is, when the task is completed).<o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US><FONT size=3><FONT face=Calibri>In a specific SharePoint web, a single “Tasks” list can contain the tasks (items) created by different workflow instances of different workflow types running on one or more lists or libraries. <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US><FONT size=3><FONT face=Calibri>The figure here below gives a visual representation on how the tasks are related to the workflow instances with multiple lists and multiple workflow types.</FONT></FONT></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US><FONT size=3><FONT face=Calibri><o:p><A title="Tasks and History Lists" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/97/73/18/TasksAndHistoryLists.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9977318/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9977318/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 248px" title="Tasks and History Lists" border=0 alt="Tasks and History Lists" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/97/73/18/TasksAndHistoryLists.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9977318/425x248.aspx" width=425 height=248 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9977318/425x248.aspx"></A></o:p></FONT></FONT></SPAN></P><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US><FONT size=3><FONT face=Calibri><o:p>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>It is worth to highlight that other tasks list can be created and assigned to a specific workflow type; this option – which was already available in SharePoint 2007 – was not applicable for the declarative workflows deployed with SPD 2007; it is now available for the declarative workflows created with SPD 2010.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>In the standard mechanism, w</SPAN><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>hen a specific task is complete, by default it remains on the “Tasks” list and will be listed as complete on the “Workflow Status” page for its own workflow instance. More in details, the “Workflow Status” page can list the completed and not completed tasks for a given workflow instance; unfortunately, it does not give a single aggregated view of all the data collected (in different tasks, potentially of different types) by a workflow instance.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>In order to have a similar view, it is necessary to create a custom ASP.NET page; the SPD page editor has a powerful data aggregation control: the “Data View Web Part” [DVWP]; this can be used to find all the details and the related data for a given list item (whose ID can be read, for example, from the query string); this solution does not require to write any code (just DVWP configuration in SPD).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>The data aggregation on a custom ASP.NET page is especially important when it is necessary to combine data from more than one workflow instance; this may be required in the following scenarios:<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 38.7pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>more than one data collection workflow type is defined on the considered list;<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 38.7pt; mso-list: l0 level1 lfo1; mso-add-space: auto" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>it is important to see the historical data provided by the users (in different subsequent instances of the same workflow type).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA" lang=EN-US>The following figure gives a visual representation of a data collection workflow instance writing two different tasks (of different types) into the “Tasks” list; a custom data aggregation page gives a single view on the initial and collected data (and even on historical data, if required). </SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA" lang=EN-US><A title="Standard Tasks Mechanism" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/97/73/16/StandardTasksMechanism.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9977316/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9977316/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 273px" title="Standard Tasks Mechanism" border=0 alt="Standard Tasks Mechanism" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/97/73/16/StandardTasksMechanism.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9977316/425x273.aspx" width=425 height=273 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9977316/425x273.aspx"></A></SPAN></P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA" lang=EN-US>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>It is worth to highlight that the same data collection workflow can be responsible of setting the link to the custom data aggregation page into a “link field” of its list item (see the step 2 in the previous figure); this link has usually the following structure: </SPAN><SPAN style="FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US" lang=EN-US>&lt;<I style="mso-bidi-font-style: normal">URL_of_the_common_custom_page</I>&gt;.aspx?ItemId=&lt;<I style="mso-bidi-font-style: normal">ID_of_the_current_list_item</I>&gt;</SPAN><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US> (the workflow have to dynamically set this ID into the link field).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>A complete sample about how to create a similar custom data aggregation page can be found in “<A href="https://office.microsoft.com/en-us/sharepointdesigner/HA102564171033.aspx?pid=CH100667661033">Watch this: Design a document review workflow solution</A>” (see the videos in “<I style="mso-bidi-font-style: normal">Part 12: Design the Workflow Dashboard</I>” and “<I style="mso-bidi-font-style: normal">Part 13: Design the Workflow Dashboard (continued)</I>”).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>Trying to summarize, when using the default functioning for the “workflow tasks” mechanism provided by SharePoint it may be desired or necessary to create a custom data aggregation page. <o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>Another approach in data collection workflows consists in using the “workflow tasks” mechanism only for contacting the involved users; when a task has been completed by the user, the acquired data can be copied back into the “primary” list item and the task can be deleted.<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang=EN-US>The following figure shows the described mechanism in the same scenario considered above (a data collection workflow instance writing two different tasks – of different types – into the “Tasks” list).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><A title="Copy and Delete Mechanism" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/97/73/17/CustomTasksMechanism.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9977317/original.aspx" target=_blank mce_href="https://blogs.msdn.com/photos/stefanpe/images/9977317/original.aspx"><IMG style="WIDTH: 425px; HEIGHT: 193px" title="Copy and Delete Mechanism" border=0 alt="Copy and Delete Mechanism" align=middle src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/97/73/17/CustomTasksMechanism.png" original-url="https://blogs.msdn.com/photos/stefanpe/images/9977317/425x193.aspx" width=425 height=193 mce_src="https://blogs.msdn.com/photos/stefanpe/images/9977317/425x193.aspx"></A></SPAN></P><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA" lang=EN-US>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>The step 4 in the previous figure shows the data copy action done by the workflow (the copy include the values of the fields “A”, “B” and “C” in the two completed tasks); the step 5 shows the tasks deletion action done by the workflow (the two completed tasks are deleted after that their values have been copied back to the current list item).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>This “copy and delete” approach has an evident disadvantage: <B style="mso-bidi-font-weight: normal">it does not allows automatically maintaining an historical vision of the data collected by the users</B>. For this reason: <o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo2" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>it is often (let me say… always) necessary to copy back, on the current item, also the name of the person that completed the tasks and the date &amp; time when this happened;<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l1 level1 lfo2" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="mso-ansi-language: EN-US" lang=EN-US>when the “logical workflow” [*] involves loops, that is when the same task type can be created and completed more than once, the previous answers (the data on the previous completed tasks) are lost unless a custom “historical storage” list is prepared and the copy action is done twice (on the current “live” item and in a new list item in the historical storage list).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Here it is worth to notice that, when using this approach, part of the “Workflow Status” page loses sense: it remains a dashboard listing the “log messages” written by the workflow, but it is no more the entry point for accessing the completed tasks associated to the item (only the active tasks are shown because the completed tasks are deleted).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>When choosing the “copy and delete” approach, there is another problem to be solved: <B style="mso-bidi-font-weight: normal">how to avoid that the “additional fields” on the current list item can be directly changed by the contributors of this list?</B> These “additional fields” (like the “Field A”, “Field B” and “Field C” in the previous figure) should be updated only by the workflow after the tasks completion, when performing the “copy and delete” actions. A partial solution consists in hiding these fields from the “list forms” (this can be done by enabling the content types on the list and by selecting these fields as “Hidden” into the current “Item” content type) and showing them only into the “list views”. Unfortunately, the contributors of the list can switch the view in “Data Sheet” mode; in this way, they can potentially edit directly these additional fields. There are a few more options to make this editing “harder” (by configuring permissions, by using calculated columns, etc…); I am planning to write more about this in sequent posts… Anyway, not always this problem can be technically addressed; there are situations when the best (and/or only) way is simply to “teach” the users about what they should or should not do (…and to enable the “versioning” on the list items in order to understand what happened when some users have done something not correct…). <o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>On the “copy and delete” approach I see the following advantages:<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US>It avoids the proliferation of items into the “Tasks” list</SPAN></B><SPAN style="mso-ansi-language: EN-US" lang=EN-US>: in a real world data collection workflow, the number of the completed tasks can quickly become huge, especially when the “logical workflow” [*] involves loops. Not always an historical view of&nbsp;the given answers is required; even when this is a requirement, it is possible to&nbsp;prepare, fill and maintain a tailored “historical storage” list (as mentioned above) where it is possible to&nbsp;have more control on the size of the stored data.&nbsp; <o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US>It helps to maintain the consistency of the collected data</SPAN></B><SPAN style="mso-ansi-language: EN-US" lang=EN-US>: when the completed tasks are not deleted, a task assignee can potentially modify or delete an already completed task, causing the corruption of the collected data. Fortunately, the same user can be unauthorized to modify the current list item where the data filled in the completed task can be copied; this happens because the&nbsp;data copy action, performed by the workflow, is done in the security context of the user that started the workflow; this last and the task assignee are often different users.<o:p></o:p></SPAN></P>
<P style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" lang=EN-US><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="mso-ansi-language: EN-US" lang=EN-US>It often avoids the need to create a custom data aggregation page</SPAN></B><SPAN style="mso-ansi-language: EN-US" lang=EN-US> because all the collected data is directly shown into the current list item view form. Obviously, a custom data aggregation page is still necessary if it is required to show the historical data collected by subsequent instances of the defined workflow types (reading it from the custom "historical storage" list).<o:p></o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>Although this “copy and delete” approach requires an extra effort when designing the workflow (for the copy and delete actions) and, potentially, when preparing the web (a tailored “historical storage” list may be required; some trick may be needed in order to hide the “additional columns”; etc…), I personally prefer this approach against the standard approach. </SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>_________________________________________</SPAN></P>
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="mso-ansi-language: EN-US" lang=EN-US>[*] I am talking about “logical workflows”, which can be realized by different workflow instances of different workflow types; I am planning to write more about this in this blog…<o:p></o:p></SPAN></P></SPAN></o:p></FONT></FONT></SPAN>]]></content:encoded>
    </item>
  </channel>
</rss>