您的位置:首页 > 其它

简单状态机Workflow基于Web应用【转】

2007-09-10 09:11 363 查看
一、实现目的

1、在Web中托管Workflow引擎实现工作流流转。

2、使用持久化的方式存放工作流实例状态。

二、基本原形

报销流程(网上有很成熟的基于工作流的报销流程,我还在这里显摆,唉!)

三、使用到的核心类

WorkflowRuntime、ExternalDataExchangeService、WorkflowInstance、WorkflowPersistenceService

分别在dotnet3.0的一下命名空间中:

System.Workflow.Runtime、System.Workflow.Activities、System.Workflow.Runtime.Hosting

四、工作流项目设计
1、报销流程还是沿用了网上广为流传的那个报销流程的模式(细节上也没有太大的差别),这里简单描述一下:报销者提交报销信息——〉部门经理审批——〉副总经理审批(如果数目小于1000元跳过此环节)——〉财务经理审批——〉出纳确认——〉结束,如果在除提交环节的任何一个环节审批不通过则将打回到提交者进行提交的初始状态。该例子中使用了状态机模式(个人认为状态机的Workflow可以很好的满足我以前开发中的大多数需求)。

2、使用VS2005进行Workflow开发的基本条件网上很多,这里简单的说一下:

dotnetfx3、Visual Studio 2005 Extensions for Windows Workflow Foundation (CHS)[都可以从官方下载]

3、安装好后会在项目模板中出现专门为Workflow工程开发所提供的几个模板

private void OnWorkflowCompleted(object sender, WorkflowCompletedEventArgs instance)

{

// 添加工作流完成后需要的操作

}

七、设计中需要注意的问题

1、如果对状态机工作流发送的事件不是工作流当前的状态中所需要的,则会抛错。

2、因为Web不能保持程序当前的很多状态信息,因此需要自己处理对工作流引擎、实例等的信息保存。

3、在工作流引擎启动之前加载需要的服务和绑定需要工作流处理的事件。

4、同一工作流加载同一服务多次会出错。

5、工作流引擎可以不需要启动动作,而是用创建实例的启动方法来同时启动工作流引擎,但在持久化恢复时需要启动工作流引擎。

因为纯属个人练习性质的项目,该项目代码比较凌乱,且处理逻辑不够清晰,较复杂,而且是第一次写Blog,请大家谅解。谢谢!

使用本例需要改变代码中连接SQL Server数据库的字符串。

本例下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: