已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中的报销多级审批工作流最近正在学习工作流,正好从网上搜索到一个A工作流(WWF+LINQ)的例子,之前学习MOSS时接触过工作流,不过那是针对MOSS的工作流,我一直从事B/S架构开发,知道工作流可用于很多环境,其中就包含,这让我非常想做一个这样的实例。看了它的源码,大部分都觉的非常不错,不过也有些个人认为不太满意的地方,这可能是因为作者考虑到只是一个简单的demo,没有必要注意一些非技术方面的细节问题。项目介绍:一个报销二级审批工作流,数据层操作采用LINQ TO SQL,虽然MS不再发展示它。 第一级:员工提交报销表给PM(经理),如果数目大于1000RMB,经理如果选择通过审批,工作流会到副总的二级审批,同时经理可以直接选择拒绝。 第二级:PV(副总),副总收到PM的审批后,可以选择通过或者是拒绝,如果通过,工作流会提交到财务。由财务最后结束工作流。流程图如下: 我创建的工作流与原作者的源码有以下几点不同:1:原文的工作流采用的是状态机工作流,而这里我采用顺序工作流。 2:把数据操作部分和业务逻辑以及页面层功能完全分开,即,只要是和数据访问,操作相关的代码只允许出现在数据处理层中,而业务逻辑层以及页面层均不允许,页面层只和业务逻辑层沟通,不允许直接访问数据处理层。 3:工程的命名上有改动,例如: 解决方案名称:ApproveWorkFlow, 页面层叫ApproveWorkFlow.Web。 4:对相关的方法做了适当的改进。 5:增加方法以及文档注释。项目结构图如下:项目结构说明:1:ApproveWorkFlow.BLL:业务逻辑层。2:ApproveWorkFlow.Common,可以放些常用的方法,就是常说的工具类。3:ApproveWorkFlow.DAL,数据处理层,数据的增删改查。4:ApproveWorkFlow.Data,数据库的连接类,这里我放了一个dbml文件。5:ApproveWorkFlow.Model,实体类。6:ApproveWorkFlow.MyInterface,接口层。7:ApproveWorkFlow.MyWorkFlow,工作流。8: ApproveWorkFlow.Web,页面层。WF中的持久化服务: SqlWorkflowPersistenceService是WF框架中的一个SQL持久性服务(支持SQL Server2005)。在安装DotNet时并不会自动安装此类所需要的数据库。要正确使用此类必需执行以下步骤:1:打开Sql Server Management Stuio。 2:新建一个数据库SqlPersistenceService,这个名字可以更改。 3:执行相关数据库脚本: 1:%WINDOWS%Microsoft.NETFrameworkv3.0Windows WorkflowFoundationSQLENSqlPersistenceService_Schema.sql。 2:%WINDOWS%Microsoft.NETFrameworkv3.0Windows Workflow FoundationSQLENSqlPersistenceService_Logic.sql。 创建报销审批工作流: 1:在设计面板中拉一个WhileActivity; 2:在代码中加入一个属性,标记while的执行条件:!this.IsCompleted / / 工作流的while条件/ private Boolean isCompleted = false;public Boolean IsCompletedget return isCompleted; set isCompleted = value; 复制代码3:拉一个SequenceActivity。 4:再放一个ListenActivity,也叫单线触发容器,使用EventDrivenActivity作为分支容器,当某条分支中的结点执行完成后,该ListenActivity结点就结束,继续向下执行,其他分支内的结点就不执行了,它不能应用于状态机工作流。 5:加入所有的EventDrivenActivity。 6:创建一个供EventDrivenActivity用的接口IApprove/ / 这个接口标示为ExternalDataExchange,目的是供工作流调用/ ExternalDataExchangepublic interface IApprove/ / 员工提交报销记录事件/ event EventHandler OnStaffSubmit;/ / 员工删除报销记录事件/ event EventHandler OnStaffDelete;/ / 小额数据PM审批通过事件/ event EventHandler OnPMSubmitMin;/ / 大额数据PM审批通过事件/ 同时提交给副总审批/ event EventHandler OnPMSubmitMax;/ / PM拒绝审批事件/ event EventHandler OnPMReject;/ / 副总审批通过事件/ event EventHandler OnVPSubmit;/ / 副总拒绝审批事件/ event EventHandler OnVPReject;/ / 财务通过审批事件/ event EventHandler OnFinanceSubmit; 复制代码7:设置EventDrivenActivity的属性:EventName,InterfaceType,Name,Invoked。InterfaceType选择第六步创建的接口。所有的工作流事件代码如下:注意: 财务审批事件(OnFinanceSubmit_Invoked)是工作流最后一步,所以工作流的完成标志也要在这完成。private void OnStaffSubmit_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info = e as ExpenseAccountInfo;info.AppStatus = 等待PM审批;Bll.AddRecord(info);private void OnStaffDelete_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info.AppStatus = 结束;Bll.UpDateRecord(info);private void OnPMSubmitMin_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info.AppStatus = 审批通过;Bll.UpDateRecord(info);private void OnPMSubmitMax_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info.AppStatus = 等待VP审批;Bll.UpDateRecord(info);private void OnPMReject_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info.AppStatus = PM拒绝审批;Bll.UpDateRecord(info);private void OnVPSubmit_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info.AppStatus = 审批通过;Bll.UpDateRecord(info);private void OnVPReject_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info.AppStatus = VP拒绝审批;Bll.UpDateRecord(info);private void OnFinanceSubmit_Invoked(object sender, ExternalDataEventArgs e)BllExpense Bll = new BllExpense();info.AppStatus = 结束;Bll.UpDateRecord(info);/结束工作流this.IsCompleted = true; 复制代码8:创建一个业务逻辑类BLL_Approve来实现IApprove。 public class BLL_Approve:IApprovepublic event EventHandler OnStaffSubmit;public event EventHandler OnStaffDelete;public event EventHandler OnPMSubmitMin;public event EventHandler OnPMSubmitMax;public event EventHandler OnPMReject;public event EventHandler OnVPSubmit;public event EventHandler OnVPReject;public event EventHandler OnFinanceSubmit; public void RaiseStaffSubmit(ExpenseAccountInfo info)if (OnStaffSubmit != null)OnStaffSubmit(null, info);public void RaiseStaffDelete(ExpenseAccountInfo info)if (OnStaffDelete != null)OnStaffDelete(null, info);public void RaisePMSubmitMin(ExpenseAccountInfo info)if (OnPMSubmitMin != null)OnPMSubmitMin(null, info);public void RaisePMSubmitMax(ExpenseAccountInfo info)if (OnPMSubmitMax != null)OnPMSubmitMax(null, info);public void RaisePMReject(ExpenseAccountInfo info)if (OnPMReject != null)OnPMReject(null, info);public void RaiseVPSubmit(ExpenseAccountInfo info)if (OnVPSubmit != null)OnVPSubmit(null, info);public void RaiseVPReject(ExpenseAccountInfo info)if (OnVPReject != null)OnVPReject(null, info);public void RaiseFinanceSubmit(ExpenseAccountInfo info)if (OnFinanceSubmit != null)OnFinanceSubmit(null, info); 复制代码9:把工作流加入到中:具体方法见代码,相关方法应用可参考MSDN。BllExpense Bll;static WorkflowRuntime runtime;/运行时static WorkflowInstance instance;/实例static ExternalDataExchangeService service;/外部数据交换服务static WorkflowPersistenceService perService;/持久化服务static BLL_Approve project;/实现接口类protected void Page_Load(object sender, EventArgs e)Bll = new BllExpense();if (!IsPostBack)runtime = new WorkflowRuntime();service = new ExternalDataExchangeService();project = new BLL_Approve();perService = new SqlWorkflowPersistenceService(ConfigurationManager.ConnectionStringsperstr.ConnectionString);if (runtime.GetService(service.GetType() = null)/服务不能重复加入runtime.AddService(service);if (runtime.GetService(perService.GetType() = null)runtime.AddService(perService);if (service.GetService(project.GetType() = null)service.AddService(project);/将此类加入外部数据交换服务runtime.WorkflowIdled += OnWorkflowIdled;/工作流闲置事件runtime.StartRuntime();public void OnWorkflowIdled(object sender, WorkflowEventArgs e)e.WorkflowInstance.TryUnload();/将内存数据持久化到数据库中 复制代码10:用户提交数据启动工作流。/创建一个工作流实例instance = runtime.CreateWorkflow(typeof(ApproveWorkFlow.MyWorkFlow .Workflow1 );/启动工作流instance.St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市中考生物实验探究试题集
- 2025年电焊理论题库及答案
- 2025羊城地铁集团年度客流量增长特点居民通勤需求趋势分析及服务改善提案研究
- 2025纳米材料在新能源电池中的应用前景与专利分析报告
- 2025类脑芯片架构创新与边缘计算结合点
- 2025空间计算设备交互逻辑重构与行业应用痛点报告
- 园林绿化养护计划与执行指南
- 2025碳中和技术市场发展分析及政策导向与绿色金融支持研究报告
- 2025研究美国水资源管理服务行业市场现状供需分析及投资评估规划分析研究报告
- 2025研发设计行业市场深度挖掘及未来趋势分析与创新发展战略报告
- 2025年麻醉临床信息系统项目合作计划书
- 人工智能通识 课件 第五章 自然语言处理与大数据
- 围术期镇痛管理
- 2025浙江凯航物产有限公司招聘12人考试笔试备考试题及答案解析
- 广西华盛集团北海裕泰工艺有限责任公司招聘笔试题库2025
- 2025贵州毕节市公安局七星关分局面向社会招聘警务辅助人员280人考试笔试参考题库附答案解析
- 2027届普通高等学校招生全国统一考试青桐鸣大联考(高二)数学(人教版)
- 2025年公安基础知识考试题库及答案
- (2025)入团积极分子题库和答案(完整版)
- 2025-2030智慧渔业发展现状分析及未来趋势与产业化研究
- SMT工程师考试试题及答案
评论
0/150
提交评论