工作流
零、工作流相关概念
1、工作流(Workflow)
工作流是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。
工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个*参与者*之间,利用计算机,按某种预定规则*自动传递*文档、信息或者任务。
工作流管理系统(Workflow Management System, WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。
————来自维基百科。
工作流最大的好处是 系统自动流转。拿上面的文档管理系统来说系统可以自动按照设定的步骤流转,如果系统可以处理的,自动处理掉,如果系统不可以处理那用某种方式通知需要处理的人,让人介入,而不需要人主动去关注现在应该做哪个步骤。
2、BPMN(Business Process Model and Notation)
业务流程模型注解(Business Process Modeling Notation - BPMN)是 业务流程模型的一种标准图形注解。这个标准 是由对象管理组(Object Management Group - OMG)维护的。
基本上,BPMN规范定义了任务看起来怎样的,哪些结构可以 与其他进行连接,等等。这就意味着意思不会被误解。
推荐阅读:BPMN 2.0
一、术语和名词
工作流引擎:抽象的业务流程设计模型,负责业务流程的定义,解释和运转。
工作流模版:用工作流引擎的基本概念和路由过程表示出一个业务办理过程,这个过程通常是用xml格式的文件来记录的,这个xml文件,就是工作流模版,也可以说是流程模版。
工作流名称:就是工作流模版文件的名称。也可以叫流程名称。
工作流版本:工作流模版的版本,也可以叫流程版本。在工作流系统中,对工作流模版有个版本管理,新建一个工作流模版时候,它的工作流模版是.1
。当再次做修改的时候,可以选择创建新的版本,如.2
。
因为一旦业务流程模版投入使用了,有了运行的流程实例了,再次对业务流程做的修改,就需要更新到新的版本中,原来的流程版本还需要存在,原来的流程定义信息,按版本仍然能查询到。新的修改在新的版本中。
流程名称+流程版本 是唯一标识一个业务流程的。
工作流建模:利用流程设计器将业务处理过程用工作流的节点方式表示出来,就是工作流建模,也可以说是流程建模。
工作流节点:是工作流引擎的设计基本节点,一个节点表示一个业务处理过程,在流程设计器中,会有相应的表示方式。
流程实例:按照工作流模版定义的处理过程启动运行的业务处理过程,即流程实例。利用建立好的业务流程模版,可以多次启动流程实例,一个流程实例即一个业务处理过程。如请假审批的流程,张三填写他的请假单,启动一个审批流程实例。李四也填写一个自己的清单单,也是启动了一条流程实例。
流程实例id:每条启动的流程实例,在工作流引擎中,都会对应一个流程实例id,来唯一标识这条流程实例。
轨迹id: 轨迹id通常是指流程节点的运行轨迹id,当一个节点在流程实例中被反复运行的时候(如循环路由,自由流),每次到达这个节点的时候,都会产生一个轨迹 id,trace_id, 唯一标识这次的运行轨迹。
业务数据: 流程中每个节点上处理的业务记录等。通常流程数据和业务数据是有关联的。
流程设计器:利用工作流引擎的设计基本节点和概念给业务流程建模的可视化编辑工具,就是流程设计器。
当前步骤:流程实例未结束前,正运行到的当前节点,为当前步骤。
历史步骤:流程实例运行完成的节点,都认为是历史步骤。
流程实例运行轨迹:每条流程实例在工作流模版的节点上运行的轨迹。
流程实例监控:监控每个流程实例在各个节点的运行情况。
任务:每条流程实例在运行到流程的各个节点时,会产生一些待执行的任务信息。有任务名称,描述,和参与人,完成人等任务的基本信息。通过任务链接到待处理的业务过程。
任务参与人:任务信息的参与人,能够查看到任务的相关人。
任务执行人:可执行任务的操作人。
任务工单:任务派发下来的工单。
串行路由:业务建模中,节点按顺序一个一个的往后串联的方式。
并行路由:业务建模中,节点并行的方式往后链接。
条件路由:业务建模中,按设置的条件为真,链接一个路由方式,条件为false,往后链接一个路由方式。在流程实例运行时,只会执行一条路由,即条件要么=true,要么=false.
分支:业务建模中,平行分支的节点路由方式。
合并:业务建模中,将平行分支的节点路由再合并起来的路由方式。
子流程:为一个独立的业务流程,嵌入到主流程中。
循环路由:在节点间或同一个节点上循环执行的路由方式。
自由流:流程实例不按照流程模版中预定义好的节点顺序往下执行,而是可以自由的跳转。
回退流:流程实例不按照流程模版中预定义好的节点顺序往下执行,而是回退到曾经运行过的任意节点上。
业务补偿类:在流程发生自由跳转的时候,需要辅助执行一些业务处理过程来对业务数据进行修改。
二、设计工作流
传统的工作流程来说大致可以分为这样几种情况:
自由/半自由流程、固定流程、分支流程、并发流程与执行、并发流程或执行;
自由流程指的是从生产者到处理者每一个流程节点都可以由上个节点的操作者指定角色,
半自由流程指的是指定角色的时候限定一定的范围。
固定流程指的是流程是所有的流程即角色都是固定好的,不能修改。
这种情况的优点和缺点都极度的明显:优点即操作简单,逻辑简单,开发难度小。缺点为实用性较小,较为死板,不够灵活。
分支流程指的是当流程满足某一个跳转条件时即进行流程的跳转执行子流程,当流程执行完毕后再跳回到主流程进行接下来的流程操作。比如某次采购单的采购,当采购金额小于100万时需要采购经理即可进行审批,当大于100万时需要副总级别的人物进行审批后才可以进行。
并发流程与执行指的是多个流程共同执行,所有流角色程都执行完毕后才流转到下一个节点,比如某次项目的开始需要招商部,企划部,工程部共同完成。只有当这些角色都审批完成了才能开始。并发流程或执行指的是多个流程共同开始,只要有一个角色进行审批了,则流转到下一个节点。在此不做赘述。在一般涉及到工作流的后台中,这几种情况大致就可以满足。
以上可以称之为标准工作流,即后台给予固定的模板,相关配置人员进行配置即可。但是,在有些复杂的后台系统中,可能是以上几种情况共同出现的,也可能是出现了其他情况,这个时候,就需要整体流程定制化的操作。那么,要设计一个非标准工作流,首先是分清上文提到的角色、内容、流程之间的关系——即角色与内容是挂在流程节点上的功能点。所以我们只需要将流程节点控制好,再将不同的角色,以及对应的操作内容挂靠上去即可,这样一来是可以方便理清关系,另外也可以使系统更有层次。
所以接下来我们只需要将流程节点控制好即可。
推荐阅读:工作流设计剖析
自定义流程参考:
工作流系统的设计——作者来自亚马逊,现就职于Oracle
三、现有引擎
名称 | 当前版本 | 可用的流程定义语言 | 框架 | 网站 | 特点 |
---|---|---|---|---|---|
Activiti | 6.0.0 | BPMN 2.0 | Java | Activiti Official Website | 操作简单倾向于人为参与的task,例如填写表单之类的。但是Activitie支持的应用程序服务器有限。 |
jBPM | 6.5.0 | BPMN 2.0 | Java EE | jBPM Official Website | 基于WebService - HumanTask标准来描述人工任务和管理生命周期 |
flowable | 6.2.0 | BPMN 2.0 | Java | flowable official Website | 1、异步处理历史数据。2、回退功能,运行通过API方式,让工作流当前状态回滚到之前的状态。etc. |
Bonita | 7.6 | BPMN 2.0 | Java | Bonitasoft Official Website | 免费版功能有限 |
Camunda BPM | 7.8.0 | BPMN 2.0, CMMN 1.1, DMN 1.1 | Java | Camunda Official Website | 1、提供更多在业务流程中对事物边界的控制,用来更好的支持自动化的批量工作流程(dark processing)2、支持很多类型的应用程序服务器。 |
Fixflow | 5.2(4年前) | BPMN 2.0 | Java | Fixflow | 方正自主研发的开源BPM流程引擎 |
ActiveVOS | 9.2.2 | BPMN 2.0, WS-BPEL 2.0 | Java EE | ActiveVOS Official Website | |
AgilePoint iBPMS | 6 | BPMN 2.0 | AgilePoint Official Website | ||
AtosBPM | 5 | BPMN 2.0 | Java | AtosBPM Official Website | |
AuraPortal Helium | BPMN 2.0 | AuraPortal Helium Official Website | |||
Beanflow | 维护至2008 | Java | BeanFlow | BeanFlow是一个用于创建工作流的轻量级java类库,它使用bean来组织、协调事件。你可以把BeanFlow想像成是BPEL的一种简单选择,在其工作流上的所有说明定义和实现都是采用java代码来代替XML描述。 | |
Bizagi BPM Suite | 11 | BPMN 2.0 | Java EE and .NET | Bizagi Official Website | |
Bpmn | 0.2.0 | BPMN 2.0 | Js on top of Node.js | Bpmn Official Website | |
BPMN Modeler (for Confluence) | 1.0.8 | BPMN 2.0, CMMN 1.1, DMN 1.1 | Java / Javascript | viadee Official Website | |
Catify BPMN Engine | 1.1 | BPMN 2.0 | Java | Catify Official Website | |
edoras one | 1.6.11 | BPMN 2.0 | Java | edorasware official Website | |
Fabasoft Folio | Spring, 2014 | BPMN 2.0 | Fabasoft Folio Official Website | ||
FireStart BPM Suite | 4 | BPMN 2.0 | .NET | FireStart Official Website | |
GLDNHRN | 2.35 | BPMN 2.0 | .NET, Javascript | GLDNHRN Official Website | |
IBM Business Process Manager | 8.5 | BPMN 2.0, WS-BPEL 2.0 | IBM Business Process Manager Official Website | ||
Imixs-Workflow | 3.3.0 | BPMN 2.0 | Java EE | Imixs Official Website | |
inubit BPM | 7.2 | BPMN 2.0 | Java | Bosch Business Process Management Official Website | |
MyProcess BPM | 2.3.0.2 | BPMN 2.0 | .NET, ASP.NET | MyData Official Website | |
Omni Workflow | 1.1.1 | BPMN 2.0 | PHP | Workflow OmniBuilder Official Website | |
Oracle BPM | 12c | BPMN 2.0, WS-BPEL 2.0 | Java | Oracle BPM Official Website | |
Orchestra | 4.9.0 | BPMN 2.0,WS-BPEL 2.0 | Apache Axis, Apache CXF, OSGi, Java EE | Orchestra Official Website | |
ProcessMaker Workflow Management Software | 3.2.1 | BPMN 2.0 | php | ProcessMaker Workflow Management Software Official Website | |
SAP Business Process Management | 7.4 | BPMN 2.0 | Java EE | SAP BPM Official Website | |
Signavio Workflow Accelerator | 3.42 | BPMN 2.0 | Java on Cloud | Signavio Workflow Accelerator Official Website | |
Stardust | 2 | BPMN 2.0 | Java | Stardust Official Website | |
Sydle SEED | 10.04 | BPMN 2.0 | Java on Cloud | Sydle Official Website | |
TIM | 5.3 | BPMN 2.0 | Java | TIM Official Website | |
Viewflow | 0.12.2 | 部分BPMN 2.0 | Python | Official Website | demo |
W4 BPMN+ | 9 | BPMN 2.0 | Java | W4 BPMN+ Official Website | |
WebMethods Business Process Management Platform | 9.6 | BPMN 2.0 | Java | WebMethods Official Website | |
Workflow Engine | 2.2 | BPMN 2.0 | Java, .NET, .NET Core | Workflow Engine Official Website | demo |
Workflower | 1.4.0 | BPMN 2.0 | PHP | Workflower Github | |
XML Frames | 1.6.7 | 部分 BPMN 2.0 | Lazarus Free Pascal | Official Website |
四、推荐引擎对比
根据简单筛选,国内使用jBPM和Activiti居多,Flowable5为Activiti员工fork出来的,和Activiti5基本一致,故对比这三个 。
名称 | jBPM | Activiti | Flowable |
---|---|---|---|
当前版本 | 6.5.0 | 6.0.0 | 6.2.0 |
可用的流程定义语言 | BPMN 2.0 | BPMN 2.0 | BPMN 2.0 |
框架 | Java EE | Java | Java |
网站 | jBPM Official Website | Activiti Official Website | flowable official Website |
事务管理 | Bitronix,基于JTA事务管理 | Mybatis机制/Spring事务机制 | |
详细介绍 | jBPM5使用http://jBoss.org社区的大多数组件,以Drools Flow为核心组件作为流程引擎的核心构成,以hibernate作为数据持久化ORM实现,采用基于JPA/JTA的可插拔的持久化和事务控制规范,使用Guvnor作为流程管理仓库,能够与Seam、Spring、OSGi等集成。 | Activiti5使用Spring进行引擎配置以及各个Bean的管理,综合使用IoC和AOP技术,使用CXF作为Web Services实现的基础,使用MyBatis进行底层数据库ORM的管理,预先提供Bundle化包能较容易的与OSGi进行集成,通过与Mule ESB的集成和对外部服务(Web Service、RESTful等)的接口可以构建全面的SOA应用 | flowable5与activiti5的差异不太大,API大部分只是包名不同。维护频率高,添加了部分新特性。Activiti引入抽象数据层 |
优点 | 基于WebService - HumanTask标准来描述人工任务和管理生命周期。jPBM6数据库基于Git/表单设计/数据可视化 | 操作简单原生Spring支持倾向于人为参与的task,例如填写表单之类的。最为安全可靠 | 1、异步处理历史数据。2、回退功能,运行通过API方式,让工作流当前状态回滚到之前的状态。3、增加和拓展对事件子流程的支持4、提高对事件监听器事务生命周期的支持5、新增全局Counter功能 |
缺点 | 回退需要自行实现 | ||
web应用程序 | KIE Workbench | Activiti App | Flowable Designer(需要 Eclipse Mars或Neon |
IDEA插件 | 无 | actiBPM(3年未更新) | 无 |
要求 | JDK 6+&&Ant 1.7+ | JDK7+ | JDK8+ |
学习要求 | 比较复杂、网上学习资料多为jPBM5 | 较简单,学习曲线较低 | 类似Activiti,学习资料较少 |
推荐学习资料 | 暂无 | 暂无 | http://www.shareniu.com/category/236.htm |
使用人数 | 多 | 多 | 少 |
历史 | 在创建者Tom Baeyens离开JBoss后,下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过 | 2010年JBPM的主创人员Tom离开了Jboss并加入了Alfresco公司发布了Activiti5.0 | 2016年10月Activiti原班主创人员从Activiti分离出来的一套工作流引擎 |
综合考虑下来,
Flowable虽基本和Activiti一致,但是学习资料缺乏、使用人数少,故不推荐。
延伸阅读:关于中国式驳回:F2BPM中关于工作流引擎驳回设计
五、Activiti使用
官方网站:
Activiti 5.16 用户手册:中文版的用户手册,基本按照流程来能实现搭建
Activiti User Guide:Activiti6.0.0的英文版用户手册,可参照中文版来。5.x中的ActivitiExplorer在6.0.0中改为ActivitiApp文件,此处需要注意。
Quick Start Guide:6.0的快速开始,学习价值不高,做下来也没怎么了解其中的原理。
附上activiti自建的表说明:
Activiti6工作流总共包含28张数据表,所有的表名默认以“ACT_”开头,并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配。
· ACTGE* : “GE”代表“General”(通用),用在各种情况下;
· ACTHI* : “HI”代表“History”(历史),这些表中保存的都是历史数据,比如执行过的流程实例、变量、任务,等等。
· ACTID* : “ID”代表“Identity”(身份),这些表中保存的都是身份信息,如用户和组以及两者之间的关系。如果Activiti被集成在某一系统当中的话,这些表可以不用,可以直接使用现有系统中的用户或组信息;
· ACTRE* : “RE”代表“Repository”(仓库),这些表中保存一些‘静态’信息,如流程定义和流程资源(如图片、规则等);
· ACTRU* : “RU”代表“Runtime”(运行时),这些表中保存一些流程实例、用户任务、变量等的运行时数据。Activiti只保存流程实例在执行过程中的运行时数据,并且当流程结束后会立即移除这些数据,这是为了保证运行时表尽量的小并运行的足够快;
参考资料:
六、附
在搜索Activiti的IDEA插件的时候发现了一款国人开发的插件叫做Yaoqiang BPMN Editor
,评价优秀,但是其Licensing中限制商用,故不再做深入研究。
附:
Licensing
Yaoqiang BPMN Editor is published under the GNU General Public License version 3.0 (GPLv3) for inclusion in programs published under a compatible open-source license. If you want to use Yaoqiang BPMN Editor in commercial, then you should purchase a commercial license. To buy a commercial license of version 3, please contact: shi_yaoqiang@yahoo.com