State Machine Workflow - Part 2: States and Events

 HelloWorld.xoml:

Right click on HelloWorld.xoml, select Open With..., followed by XML Editor.

Copy and paste the following:

<?

Mapping XmlNamespace="ComponentModel" ClrNamespace="System.Workflow.ComponentModel" Assembly="System.Workflow.ComponentModel" ?>

<?

Mapping XmlNamespace="Compiler" ClrNamespace="System.Workflow.ComponentModel.Compiler" Assembly="System.Workflow.ComponentModel" ?>

<?

Mapping XmlNamespace="Activities" ClrNamespace="System.Workflow.Activities" Assembly="System.Workflow.Activities" ?>

<?

Mapping XmlNamespace="RuleConditions" ClrNamespace="System.Workflow.Activities.Rules" Assembly="System.Workflow.Activities.Rules" ?>

<

StateMachineWorkflow x:Class="StateMachine_HelloWorld.HelloWorld" x:CompileWith="HelloWorld.xoml.cs" ID="HelloWorld" CompletedState="HelloWorldCompletedState" InitialState="HelloWorldInitialState" xmlns:x="Definition" xmlns="Activities">

<

State ID="HelloWorldInitialState">

<

EventDriven ID="ProcessEvent">

<

WebServiceReceive ID="webServiceReceive1" Activation="True" MethodName="Process_Event" InterfaceType="StateMachine_HelloWorld.IHelloWorld" />

<

Code ExecuteCode="debug_ExecuteCode" ID="code1" />

<

SetState TargetState="ProcessState" ID="setState1" />

</

EventDriven>

</

State>

<

State ID="HelloWorldCompletedState" />

<

State ID="ProcessState">

<

EventDriven ID="ReviewEvent">

<

WebServiceReceive ID="webServiceReceive2" MethodName="Review_Event" InterfaceType="StateMachine_HelloWorld.IHelloWorld" />

<

Code ExecuteCode="debug_ExecuteCode" ID="code2" />

<

SetState TargetState="ReviewState" ID="setState2" />

</

EventDriven>

<

EventDriven ID="ApprovalEvent">

<

WebServiceReceive ID="webServiceReceive3" MethodName="Approval_Event" InterfaceType="StateMachine_HelloWorld.IHelloWorld" />

<

Code ExecuteCode="debug_ExecuteCode" ID="code3" />

<

SetState TargetState="ApprovalState" ID="setState3" />

</

EventDriven>

</

State>

<

State ID="ReviewState">

<

EventDriven ID="ProcessEvent1">

<

WebServiceReceive ID="webServiceReceive4" MethodName="Process_Event" InterfaceType="StateMachine_HelloWorld.IHelloWorld" />

<

Code ExecuteCode="debug_ExecuteCode" ID="code4" />

<

SetState TargetState="ProcessState" ID="setState4" />

</

EventDriven>

<

EventDriven ID="ApprovalEvent1">

<

WebServiceReceive ID="webServiceReceive5" MethodName="Approval_Event" InterfaceType="StateMachine_HelloWorld.IHelloWorld" />

<

Code ExecuteCode="debug_ExecuteCode" ID="code5" />

<

SetState TargetState="ApprovalState" ID="setState5" />

</

EventDriven>

</

State>

<

State ID="ApprovalState">

<

EventDriven ID="ProcessEvent2">

<

WebServiceReceive ID="webServiceReceive6" MethodName="Process_Event" InterfaceType="StateMachine_HelloWorld.IHelloWorld" />

<

Code ExecuteCode="debug_ExecuteCode" ID="code6" />

<

SetState TargetState="ProcessState" ID="setState6" />

</

EventDriven>

<

EventDriven ID="CompletedEvent">

<

WebServiceReceive ID="webServiceReceive7" MethodName="Completed_Event" InterfaceType="StateMachine_HelloWorld.IHelloWorld" />

<

Code ExecuteCode="debug_ExecuteCode" ID="code7" />

<

SetState TargetState="HelloWorldCompletedState" ID="setState7" />

</

EventDriven>

</

State>

</

StateMachineWorkflow>

HelloWorld.xoml.cs:

Copy and paste the following:

using

System;

using

System.ComponentModel;

using

System.ComponentModel.Design;

using

System.Collections;

using

System.Drawing;

using

System.Workflow.ComponentModel.Compiler;

using

System.Workflow.ComponentModel.Serialization;

using

System.Workflow.ComponentModel;

using

System.Workflow.ComponentModel.Design;

using

System.Workflow.Runtime;

using

System.Workflow.Activities;

using

System.Workflow.Activities.Rules;

namespace

StateMachine_HelloWorld

{

interface IHelloWorld

{

void Process_Event();

void Review_Event();

void Approval_Event();

void Completed_Event();

}

public partial class HelloWorld : StateMachineWorkflow

{

private void debug_ExecuteCode(object sender, EventArgs e)

{

Activity currentActivity = (Activity)sender;

System.Diagnostics.

Debug.Print("State: {0}",currentActivity.Parent.ID);

}

}

}