WF 状态机工作流构建订单处理流程-范例程序分析 Part 1
状态机工作流(State Machine Workflow)是以状态的变化为驱动而进行业务流转的,且一定需要人为的干预,而不像顺序类型工作流(Sequential Workflow)那样按照事先设计好的业务流程一步一步依次执行下去。本范例程序由
http://forum.entlib.com 开源ASP.NET/C# 论坛小组提供。
State活动有3种类型的状态:起始状态(Initial State)、业务逻辑过程状态、终止状态(Completed State),在一个状态机工作流中起始状态和终止状态只能有一个。状态机工作流是从起始状态开始执行,在运行过程中通过业务逻辑状态的变化来进行工作流的流转,最终由终止状态标志工作流的结束。因此在状态机工作流设计界面上只能添加 State 状态活动,另外,在该状态中还可以添加一个或多个EventDriven 活动。下面通过一个订单处理流程的范例,详细介绍状态机工作流的使用。
下图简要描述了订单处理流程,你会发现许多地方需要用户参与或输入,来改变工作流。例如,财务部门依赖于支付情况来改变工作流,采购部门依赖于库存情况来改变工作流等等。
按照下面具体的操作步骤,一步一步实现上述状态机工作流演示程序。
1. 创建接口程序
由于状态机工作流中大量使用HandleExternalEvent 活动来接收应用程序的操作事件,从而改进该工作流上运行的业务实体的状态,因此需要定义一个接口程序作为工作流和应用程序之间沟通的桥梁。本范例程序中将通过接口中的7个事件来模拟状态机工作流的触发,接口IOrder.cs 如下所示。需要注意的是:我们引用System.Workflow.Activities,并且接口添加了[ExternalDataExchange]属性。
2. 创建Class Library项目,并添加State Machine Workflow(状态机工作流)文件。如下图所示。
在添加State Machine Workflow文件后,Workflow设计器自动打开。工作流的每一个State都有事件,因此在State Activity 添加EventDriven组件。
在事件Event触发后,State状态进入下一个状态。因此,双击EventDriven组件,添加HandleExternalEvent组件和SetState组件,其中HandleExternalEvent定义监听的事件,SetState定义将进入的下一个状态。
按照上面的步骤,重复创建OrderPlaced、OrderApproved、OrderPending、OrderDelivered、OrderCancelled状态,并添加相应的EventDriven组件,最终实现的状态机工作流如下所示: