Condizioni e regole in Windows Workflow Foundation
di Giuseppe Marchi, in Windows Workflow Foundation, 27 gennaio 2009
Utilizzo delle regole
La logica appena vista per la creazione di condizioni può essere utilizzata in un contesto più avanzato a formare una o più regole. Come abbiamo già accennato, una regola è composta da:
- una condizione;
- un'azione da eseguire nel caso in cui la condizione ritorni una verità;
- un'azione da eseguire nel caso in cui la condizione ritorni un falso.
Il tutto a formare un costrutto simile al if … then … else dei normali linguaggi di programmazione, in grado di svolgere delle azioni vere e proprie a fronte della valutazione della condizione di partenza.
A partire da questi costrutti, il framework di Workflow Foundation ci permette di creare molteplici regole e collezionarle tutte all'interno del medesimo RuleSet, in modo tale da potere effettuare a runtime una valutazione dell'insieme di regole, utilizzando anche concetti come la priorità, la sequenzialità o le inter-dipendenze tra regole.
L'attività che ci permette l'utilizzo delle regole all'interno di un workflow è la PolicyActivity. Questa, tramite la sua proprietà RuleSetReference, mantiene la referenza ad un singolo RuleSet tramite il quale effettuare la valutazione. La lettura del RuleSet viene fatta sempre dal file .rules allegato al workflow corrente, mentre per l'inserimento (ed eventuali modifiche) delle regole all'interno del raccoglitore viene utilizzato un editor particolare sviluppato appositamente per l'utilizzo delle regole in un workflow.


Tale editor, visibile in figura, vede nella parte alta l'elenco di tutte le regole presenti attualmente all'interno del RuleSet con i relativi nomi e valori di priorità; i pulsanti di aggiunta ed eliminazione permettono rispettivamente di aggiungere e rimuovere regole da tale elenco, mentre la parte bassa della finestra è lasciata per la modifica dei valori della regola selezionata.
Infatti, sono presenti le caselle di testo per la condizione e per le due operazioni successive ("Then actions" e "Else actions"), la casella per la modifica del nome della regola, della priorità, dell'opzione di ri-valutazione ed una check-box per attivare o meno la regola.
Nota: nell'esempio allegato all'articolo e comunque visibile in figura, sono state utilizzate due proprietà custom inserite all'interno del workflow; la prima ("Temperatura") viene passata come input al workflow, mentre la seconda ("Azione") viene utilizzata come esempio di un'eventuale azione da compiere dopo la valutazione del RuleSet. Questo per sottolineare che la potenza di questo engine non si ferma al semplice assegnamento di una variabile di tipo stringa, ma possono essere eseguite azioni custom richiamando metodi o modificando informazioni in real-time.
Per quanto riguarda la priorità delle regole, bisogna porre l'attenzione sul fatto che vince la regola che ha priorità più bassa, in caso di conflitti. Questo perché ogni volta che il sistema di valutazione si accorge che all'interno di una condizione è presente qualche proprietà o comunque qualche informazione presente anche all'interno delle condizioni di altre regole, viene segnalato un conflitto.
I conflitti vengono risolti o dalle rispettive priorità delle regole in conflitto tra loro o da un eventuale ri-valutazione della condizione. La ri-valutazione è abilitata di default, ma può essere modificata selezionando l'opzione "Sequential" o "Explicit update only" che rispettivamente dicono all'engine di valutare le regole in maniera sequenziale o di ri-valutare solamente quelle in cui sono stati modificati i valori da comparare.
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Pagina 2
- Pagina 3
- Pagina 4
- Pagina 5
Sullo stesso argomento
-
Mostrare le camere di sorveglianza tramite il .NET Micro Framework
-
La piattaforma Microsoft per il cloud computing: Windows Azure
-
Interoperabilità con WCF: invocare servizi da PHP e Flash
-
Le novità di Windows 7 per gli sviluppatori
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Costruire una chat per Silverlight con il PollingDuplexHttpBinding
-
Introduzione a .NET RIA Services
-
Architettura Model-View-ViewModel in un'applicazione WPF
-
Utilizzare Message Queuing per scalare le applicazioni

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.