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
State machine in WF 4.0: initial, final e transition state, differenze con WF3
Scritto da Fabio Carucci il 22-06-2010 ore 07:57
Intel Cluster Studio XE
Su di un punto le versioni della macchina a stati convergono: entrambe hanno il loro inizio con un initial state, che differisce nella CTP 1 dello State Machine Activity Pack dalla classe StateMachine contenente la proprietà InitialState rispetto a WF3, in cui la classe StateMachineWorkflowActivity contiene la proprietà InitialStateName; inoltre entrambe hanno azioni entry, exit e transizioni.

Anche nel final state le cose sostanzialmente non cambiano: non esistono ovviamente azioni entry ed exit e nell'ambito di un composite state il final indica il termine dei child state; in WF3 si utilizza la proprietà CompletedStateName della classe StateMachineWorkflowActivity, nella CTP 1 dello State Machine Activity Pack si utilizza State.IsFinal.

Con Microsoft.Activities.Statements.Transition si definisce una transizione: le transizioni di stato corrispondono a una collection di oggetti Transition sulla classe State e ciascuna transizione deve avere il suo trigger; la transizione possiede quattro proprietà: To specifica la tipologia di stato della transizione come destinazione; Trigger specifica quale trigger della transizione deve essere attivato; Condition è la condizione da verificare per eseguire la transizione; Action specifica quale activity eseguire all'avvio della transizione.

Altro discorso è la transizione in WF3, System.Workflow.Activities.SetStateActivity.SetStateActivity.TargetStateName è la proprietà con la quale si specifica lo stato della transizione; il suo utilizzo può avvenire sia nell'activity StateInitializationActivity che in EventDrivenActivity, mentre le condizioni possono essere verificate mediante System.Workflow.Activities.IfElseActivity.

Il codice XAML seguente è un esempio di workflow di una semplice macchina a stati contenente una transizione di stato e una activity di tipo DelayActivity; quest'ultima effettua un ritardo di 5 secondi prima di passare allo stato finale del workflow:
  1. <Activity mc:Ignorable="sap" x:Class="WorkflowConsoleApplication1.Workflow1" sap:VirtualizedContainerService.HintSize="654,676" mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mas="clr-namespace:Microsoft.Activities.Statements;assembly=Microsoft.Activities.StateMachine" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:s1="clr-namespace:System;assembly=System" xmlns:s2="clr-namespace:System;assembly=System.Xml" xmlns:s3="clr-namespace:System;assembly=System.Core" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:st="clr-namespace:System.Text;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  2.   <mas:StateMachine InitialState="{x:Reference __ReferenceID1}" sad:XamlDebuggerXmlReader.FileName="c:documents and settingsfcaruccidocumentivisual studio 2010ProjectsWorkflowConsoleApplication1WorkflowConsoleApplication1Workflow1.xaml" sap:VirtualizedContainerService.HintSize="614,636">
  3.     <sap:WorkflowViewStateService.ViewState>
  4.       <scg3:Dictionary x:TypeArguments="x:String, x:Object">
  5.         <x:Boolean x:Key="IsExpanded">False</x:Boolean>
  6.         <x:Double x:Key="StateContainerWidth">600</x:Double>
  7.         <x:Double x:Key="StateContainerHeight">600</x:Double>
  8.         <av:PointCollection x:Key="ConnectorLocation">300,77.5 300,107.5 300.131,107.5 300.131,167</av:PointCollection>
  9.       </scg3:Dictionary>
  10.     </sap:WorkflowViewStateService.ViewState>
  11.     <mas:State x:Name="__ReferenceID1" DisplayName="State" sap:VirtualizedContainerService.HintSize="326,410">
  12.       <mas:State.Entry>
  13.         <WriteLine sap:VirtualizedContainerService.HintSize="300,150" Text="Entro nello stato iniziale" />
  14.       </mas:State.Entry>
  15.       <mas:State.Transitions>
  16.         <mas:Transition DisplayName="" sap:VirtualizedContainerService.HintSize="326,452">
  17.           <mas:Transition.Trigger>
  18.             <Delay Duration="00:00:05" sap:VirtualizedContainerService.HintSize="300,150" />
  19.           </mas:Transition.Trigger>
  20.           <sap:WorkflowViewStateService.ViewState>
  21.             <scg3:Dictionary x:TypeArguments="x:String, x:Object">
  22.               <av:PointCollection x:Key="ConnectorLocation">300.131,253 300.131,390.5 260,390.5 260,402.5</av:PointCollection>
  23.             </scg3:Dictionary>
  24.           </sap:WorkflowViewStateService.ViewState>
  25.           <mas:Transition.To>
  26.             <mas:State x:Name="__ReferenceID0" DisplayName="Final" IsFinal="True">
  27.               <sap:WorkflowViewStateService.ViewState>
  28.                 <scg3:Dictionary x:TypeArguments="x:String, x:Object">
  29.                   <av:Point x:Key="ShapeLocation">230,402.5</av:Point>
  30.                   <av:Size x:Key="ShapeSize">60,75</av:Size>
  31.                 </scg3:Dictionary>
  32.               </sap:WorkflowViewStateService.ViewState>
  33.             </mas:State>
  34.           </mas:Transition.To>
  35.           <mas:Transition.Action>
  36.             <WriteLine sap:VirtualizedContainerService.HintSize="300,150" Text="Transizione allo stato finale" />
  37.           </mas:Transition.Action>
  38.         </mas:Transition>
  39.       </mas:State.Transitions>
  40.       <sap:WorkflowViewStateService.ViewState>
  41.         <scg3:Dictionary x:TypeArguments="x:String, x:Object">
  42.           <av:Point x:Key="ShapeLocation">234.5,167</av:Point>
  43.           <av:Size x:Key="ShapeSize">131,86</av:Size>
  44.           <x:Double x:Key="StateContainerWidth">117</x:Double>
  45.           <x:Double x:Key="StateContainerHeight">50.446666666666658</x:Double>
  46.         </scg3:Dictionary>
  47.       </sap:WorkflowViewStateService.ViewState>
  48.       <mas:State.Exit>
  49.         <WriteLine sap:VirtualizedContainerService.HintSize="300,150" Text="Lascio lo stato iniziale" />
  50.       </mas:State.Exit>
  51.     </mas:State>
  52.     <x:Reference>__ReferenceID0</x:Reference>
  53.   </mas:StateMachine>
  54. </Activity>
Precedente: Microsoft annuncia il rilascio di un nuovo sistema operativo per smartphone
Successiva: Le foursquare API per nuove applicazioni 2.0
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.299 secondi.