Blog Stats
  • Posts - 171
  • Articles - 1
  • Comments - 197
  • Trackbacks - 5

 

giovedì 22 febbraio 2007

Workflow Foundation: custom activities

WF dispone di molte activities di base che permettono di creare workflow differenti.

Puo' sorgere comunque la necessità di dover creare un propria activity custom da riutilizzare all'interno di tanti workflow.

La creazione di una activity custom è relativamente semplice e consiste nel creare una classe che derivi dalla classe Activity (da System.Workflow.ComponentModel):

public partial class MyCustomActivity: System.Workflow.ComponentModel.Activity
{
  public MyCustomActivity()
  {
    InitializeComponent();
  }
}

Una custom activity è una black-box che esegue una particolare attività e come tale ha bisogno di parametri di input, parametri di output e di un metodo di esecuzione.

I parametri devono essere esposti tramite proprietà pubbliche nel seguente modo:

public static DependencyProperty MyValueProperty = System.Workflow.ComponentModel.DependencyProperty.Register("MyValue", typeof(string), typeof(MyCustomActivity));

[Browsable(true)]
[
ValidationOption(ValidationOption.Optional)]
[
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string MyValue
{
  get { return ((string)(base.GetValue(MyCustomActivity.MyValueProperty ))); }
 
set { base.SetValue(MyCustomActivity.MyValueProperty , value); }
}

Il metodo in cui eseguire l'attività vera e propria è Execute:

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
 
return ActivityExecutionStatus.Closed;
}

A questo punto l'activity è pronta per essere usata all'interno di un workflow.

Prendiamo per ipotesi che abbiamo creato un assembly contenente la custom activity e che abbiamo un altro assembly che contiene il workflow.
Quest'ultimo referenzia l'assembly dell'activity.

Quando andiamo ad utilizzare il designer per creare il workflow noteremo nella Toolbox di Visual Studio comparire anche la nostra custom activity, che possiamo trascinare ed utilizzare come le altre.

E' possibile mappare le proprietà pubbliche della custom activity con le proprietà pubbliche del workflow, questo per permettere per esempio che dati di input proveniente da chi ha invocato il workflow siano iniettati all'interno dell'activity stessa.

Per questo è sufficiente selezionare l'activity e nelle properties andare ad effettuare il mapping della proprietà dell'activity con una delle proprietà pubbliche del workflow.

Ricordo che nel code-behind del workflow è possibile creare proprietà pubbliche e che è possibile inizializzare tali proprietà all'atto della creazione del workflow tramite una collection dictionary generica:

...
Dictionary
<string, object> parameters = new Dictionary<string,object>();
parameters.Add("Rda", rda);
WorkflowInstance wi = workflowRuntime.CreateWorkflow(workflowType, parameters);
...

 

 

WCF,WF: due brevi definizioni

Sto guardando velocemente il contenuto del training kit di .Net 3.0 e dal primo powerpoint di presentazione mi voglio segnare le definizioni di WCF, e WF:

Windows Communication Foundation

A unified programming model and runtime enviroment for rapidly building secure, reliabe software services with manage code.

Workflow Foundation

Extensible framework for building workflow-enabled solutions on the Windows platform.

 

Niente di nuovo, ma un utile promemoria pronto all'occorrenza.

 

 

Copyright © Luca Mauri