2007-09-25

Tänk om, tänk rätt

Jag läser och försöker hjälpa till i forumen på MSDN-forums rörande Workflow Foundation. Tyvärr ser jag en trend där personer inte riktigt förstår hur komponentbaserad utveckling och ärendehantering kan fungera tillsammans.

Ett bra exempel är en tråd som handlade om hurvida Enabled-propertyn på en aktivitet skall vara nåbar när workflowet är aktivt. (anledningen till att den inte är det är glasklar med tanke på activityexecutioncontext och hela tänket bakom persistens osv)

En person i tråden drog till och med igång ett litet flamewar där han propagerade för att "keep it simple", jag påpekade tillslut att om han vill ha en aktivitet som endast körs ibland så kan han lösa det med en if-else aktivitet och en bra regel. Ännu bättre är om han väljer att kapsla sin funktionallitet i en egen sammansatt aktivitet som han kan återanvända.

Bara mina 5 cent..

2007-09-06

InfoPath som TaskForm

Har försökt använda InfoPath som taskforms (Form Services i MOSS) med lite blandat resultat.

InfoPath som applikation är säkert en bra lösning i ett företag men personligen har jag haft lite för stora problem med just FormServices för att känna mig helt nöjd.

Avsaknad av så basala saker som exempelvis validering kan vara otroligt frustrerande.

Att all data är XML-baserad är naturligtvis bra, särskilt då den hämtas / sparas via webtjänster. Att det sedan inte finns något bra stöd att utifrån ett schema skapa nya noder är rätt frustrerande.

Själva processen med deploy, sätta URN, göra formuläret workflow-enabled osv är rätt tidsödande även om det kan scriptas.

ItemMetadata.xml som är den data vi kan få som input till ett taskform är på tok för begränsad då den baseras på #ROWSET, dvs vi kan inte få in komplex data på ett enkelt sätt.

FormServices ligger i _layouts, dvs utanför siten och renderas med application.master vilket ger ett yxigt intryck.

Avsaknad av olika komponenter som exempelvis bildvisare (dynamisk) osv gör formulären rätt stela.

Anpassa utseendet baserat på en CSS går inte (inte helt sant då det faktiskt går mha en massa handpåläggning vid varje deploy men ger även då ett mediokert resultat)

DCL (Data connection library) är ett bra koncept men tungt att underhålla och innehåller en "feature" som gör att vi låster oss till en och samma utvecklingsserver (av någon anledning pekas en unik server ut som ägare till dcl-filerna, detta spelar naturligtvis ingen roll efter deploy men det GÅR inte att ha flera servrar i ett formulär för då krashar allt...) Detta försvårar förvaltning rätt mkt.

Deploy av formulär som har code-behind är lite knepig eftersom vi manuellt måste kopiera in berört assembly.

Slutsats, jag kommer i framtiden att favorisera ASP.NET som taskforms och lägga krutet på ett bra ramverk kring den lösningen.

2007-09-04

Problem att starta workflows i MOSS

I ett projekt som jag arbetar i har vi haft ett återkommande problem som endast visat sig i vissa installationer av MOSS. Efter att ha letat olika lösningar och försökt koda work-arounds snubblade jag precis över lösningen.

Problemet visade sig när vi försökte starta ett workflow via MOSS objektmodell vilket resulterade i ett "Failed to start(retrying)" som efter några minuter kom igång igen.

Felet i loggen ser ut som följer:

Workflow Infrastructure Unexpected
RunWorkflow: System.ArgumentException: Value does not fall within the expected range. at Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties..ctor(SPWorkflow workflow, Int32 runAsUserId, String associationData, String initiationData) at Microsoft.SharePoint.Workflow.SPWinOEWSSService.MakeActivation(SPWorkflow workflow, SPWorkflowEvent e) at Microsoft.SharePoint.Workflow.SPWinOeEngine.RunWorkflow(Guid trackingId, SPWorkflowHostService host, SPWorkflow workflow, Collection`1 events, TimeSpan timeOut) at Microsoft.SharePoint.Workflow.SPWorkflowManager.RunWorkflowElev(SPWorkflow originalWorkflow, SPWorkflow workflow, Collection`1 events, SPRunWorkflowOptions runOptions)


Lösningen var rätt enkel
Central Administration > Application Management > Policy for Web Application
Lägg där till det servicekonto som anropar via objektmodellen och kryssa i att det kontot får uppträda som system.

Projektteamet är glada igen och ny energi finns =)

Nu väntar jag bara på en ny version av Live Writer som faktiskt går att installera...