当前位置:编程学习 > C#/ASP.NET >>

工作流系统是什么样子?

  发这个帖子的目的是借助一个工作流系统,来介绍什么是工作流,首先介绍工作流的一些基本概念,帮助大家来认识工作流;其次结合一个实际的工作流系统让大家有一个感性的认识,并通过该例子告诉大家,工作流只是一个概念或者叫思想,千万不要千篇一律,也不要非得符合什么标准,工作流的这种思想是用来解决实际工作需求的,只要能解决你的工作需求,没必要符合某些标准,现在与工作流先关的一些技术已经发生了很大的演变,应用到各个领域,例如OA,协同办公,生成排程,这既是工作流的思想,也可说是工作流的原理,请大家记住无论是java的工作流,还是微软的wwf,还是其他工作流厂商开发的系统,都必须符合这个原理,不同的是,实现方法不同,一定要记住只是实现方法不同。
 希望能和大家一起交流,我的QQ:14906007,msn:legweifang@hotmail.com --------------------编程问答-------------------- 工作流系统功能介绍 


应用篇的视频介绍下载地址:http://www.china2china.com/workflow/bak/workflowyingyongpian.rar
开发篇的视频介绍下载地址:http://www.china2china.com/workflow/bak/workflowkaifapian.rar
试用地址,使用前请先看试用说明:http://www.china2china.com/workflow

1 概述
   随着计算机软件应用的普及,信息化系统发挥的作用也越来越大,企业信息化建设的不断深入,对系统功能和自动化程度要求越来越高。客户要求系统功能与实际的工作情景紧密结合,对每个业务环节的控制要求越来越精确。如何让我们的信息化系统更加贴近客户需求,满足客户不断变化的业务流程成了我们软件开发商不得不面对的问题。

   信息化建设初期我们的信息化系统担当的是记录信息、查询信息、统计信息的功能,孤立的管理信息,各功能之间缺少联系,也无法做到各环节的精确控制,很多情况只能靠人为判断来完成。随着信息化程度的加深,这些功能远远不够。我们实际工作中的每一个环节并不是孤立的,每个环节前后都有千丝万缕的联系,要记录这些环节,做到精确控制,所以我们引入了工作流的概念,推出了工作流系统,

   对于工作流系统,市面上这样的东西很多,但觉得都不是很理想,这套系统算是我对这几年从事工作流研究的总结,我会不断完善这个系统。系统包括三部分:1建模工具,2流程引擎,3业务平台。我只详细实现了建模工具和流程引擎,业务平台只作了一个简单的测试系统,可以在此基础上扩展,来做一个完整的业务平台。

  先介绍一下我的设计初衷:

  首先,流程引擎和业务数据是独立的,两者没有必然联系(但是流程引擎可以访问业务数据), 这样设计的好处是引擎可以跟任何已有的系统整合,比如已经有一个进销存系统,现在要加入工作流对单据进行流程控制,只需要调用引擎提供的接口函数就可以,实现流程的启动,流转,查看,结束。

  其次,流程引擎是封闭的,对用户来说是透明的,用户也不需要知道内部是怎么工作的,只需要了解如何通过建模工具配置流程模板就可以,业务平台是可以任意扩展的,通过开发任意多的用户控件,业务平台只要动态加载这些业务控件就可以。

  最后,建模工具采用cs(winform)的方式设计,是从操作的灵活性考虑的,bs结构的系统操作上确实不灵活,速度也慢,再加上建模工具使用的人员有限,也没必要开发bs结构的。业务平台则不然,尽量使用bs结构设计,现在大部分系统是通过bs来实现的。

 

 在介绍流程系统之前先介绍几个与工作流有关的概念,这些概念有利于我们掌握工作流原理,每个人的理解不一样,可能不太准确。

工作流:把工作中的各个业务环节连接起来,让任务按照制定的方向流转,这就是工作流,实现这样功能的系统就叫工作流系统。 
任务:工作流中的每一个工作环节叫做任务,每个任务在流程图中以节点的方式展现,也叫任务节点。 
模版:一个固定的被其他对象参照的数据,在oop思想中,与类的定义相似,模版可以理解为一个类的声明,模板是为了区分实例来讲的,例如流程模板,任务模板等。 
实例:一个参照模版创建的数据,在oop思想中,与类实例相似,实例可以理解为一个类的实例,实例是为了区分模板来讲的,例如流程实例,任务实例等。 
流程模板:用来描述业务流程的模板,以可视化的图形的形式展现,流程模板定义了工作流的任务节点、流向、交互信息(例如业务表单)和流转条件等信息。 
流程实例:依附于流程模板运行的一个实例,表示一个实实在在的工作过程,所以的流程实例都是通过流程模板的启动节点启动的。 
任务模板:流程模板上的任务节点叫任务模板。 
任务实例:在流程实例中,由任务模板产生的实例就叫任务实例。 
处理实例:任务实例是用来与用户交互的,每当用户登录系统来完成一个任务实例的处理,都产生一个处理实例,来记录此次对任务的处理情况。一个任务实例可能经过指派、回退等多次处理,每一次处理即一个处理实例。一个处理实例是由一个任务实例和一个处理者(对应具体的处理人)实例组成的。 
处理者:是指可以处理任务的一个类型,它指的是一组的集合,为了区分处理人而定义,例如部门、组织机构、岗位、角色或个人,在流程模板中为每个任务节点配置处理者。 
处理人:是指可以处理任务的具体的个人它指的是一个人,一般指用户工号或者账户。 
处理者实例:处理任务实例的处理者,统称为处理者实例。一个任务实例有一个或者多个处理者实例与之对应。处理者实例就是真正要处理任务的人的集合。 
流程数据:指流程按照流程模板流转时由引擎产生的数据,例如流程实例、任务实例、处理者实例都统称为流程数据。 
业务数据:指与用户交互时产生的数据,这部分数据与具体的业务相关,例如一个销售单,业务数据在流程图上流转从而实现日常工作。业务数据与流程数据无关,没有流程数据业务数据可以独立存在。
--------------------编程问答-------------------- 流程系统设计总图

2 建模工具
    建模工具使用vs2005 C#语言开发,,采用Winform的方式,做到数据层,业务层,界面层的独立,业务层的代码可以毫无修改的应用到web方式上,这也是充分考虑使用的灵活性。通过建模工具可以:管理组织机构,管理流程模板,管理系统权限。数据库使用sqlserver2000。

  主要功能:

2.1 组织机构管理

    组织机构也叫部门,任何一个公司企业都是按部门划分,可以建立无限级部门。
员工也可以叫用户,每个用户属于一个部门,每个人必须有一个岗位。

   由于每个企业组织机构的差异,在设计组织机构的时候尽量与业务无关,采用“公司(分公司)-〉部门(办事处)-〉下属部门”的机构组织方式,目前所有的公司都这么划分,所以这种方式适合99%的需求,与公司业务有关的信息采用“岗位-〉岗位级别”的组织方式,也就是在每个部门中设定不同的岗位,以岗位来描述业务,在部门下可以设定任意多的岗位,每个岗位都有一个级别,通过岗位级别来确定本部门的主管领导和上下级关系。

  任务节点配置处理者时,可以从该模块中选取组织机构和岗位。见任务节点配置章节。

2.1.1 主界面
--------------------编程问答-------------------- 2.1.2岗位管理界面

图表 2岗位管理界面 --------------------编程问答-------------------- 应该是花了时间的。。。 --------------------编程问答-------------------- 2.3流程管理
   流程模板也可以叫流程模型,采用分类管理的方式,可以无限级分类,流程模板必须属于某一分类,流程图 采用可视化的制作,可以通过拖拽图形的方式画流程图,图形化的操作一目了然。
2.3.1 流程管理主界面

图表 10流程管理主界面

2.3.2 启动节点配置界面
   交互节点的配置与启动节点类似,这里只展示启动节点的界面。

图表 11启动节点配置界面

图表 12启动节点处理者界面

图表 13任务节点变量管理界面

2.3.3处理者配置界面


图表 14选择处理者界面

2.3.4       流转条件配置界面
   该界面使用了前面定义的任务变量,用来判断合同金额。

图表 15连线配置界面
2.3.5控制节点配置界面

图表 16控制节点配置界面

2.3.6子流程节点配置界面

图表 17子流程节点配置界面

2.4 表单管理
   表单是业务的展现形式,根据业务平台设计,表单采用用户控件usercontrol来设计,表单有两种形式,主表单和子表单,主表单是由子表单组成的,一个主表单可以包含多个字表单,每个子表单就是一个UserControl,任务节点中的交互节点可以挂接一个主表单,业务平台可以动态加载主表单里的UserControl。
2.4.1       表单管理主界面


2.4.2       选择用户控件界面


 
3工作流引擎
  设计非常灵活的引擎,满足任意复杂的业务需求,使最终用户通过修改流程图,配置业务表单来完成流程再造,不需要修改程序代码,流程引擎能按照新的模板流转。流程引擎设置6种类型的任务节点,基本可以完成任何情况的流传,例如,会签,审批,根据业务条件流转等,流程引擎独立设计,提供对外接口,可以与任意系统整合。
3.1基本功能
顺序流转
  像发邮件一样,工作流转到下一处理人,处理人像处理邮件一样查看任务和处理任务。

条件流转
    根据业务数据,满足不同条件流转到不同的处理人。例如采购金额大于等于10万的采购单需流转到总经理,小于10万的采购单需流转到分管经理。

任务回退
    在领导审批时不满意处理结果,需要退回前一任务处理人,让他重新处理后再提交。

任务会签
对某些工作需要多位领导都签字后才能执行的任务,设定该任务会签的领导,所涉及到的领导都审批后,该任务才能继续向下流转。

3.2 任务节点类型
  工作流模板是由连线和任务节点组成的,任务节点配置相关的信息供引擎使用,连线表示流转方向,连线上可以配置流转条件。

3.2.1 启动节点 
   一个流程可以有多个启动节点,这是与其它流程系统不同的,这样设计的目的是适应启动节点所挂接的表单不同,但后面的任务环节相同的业务流程。例如一个合同审批流程,包括2个合同:维保合同和代理合同,这两个合同启动节点不同但后面的审批环节相同,这种情况通过设置多个启动节点就可以避免创建两个流程。

见启动节点配置界面

3.2.2结束节点
   表示流程结束,该节点可以设置流程结束后执行的事件。

3.2.3 交互节点
   与用户交互的节点,该节点可以配置业务表单供用户操作。该节点还可以创建流程变量和任务变量,供流程引擎使用,变量是引擎与业务平台交互的途径。

交互节点的界面与启动节点类似,见启动节点配置界面

 

3.2.4 子流程节点
   通过配置该节点可以让主流程调用系统中已有的流程,这样可以使流程能够重用,减少工作量。

见子流程节点配置界面

3.2.5控制节点
   控制流程是否继续流转,控制节点有两种类型:and和or,任何节点后面都可以放置一个控制节点,and表示只有前面节点的实例全部完成才能继续流转,or表示只要前面节点的实例有一个通过就可以继续流转。使用控制节点我们就可以很好的处理会签等复杂的情况。

见控制节点配置界面

3.2.6 查看节点
  供用户查阅信息的交互节点,该节点可以配置业务表单,供用户查看,类似交互节点。

查看节点的界面与启动节点类似,见启动节点配置界面

 

4 业务平台
   业务平台是流程系统与用户交互的工作平台,所有的业务表单都通过平台展现,用户在该平台上处理日常业务(启动任务、处理任务、查看参与的任务,查看流程状态)。用户不必关心流程任何流转,只要处理好自己的业务表单即可,任务即会根据条件自动流转到下一个处理者。业务平台采用目前流行的B/S方式设计。这里只是简单的实现了一个业务平台,用户可以根据提供的接口自己开发业务平台。该业务平台的工作过程遵循以下规则:

一、系统登录,每个用户使用自己的帐号登录。

二、“我的任务”是用户已经处理和未处理的业务,用户必须首先从“未认领任务”中领取任务,领取后的任务会进入“已认领任务”中,已认领的任务才能被处理。

三、“启动任务”也叫启动流程,根据流程模板中的启动节点,来选择启动的流程,流程会根据启动节点来开始任务。

四、查看流程状态,可以在“我的任务中”,点“流程图”来查看流程路线图和已经走过的流程节点。

4.1 业务平台主界面


图表 18业务平台主界面

4.2 合同审批业务表单
   用户可以自由开发任意多的业务表单,为了测试业务平台制作了2个业务表单,界面有点丑陋,分别是TestUserControl.ascx和ViewUserControl.ascx,前者用于用户输入数据后者用户查看数据,分别与合同审批流程启动节点和交互节点绑定。点击左侧导航栏中的启动节点可以启动流程。

图表 19启动流程界面

4.3 未认领任务

图表 20未认领任务界面

4.4 已认领任务

图表 21已认领任务界面

4.5 已完成任务

图表 22已完成任务界面

4.6 查看流程图

彩色表示已经走过的流程节点,灰色表示未走过的流程节点,通过流程图可以清晰的看到流程所处位置和后面的路线。

图表 23查看流程图界面

--------------------编程问答-------------------- 谢谢楼主,让我看到了一个 很好的例子。 --------------------编程问答-------------------- 不错!以前项目里也用过类似的,就是总觉得用户的界面很难做得特别友好。 --------------------编程问答-------------------- 学习学习 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习 mark --------------------编程问答-------------------- 很好啊 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 如果工作流比较复杂,用 jbpm做可能会简单一点
不是很复杂的话就直接在数据库中下点功夫就可以了(添加一个状态字段标识是否执行完毕) --------------------编程问答-------------------- 初学,资料不好找,还好有前辈在这里指点,多谢了 --------------------编程问答-------------------- 呵呵,學習了 --------------------编程问答-------------------- 留名收藏 --------------------编程问答-------------------- ..... --------------------编程问答-------------------- 图片看不见啊- -
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,