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);
}
}
}