﻿<?xml version="1.0" encoding="UTF-8"?>
<!--RSS generated by Windows SharePoint Services V3 RSS Generator on 9/8/2010 2:09:25 PM-->
<?xml-stylesheet type="text/xsl" href="/_layouts/RssXslt.aspx?List=86857b7b-496e-4e63-a0c4-de0e00e6d451" version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Weblog Jan V: Posts</title>
    <link>http://weblog.jan-v.mobi/Lists/Posts/AllPosts.aspx</link>
    <description>RSS feed for the Posts list.</description>
    <lastBuildDate>Wed, 08 Sep 2010 12:09:25 GMT</lastBuildDate>
    <generator>Windows SharePoint Services V3 RSS Generator</generator>
    <ttl>60</ttl>
    <image>
      <title>Weblog Jan V: Posts</title>
      <url>/_layouts/images/homepage.gif</url>
      <link>http://weblog.jan-v.mobi/Lists/Posts/AllPosts.aspx</link>
    </image>
    <item>
      <title>Systeem account kan geen workflow starten</title>
      <link>http://weblog.jan-v.mobi/Lists/Posts/ViewPost.aspx?ID=191</link>
      <description><![CDATA[<div><b>Body:</b> <div class=ExternalClassE316D89E4F524BC2933FD89B89C60FE3><p>Na het oplossen van het probleem dat in de vorige post wordt beschreven, wist een collega van mij te vertellen dat dit wellicht te maken kon hebben met het KB artikel 947284 (<a href="http://support.microsoft.com/kb/947284">http://support.microsoft.com/kb/947284</a>).
</p><p>Hier staat namelijk dat er vanaf Servicepack 1 van Sharepoint een wijziging is geweest in het security model. Het Systeem-account mag namelijk niet meer 'declaratieve' workflows opstarten. Wat 'declaratief' in deze context betekend weet ik niet, maar het lijkt er dus op dat het Systeem account helemaal geen workflows meer op mag starten.
</p><p>Wanneer je code uitvoert met <span style="font-family:Courier New;font-size:10pt">RunWithElevatedPrivileges</span>, dan wordt dit onder het Systeem-account uitgevoerd, omdat dat account alle rechten zou moeten hebben op de web applicatie.
</p><p>Dit had ik dus ook in mijn stuk code gedaan. Om er zeker van te zijn ben ik even ingelogd als het Application Pool account op m'n Sharepoint site. Als naam stond hier inderdaad dat ik het Systeemaccount was.
</p><p>Het is dus zeker een nuttig KB om te kennen bij het schrijven van code dat afhankelijk is van workflows.
</p><p>Sowieso is het handig om de best-practices te kennen voor het inrichten en configureren van een Sharepoint omgeving. Op zich wist ik namelijk wel dat deze specifieke omgeving niet echt best-practice was, maar had niet gedacht dat zoiets eenvoudigs als het starten van een workflow dan niet meer zou gaan werken.
</p></div></div>
<div><b>Published:</b> 7/2/2010 8:27 PM</div>
<div><b>Month:</b> 7</div>
<div><b>Year:</b> 2,010</div>
]]></description>
      <author>Jan V</author>
      <pubDate>Fri, 02 Jul 2010 18:27:10 GMT</pubDate>
      <guid isPermaLink="true">http://weblog.jan-v.mobi/Lists/Posts/ViewPost.aspx?ID=191</guid>
    </item>
    <item>
      <title>Automatisch workflow starten bij aanmaken item via code</title>
      <link>http://weblog.jan-v.mobi/Lists/Posts/ViewPost.aspx?ID=190</link>
      <description><![CDATA[<div><b>Body:</b> <div class=ExternalClass277DDFB4F97B47ECA1D337759EB5FAC5><p>Enige tijd geleden moest ik iets maken voor een klant dat vanuit een 'gewone' ASP.NET pagina een item aanmaakte in een Sharepoint lijst. Op zich geen probleem, zeker niet omdat er in dezelfde application pool werd gewerkt, waardoor er gewoon gebruik gemaakt kon worden van de <span style="font-size:10pt"><span style="font-family:Courier New">RunWithElevatedPrivileges</span>
		</span>die Sharepoint biedt.
</p><p>Dit had ik dan ook al snel voor elkaar, maar bij het testen bleek dat de workflow van de lijst niet automatisch werd gestart. Aan de lijst hing namelijk een workflow die automatisch zou moeten starten wanneer er een nieuw item in de lijst wordt aangemaakt. 
</p><p>Na wat zoeken ben ik er achter gekomen dat dit 'normaal' gedrag is en er een work-around voor is, namelijk door de workflow ook zelf via code op te starten. Als je dit weet is dat op zich prima, maar ook dat levert een foutmelding op. De melding was (vrij vertaald): '<em>Failed to start (retrying)</em>'. Enkele minuten later start de workflow alsnog. Wat wel vervelend is, is dat de gebruiker dit niet kan zien, omdat de status continu hetzelfde blijft, totdat de workflow is beeindigd.
</p><p>Zelf kan ik hier prima mee leven, zeker omdat ik geen alternatief had.
</p><p>Vandaag kreeg ik de melding dat er nog iets anders mis ging in het formulier. Na deze melding al vrij snel opgelost te kunnen hebben, heb ik toch even verder gekeken naar dit bovenstaande probleem. Na even zoeken kwam ik langs een post op het MSDN forum waarop staat dat je de workflow ook via de Sharepoint webservices kunt gaan opstarten. Logisch, maar had niet verwacht dat dat een oplossing zou zijn.
</p><p>Als PoC heb ik de code dus omgeschreven om gebruik te maken van de Sharepoint webservice, gemixed met het object model. Tijdens het doorlopen van de code zag ik dat alles nu wel vlekkeloos werkt.
</p><p>Wat ik nu gedaan heb is het volgende (versimpeld voorbeeld):
</p><p><span style="font-family:Courier New;font-size:10pt"><span style="color:blue">private</span>
			<span style="color:blue">bool</span> StartWorkflow(<span style="color:#2b91af">SPList</span> list, <span style="color:#2b91af">SPListItem</span> listItem, <span style="color:#2b91af">SPWorkflowAssociation</span> wf)
</span></p><p><span style="font-family:Courier New;font-size:10pt">{
</span></p><p><span style="font-family:Courier New;font-size:10pt"><span style="color:blue">bool</span> started = <span style="color:blue">false</span>;
</span></p><p><span style="font-family:Courier New;font-size:10pt">      WorkflowService.<span style="color:#2b91af">Workflow</span> workflowService = <span style="color:blue">new</span> WorkflowService.<span style="color:#2b91af">Workflow</span>();
</span></p><p><span style="font-family:Courier New;font-size:10pt">workflowService.Url = webserviceLink;
</span></p><p><span style="font-family:Courier New;font-size:10pt">workflowService.UseDefaultCredentials = <span style="color:blue">true</span>;
</span></p><p><span style="font-family:Courier New;font-size:10pt">workflowService.Credentials = <span style="color:blue">new</span>
			<span style="color:#2b91af">NetworkCredential</span>(ADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_DOMAIN); <span style="color:green;background-color:silver">
			</span></span></p><p><span style="font-family:Courier New;font-size:10pt">workflowService.PreAuthenticate = <span style="color:blue">true</span>;
</span></p><p>
 </p><p><span style="font-family:Courier New;font-size:10pt"><span style="color:#2b91af">XmlDocument</span> workflowParameters = <span style="color:blue">new</span>
			<span style="color:#2b91af">XmlDocument</span>();
</span></p><p><span style="font-family:Courier New;font-size:10pt">workflowParameters.LoadXml(wf.AssociationData);
</span></p><p><span style="font-family:Courier New;font-size:10pt">workflowService.StartWorkflow(<span style="color:#2b91af">String</span>.Format(<span style="color:#a31515">&quot;http://testsite/{0}&quot;</span>, listItem.Url), wf.Id, workflowParameters);
</span></p><p><span style="font-family:Courier New;font-size:10pt"><span style="color:blue">return</span> started;
</span></p><p><span style="font-size:10pt"><span style="font-family:Courier New">}</span><span style="font-family:Century Gothic">
			</span></span></p><p>
 </p><p>Op deze manier maak je dus gebruik van de webservice (<span style="font-size:10pt"><span style="font-family:Century Gothic">WorkflowService</span>
		</span>= vti_bin/Workflow.asmx). Het is nog niet getest door ons testteam en staat nog niet in productie, maar ziet er toch naar uit dat dit het 'probleem' heeft opgelost van de vage melding. Nu krijg ik alleen maar een juiste status te zien van de workflow en hoef ik ook niet 5 minuten te wachten voordat de workflow opstart (Sharepoint timer).
</p></div></div>
<div><b>Published:</b> 7/2/2010 8:16 PM</div>
<div><b>Month:</b> 7</div>
<div><b>Year:</b> 2,010</div>
]]></description>
      <author>Jan V</author>
      <pubDate>Fri, 02 Jul 2010 18:16:22 GMT</pubDate>
      <guid isPermaLink="true">http://weblog.jan-v.mobi/Lists/Posts/ViewPost.aspx?ID=190</guid>
    </item>
  </channel>
</rss>