一套完整自定义工作流的实现_第1页
一套完整自定义工作流的实现_第2页
一套完整自定义工作流的实现_第3页
一套完整自定义工作流的实现_第4页
一套完整自定义工作流的实现_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一套完整自定义工作流的实现概述:本工作流以一套金融软件业务处理流程为例,实现功能包括:流程自定义、步骤自定义、步 骤重复次数、步骤类型(顺序/并行)、定义排序功能,完全使用数据库实现,本文将详细 分析业务流程、系统设计及实现细节。术语:工作流(Workflow)1 ,是对工作流程及其各操作步骤之间业务规则的抽象、概括、描 述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰 当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在 多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。工作流管理 系统(Workflow Man

2、agement System, WfMS)的主要功能是通过计算机技术的支持 去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。 工作流需要依靠工作流管理系统来实现。流程:工作流包含多个工作流程,处理时可任选一种流程进行处理,其包含步骤信息;步骤:流程中每一环节的名称,某一流程将包含多个步骤(其他工作流中也称为节点)。正文:第一部分、业务逻辑分析1、自定义工作流是指工作流各个环节及其参数完全自定义,常用于公文处理、业务流程签 批处理等。本系统来源于本人参与开发的一套金融管理软件,业务处理人分不同角色拥有不 同权限进行业务处理,将贷款数据库从贷款调查一直到贷款签批的

3、完整流程。其中由于软件 功能要求,需要将贷款调查固定置为第一步骤,将贷款签批置为最后一步骤。其中数字表示当前步骤重复次数。2、用户业务处理部分包括:1)、通过:当前步骤处理通过,(选择下一处理人)进入当前流程中下一步骤,若为末步骤,则流程完成;2)、退回:将步骤退回至上一步骤,即返回至上一处理人处,若为首步骤,则不可进行退回;3)、否决:将步骤直接结束,不可再进行操作,或者回退至第一步骤;本系统中采用第二种方式;4)、撤回:若当前步骤已处理,且在下一处理人未进行处理的情况下可进行撤回操作。否决退回3、顺序与并行顺序是指上一处理人指定某一处理人时,其他拥有此步骤权限的操作员不可进行查看和操作,

4、必须当前处理人处理完毕后,流程才能继续;并行是由上一处理人指定固定多个处理人时, 由任一员工处理即可,不分前后顺序,全部处理完成,进入下一步骤,此处理人数目由当前 步骤重复次数确定。两者之间对应关系如下。4)、流程处理明细表:L_tranct_proc(proc_id,loan_id,step_id,step_action,step_emp_id)(其中 loan_id 为数据主表主键,step_id 关联 S_action_info, step_action存储处理结果:0-不通过,1-通过,2-退回,3-否决,4-撤回,step_emp_id为当前处理员工编号)流程信息表流程一步骤对应表步

5、骤信息表其中流程表、步骤表、流程步骤关系表为核心数据表,它们三者确定工作流的完全自定义。流程处理明细表为重要数据表,查询数据主要通过此表进行连接查询。流程处理明细表其他相关表包括:1)、数据主表 L_loan_info(loan_id,loan_name,flow_id,step_id,.)(flow_id 为流程编号,step_id 关联 S_action_info)2)、操作员工表 E_emp_info(emp_id,emp_name,.)3)、角色信息表 E_role_info(role_id,role_name)4)、员工-角色关系表 E_emp_role(emp_role_id,em

6、p_id,role_id)(关联角色表与员工表)5)、步骤角色关系表 S_action_role(action_role_id,action_id,role_id)(关联角色表与步骤表)6)、下一处理人表L_loan_next_emp(loan_next_emp_id,loan_id,next_emp_id,step_id)(其中 next_emp_id 关联操作员工表 E_emp_info,step_id 关联 S_action_info)其中数据流向如下:1)业务最开始发生时,数据主表L_loan_info插入数据,其step_id为其所在流程的第 一个步骤的编号,可根据下一步骤的重复次数

7、来去将下一处理人的操作员编号插入到下一处 理人表L_loan_next_emp中;插入流程处理明细表中数据,step_id为当前步骤编号; 更新主表L_loan_info的step_id为下一步骤编号;2)流程进入下一步骤;3)下一处理人可查看当前待处理数据(以及本环节待处理数据),选定进行处理,将处理 结果(0:不通过,1:通过,2:退回,3:否决)插入到流程处理明细表中,若为通过由更新主表L_loan_info的step_id为下一步骤编号,退回更新为上一步骤编号,否决则更 新到第一个步骤编号;4)在本人已处理数据中可查看已处理过的数据,若下一步骤中操作员还没有进行操作,则 可对数据操作进

8、行撤回,撤回时将处理结果(4:撤回)插入到流程处理明细表中,其中的 next_emp_id为本人操作员工编号);更新主表L_loan_info的step_id为流程的第一 步骤的编号;5)下一处理人继续3)、4)的循环,直至流程的结束;6)流程最后一个步骤,将处理结果中step_id值为0插入至流程处理明细中。第三部分、实现细节1、第一步骤中获得数据列表代码如下:1SELECT * FROM L_loan_info WHERE step_id=step_id其中step_id使用代码得到当前数据的第一步骤编号2、第一步骤获得已处理数据列表代码:1SELECT * FROM L_loan_inf

9、o WHERE loan_id IN (SELECT DISTINCT loan_id FROM l_tranct_proc WHERE step_id=step_id)3、获得任一步骤数据列表(含未处理和已处理)View Code?12/ /方法:获得审批(或签批)数据列表/ 开发: 王洪剑 HYPERLINK /walkingp /walkingp HYPERLINK / / 时间:2010-6-29/最后修改时间:2010-6-29/修改详情:/ / 签批人(默认为当前操作员):0、本环节其他、当前处理人/ 步骤 / 操作值:0:待审批/签批 1:已审批/签批_ :所有/ 版本:3.0/

10、 public List GetModelByProcess(intstep_emp_id, int action_id, stringstep_action, int version)(#regionstring sql = SELECT COUNT(*) FROM s_flow_info WHEREdel_sign=1 and flow_id in(selectflow_id from s_step_info where action_id=action_id);34567891011121314151617181920212223242526SqlParameter口 para =( n

11、ew SqlParameter(action_id, SqlDbType.Int, 4) ;272829303132333435363738394041424344454647484950int count = int.Parse(DbHelperSQL.GetSingle(sql, para).ToString();string口 arrFlowId = new stringcount;/流程信息sql = SELECT flow_id FROM s_flow_info WHERE del_sign=1 andflow_id in(select flow_id froms_step_info

12、 where action_id=action_id);DataTable dt = DbHelperSQL.Query(sql, para).Tables0;for (int i = 0; i count; i+) ( arrFlowIdi = dt.Rowsiflow_id.ToString(); string pre_action_id = new stringcount;/当前流程中上一 流程idstring next_action_id = new stringcount;/当前流程中下 一流程idfor (int i = 0; i count; i+)(sql = SELECT T

13、OP 1 action_id FROM s_step_info WHERE step_order_no(SELECT order_no FROM S_action_info WHERE action_id=action_id) ANDflow_id= + arrFlowIdi + ORDER BY s_step_info.step_order_no DESC;SqlParameter口 paras =( new SqlParameter(action_id, SqlDbType.Int, 4) ;515253545556575859606162636465666768697071727374p

14、aras0.Value = action_id;dt.Clear();dt = DbHelperSQL.Query(sql, paras).Tables0;if (dt.Rows.Count 0)pre_action_idi = dt.Rows00.ToString();sql = SELECT TOP 1 action_id FROM s_step_info,l_loan_infoWHEREstep_order_no(SELECT order_no FROMS_action_info WHERE action_id=action_id) AND s_step_info.flow_id=+ a

15、rrFlowIdi + ORDER BYs_step_info.step_order_no”;SqlParameter口 paras_ =(new SqlParameter(action_id,SqlDbType.Int,4);paras_0.Value = action_id;dt.Clear();dt = DbHelperSQL.Query(sql, paras).Tables0;if (dt.Rows.Count 0)next_action_idi = dt.Rows00.ToString();DataSet ds = new DataSet();for (int k = 0; k co

16、unt; k+)(StringBuilder sbTmp = new StringBuilder();if (!string.IsNullOrEmpty(pre_action_idk)757677787980818283848586878889909192939495969798sbTmp.Append(step_id=+ pre_action_idk + ANDstep_action=1);if (!string.IsNullOrEmpty(pre_action_idk)& !string.IsNullOrEmpty(next_action_idk)sbTmp.Append( OR );if

17、 (!string.IsNullOrEmpty(next_action_idk)sbTmp.Append(step_id=+ next_action_idk + ANDstep_action=2);string strTemp = 1=1;if (!string.IsNullOrEmpty(sbTmp.ToString()strTemp += AND + sbTmp.ToString();sql = SELECT * FROM l_loan_info WHERE ;sql += 1=1;if (step_action = 1)/已审批(签批)(sql += AND loan_id IN (SE

18、LECT loan_id FROM l_tranct_procWHEREstep_id=action_id AND step_action=1;if (step_emp_id = 0)sql +=);elsesql += AND step_emp_id=step_emp_id); else if (step_action = 0)/待审批(签批)99100101102103104105106107108109110111112113114115116117118119120121122(sql += AND step_id=action_id AND loan_id IN (SELECT lo

19、an_id FROM l_tranct_proc WHERE +strTemp + );if (step_emp_id = 0)sql += ;elsesql += AND loan_id IN (select loan_id froml_loan_next_empwherenext_emp_id=step_emp_id);else if (step_action = )/所有(sql += AND loan_id IN (SELECT loan_id FROM l_tranct_procWHERE step_id=action_id ANDstep_action=1;if (step_emp

20、_id = 0)sql += 广;elsesql += AND step_emp_id=step_emp_id);/ 已审批(签批)sql += UNION ;sql += AND step_id=action_id AND loan_id IN (SELECT loan_id FROM l_tranct_proc WHERE + strTemp + );if (step_emp_id = 0)123124125126127128129sql += ;elsesql += AND loan_id IN (select loan_id froml_loan_next_empwherenext_e

21、mp_id=step_emp_id);/待审批(签批)sql += ORDER BY loan_id DESC;SqlParameter口 parameters =(new SqlParameter(step_emp_id,SqlDbType.Int,4),new SqlParameter(action_id,SqlDbType.Int,4);parameters0.Value = step_emp_id;parameters1.Value = action_id;if (ds.Tables.Count = 0)ds = DbHelperSQL.Query(sql, parameters);e

22、lse(ds.Merge(DbHelperSQL.Query(sql, parameters), true,MissingSchemaAction.AddWithKey);dt = ds.Tables0;/*去除重复*/DataView dv = new DataView(dt);string strCol =( loan_id ;dt = dv.ToTable(true, strCol);Hope.Model.L_loan_info model;List modelList = newList();if (dt.Rows.Count 0)( #regionfor (int i = 0; i

23、1工作流配置Sfi号厂1周查蛊批疏程调查完成后亘接进&签批流程E周直-业努聿萱塞批流程调查后业会曰直,激人签批流程r3周查-史蓉聿登孜险亩登斐卅流程调查后进行业务审查-凤险审查进入签北流程r4周查-业答审查-可险审查狙蓉审查空先流程调查后进行业蓉审查-风险审查也客审查,进a筌r5贷审会流程调查复秋命门审孝3彼贷军尝前提落实落.添加流程选定修改选走删除茶说流程不可册际削E栏卜特.顷专残选挥;阿晚调查正以数1T进坯力.式侦序处理抖序号厂径豆昼匿主氢注数厂队章王寻数必在方丈岐厅处理二排序号1g弑II序卅理T猝序号2厂咂B杏圭*数Eg堂玷泌厂耕办砂圭数厂刍甬H.申当聿s沃歌迁珏方式1质片处坦工n疗021/it理方式姓丑方式1版

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论