Nella creazione di flussi sequenziali per Windows Workflow Foundation è frequente la creazione di Activity personalizzate per eseguire semplici operazioni che non sono presenti nel framework o che semplicemente presentano esigenze particolari.
In un flusso è fondamentale valutare condizioni e in questo IfElseActivity può bastare in molte situazioni, ma se in un Activity personalizzata si ritiene di poter inglobare una variazione di comportamento in determinate condizioni, è possibile utilizzare la classe ActivityCondition e valutarla in fase di esecuzione.
Per utilizzarla occorre definire una DependencyProperty sulla classe e una proprietà wrapper nel canonico modo di dichiarazione delle proprietà sulle Activity:
public partial class MyActivity: Activity { public static readonly DependencyProperty ConditionProperty = DependencyProperty.Register("Condition", typeof(System.Workflow.ComponentModel.ActivityCondition), typeof(MyActivity)); [DefaultValue(null)] public System.Workflow.ComponentModel.ActivityCondition Condition { get { return (System.Workflow.ComponentModel.ActivityCondition)this.GetValue(ConditionProperty); } set { this.SetValue(ConditionProperty, value);} } }
Definita la proprietà, questa risulta visibile in fase di design ed è possibile assegnare due tipi di condition:
- CodeCondition: rappresenta una condizione che scatena un evento nel quale viene eseguito codice liberamente scritto dal disegnatore del Workflow;
- RuleConditionReference: rappresenta una condizione caricata da file XML con estensione .rules. La condizione è un'espressione System.CodeDom serializzata.
Indipendentemente dal tipo di condizione, la classe ActivityCondition permette con il metodo Evaluate di valutarla e ottenere un booleano. Il metodo Execute dell'Activity è il punto ideale per fare ciò ed eseguire codice in funzione del risultato:
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (this.Condition != null) { // Valuto la condizione bool result = this.Condition.Evaluate(this, executionContext); if (result) { // Faccio qualcosa } } return ActivityExecutionStatus.Closed; }
Il primo parametro indica qual è l'Activity e quindi il Workflow sul quale eseguire la valutazione, mentre il secondo permette di ottenere i servizi del WorkflowRuntime e di debugging.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub