La tipologia di base di una transizione di stato, in una
state machine, è la
conditional transition, eseguita soltanto quando il
trigger associato ha completato la sua specifica funzionalità e quindi la condizione è verificata.
L'esempio riportato in questo contributo implementa una
state machine, in cui sono contenuti due stati oltre a quello iniziale e finale; il
workflow giunge al primo stato e alla ricezione di un messaggio WCF; se la condizione soddisfa un certo criterio, avviene la transizione allo stato finale. Tornando al primo stato, se viene inviato un messaggio WCF e la condizione soddisfa un ulteriore differente criterio, avviene la transizione al secondo stato, parte un
trigger che contiene una
DelayActivity di 5 secondi e la transizione giunge anch'essa allo stato finale.
La prima operazione da fare, dopo aver ovviamente creato un'applicazione di tipo
WorkflowConsoleApplication e aver inserito in essa una
StateMachine, è di creare una variabile — selezionando l'apposito tab
Variables in basso a sinistra nel
designer del
workflow — di tipo
string avente come
scope la
state machine; essa servirà per valutare la condizione di transizione che verrà inserita più tardi.
La seconda operazione è l'aggiunta di un
primo State e una linea di transizione tra quest'ultimo e lo stato finale del
workflow; fate doppio clic sulla transizione e nel
trigger inserite una
activity di tipo
Receive, dando un nome all'
OperationName senza aggiungere nulla al
Content, poiché non interessa, per gli scopi dell'argomento trattato, definire tecnicamente l'
activity Receive. Inserite la condizione che dovrà soddisfare la transizione: se ad esempio la variabile che avete creato in precedenza si chiama
target, allora scrivete
target = "final state" e nella
action della transizione aggiungete una
WriteLine con un testo che confermerà, in fase di esecuzione, l'effettiva transizione allo stato finale.
Ora create un
secondo State e tirate una linea di transizione tra il primo stato e il secondo; nel
trigger relativo aggiungete una
SendActivity, anch'essa tecnicamente fittizia per il precedente motivo; nella
Condition inserite
target = "state 2" e nella
action una
WriteLine, che confermerà la transizione al secondo
state. Nella seconda parte trovate la conclusione della descrizione dell'esempio nonché il relativo codice sorgente.