2009-02-18

Rolig dag på jobbet

I dagarna har jag vart lärare på AddSkills i kursen Visual Studio 2008 Windows Workflow Foundation.
På denna kurs finns en kollega vid namn Peter Ilis som visat sig vara en klurig kille. När jag gick igenom hur nya instanser av workflows får sina initiala värden så kom frågan om det inte fanns något enkelt sätt att göra detta hårt typat.

Problemet är alltså att den vanliga metoden att skapa nya instanser tar en Dictionary<string, object> som argument och det vanliga sättet att fylla den med data är via medföljande Add-metod. Här har vi alltså ingen validering att vi har rätt namn på våra properties och inte heller vet vi att vi använder rätt datatyp.. snyggt, njae

Tänk er ett workflow med två properties:
public class MyWorkflow
{
public string Name { get; set; }
public int Age{ get; set; }
}

Du vill sedan få möjligheten att skapa en dictionary som har hård typning och som vet vilka properties du har exponerat i ditt workflow. Exempelvis på följande sätt:
var d = new PropertyDictionary<MyWorkflow>();
d.Add(o => o.Age, 30)
.Add(o=> o.Name, "John Doe");

Hur går denna magi till? Tja, det är rätt enkelt egentligen och här är lösningen som Peter skapade grunden till och som jag trixade vidare lite med.


public class PropertyDictionary<TWorkflowType> : Dictionary<string, object>
{
public virtual PropertyDictionary<TWorkflowType> Add<TType>(Expression<Func<TWorkflowType, TType>> key, TType value)
{
Add(GetPropertyName(key), value);
return this;
}

    private string GetPropertyName<TType>(Expression<Func<TWorkflowType, TType>> propertyExpression)
{
MemberExpression expressionBody = (MemberExpression)propertyExpression.Body;
return expressionBody.Member.Name;
}
}




Kör så det ryker, jag tycker detta är grymt coolt!

2009-02-06

Trendspaning

Hur bygger vi workflows idag och hur kommer vi att bygga workflows i morgon, eller rättare sagt –hur vill Microsoft att vi bygger workflows i morgon?

Idag ser jag många projekt och kodningsexempel som bygger flöden med hjälp av de basaktiviteter som följer med .NET. Detta innebär ofta en hel del användning av CodeActivity och det innebär även att själva workflowet är byggt i kod och inte XOML. Vissa projekt går lite längre och bygger egna aktiviteter och utnyttjar möjligheten att bygga komposita aktiviteter, möjligheten att komponera är trots allt en av styrkorna med workflows. Även dessa aktiviteter använder rätt ofta CodeActivity för att utföra någon form av jobb.

Jag säger nu inte att något av ovanstående är fel utan detta inlägg handlar mer om vart vi är på väg.

I och med .NET 4.0, Dublin, Oslo börjar saker verkligen röra på sig. Vi tappar bakåtkompatibliteten med “gamla” workflow foundation och står på en ny bas. Vissa saker är tydliga och det är exempelvis

  • Ingen CodeActivity
  • Ingen XOML utan nu är det ren XAML som gäller
  • Mindre kod och mer markup
  • BPEL

Ur detta kan vi naturligtvis själva fundera över hur vi bäst bygger workflows som går att äga även på lite längre sikt. Ett naturligt val är att skippa CodeActivity, börja kika på hur vi kan minska mängden kod och utnyttja möjligheterna med markup och styra flödet med hjälp av policys och regler istället.

Några tankar?

2009-02-02

Nytt svenskt community för sharepoint

På detta community hänger många sköna svenska sharepointprofiler:
http://www.sharepointcommunity.se/

Jag finns själv på workflow-forumet på den sidan och försöker svara på frågor.