Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
State machine in WF 4.0: self transition (1/2)
Scritto da Fabio Carucci il 28-06-2010 ore 10:09
Intel Cluster Studio XE
La macchina a stati disponibile nella CTP 1 dello State Machine Activity Pack possiede uno speciale tipo di transizione, conosciuta con il nome di self transition, o iterazione (cioè la possibilità di transitare da uno stato a se stesso); se occorre creare un loop, una iterazione, se si vuole eseguire una custom activity, quando la transizione ad altri stati non può avvenire per motivi specifici, allora è possibile creare una self transition dal trigger associato allo stato di partenza, inserendovi le condizioni opposte a quelle inizialmente specificate per la transizione ad altro stato. In seguito occorre inserire la custom activity desiderata nella Action della self transition.

L'esempio riportato in questo contributo implementa una state machine in cui sono contenuti due stati:
  • il workflow giunge al primo stato e dopo una attesa di cinque secondi, se la condizione soddisfa un certo criterio, avviene la transizione allo stato finale;
  • altrimenti: se la condizione soddisfa un ulteriore differente criterio, avviene la transizione al secondo stato; parte un trigger, che contiene una DelayActivity di ulteriori cinque secondi; viene verificata una condizione relativa a un contatore e, se soddisfatta, parte una sequence activity, che incrementa il contatore, verifica di nuovo la condizione precedente e, finché non viene raggiunta una determinata soglia, la transizione effettua un loop su se stessa per poi finalmente giungere alla ennesima transizione, che la porterà allo stato finale.
Si inizia creando una applicazione di tipo WorkflowConsoleApplication e inserendo in essa una StateMachine; si creano poi due variabili, selezionando l'apposito tab Variables in basso a sinistra nel designer del workflow: la prima di tipo string, avente come scope la StateMachine, che servirà per valutare la condizione di transizione; la seconda di tipo Int32, che sarà utile per controllare il loop della self transition.

A seguire si aggiunge 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 Delay, impostando la durata a una manciata di secondi. Inserite quindi 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 DelayActivity, impostate anch'essa con un ritardo di qualche secondo e nella Condition inserite target = "state 2"; nella Action invece una WriteLine che confermerà la transizione al secondo State. Nella seconda parte troverete i successivi step della descrizione dell'esempio, compresi i dettagli implementativi della self transition, nonché il relativo codice sorgente.
Precedente: Intel porta Android su piattaforma x86
Successiva: Chi ha bisogno di Java?
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.293 secondi.