什么是工作流

到底什么是工作流?

工作流最早起源于生产组织和办公自动化领域,它是针对平时工作中的业务流程活动而提出的一个概念,目的是根据将工作分解成定义良好的任务或角色,根据一定的原则和过程来实施这些任务并加以监控,从而达到提高效率、控制过程、提升客户服务、增强有效管理业务流程等目的。

为了更好地实现某些业务工作目标,可以利用计算机在很多个参与人之间按某种既定原则自动传递文档、信息内容或者任务。

因此,只要信息在人与人、人与系统或者系统与系统之间进行传递,就必须构建工作流

工作流类型有哪些

工作流是在整个工作区中发生的,有些是结构化的,有些是非结构化的。

当数据从一个任务转移到另一个任务时,工作流就存在了。

但是,如果数据没有流动,就没有工作流。

比如遛狗、去杂货店和取干洗衣物等,这都不是工作流,而是任务管理。

1. 流程工作流(Process Workflow)

当一组任务具有可预测性和重复性时,就会发生流程工作流。也就是说,在项目开始工作流之前,您已明确数据的流转方向。

比如采购申请批准工作流,一旦申请提交,每一步处理工作相对固定,工作流几乎不会有变化。

2. 项目工作流(Project Workflow)

项目具有类似于流程的结构化路径,但在此过程中可能具有更大的灵活性,项目工作流只适用于一个项目。

比如发布一个新版本的网站,你可以准确预测项目的任务流程,但是这个任务流程不适用于另一个网站的发布。

3.案例工作流(Case Workflow)

在案例工作流中,对于数据流转的方向是不明确的。只有收集到大量的数据时,数据流转的方向才会比较明显。

比如保险索赔,一开始并不知道如何处理,只有经过一番调查,才会明确。

什么情况下,需要使用工作流引擎?

通过前面的解释,我们对工作流以及工作流的类型有了基本的了解。

而题主提到的工作流引擎是业务流程管理系统的一部分,它为业务流程的管理系统提供了根据角色、分工和条件等不同决定信息的流转处理规则和路径。

工作流引擎包括流程的节点管理、流程分支流向管理等重要功能。

工作流自动化的好处

1. 消除冗余的任务提高效率

进行信息收集,可以舍弃使用Excel进行填写,并可以自动整理数据。

通过进行数据流转,可以舍弃使用电子邮件进行交流。

最后,通过轻流进行数据分析,可以舍弃手动创建数据报表。三个环节都可以消除冗余的任务,并提高效率。

2. 更高的可视化程度

强大的报表功能可以让你快速分析数据情况,清晰的跟进项目的实施情况。

3.明确各节点负责人的责任

无论采用哪种工作流类型,都可以将工作分配到每个节点负责人手里,而且每一步操作内容都可以通过流程日志进行查看,方便后期责任的确认和追踪。

工作流引擎

所谓工作流引擎,是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。

工作流引擎包括流程的节点管理、流向管理、流程样例管理等重要功能。

简介

开发一个优秀的软件系统,系统界面是最基础的部分,数据库之间的信息交换是必备条件,而根据业务需求开发出符合实际的程序逻辑,并在一定程度上保证其稳定性、易维护性才是根本。

稳定性自不必说,易维护性则要保证模块化和结构化,这样可以在业务流程发生变化,例如决策权的改变、组织结构的变动时产生的全新业务逻辑,而工作流引擎解决的就是这个问题。如果应用程序缺乏强大的逻辑层,就会变得容易出错,比如信息的路由错误、死循环等等。

举个简单的例子,一辆汽车,外观很漂亮,但是如果发动机有问题,那就变成了一个摆设,势必会bug不断。而应用系统的拓展性就好比汽车的引擎转速,别人的百公里加速只要10s,而你的则需要一个小时(业务流程变动需要更长时间的程序修改),孰优孰劣,一目了然。而如果引擎再动不动就熄火(程序逻辑死循环),那这样的车谁还会叫好呢?

服务架构

面向服务的体系结构,是一个组件模型,它将应用程序的不同功能单元通过这些服务之间定义良好的接口和契约联系起来。

接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。

工作流引擎使得构建在各种这样的系统中的服务,可以以一种统一和通用的方式进行交互。

整体思路

首先定义每个操做,就是定义流程步,定义流程步主要包括:操作的接口地址、操作参数、操作类型(起始操作、中间操作等)。定义操作的目的是接着为每个操作设置关系和定义流程时选用这些定义好的操作步。

第二定义操作的参数,有了接口地址外,还需要定义操作参数。

第三是定义操作步之间的关系。就是定义一个流程中每个操作步的前驱、后继的操作步。

第四是定义流程了,必要的信息是流程名称等基本信息和定义流程的各个操作步以及流转规则。流程基本信息就不用说了。流程步定义比较复杂,设置定义步骤类型(起始、中间、终结),入口步骤、出口步骤、通知模式、人员、角色、发送通知的内容。

第五是涉及跳步情况的定义,比如需要根据参数的不同提交到不同的步骤进行审批,这里叫做流程步骤变迁规则设置。设置的内容需要:原步骤、目标步骤、变迁方向(正/负)、条件规则(判断参数时用与还是用或)。接着设置参数和参数值及比较条件。

第六是授权管理。这个比较简单了,判断被提交的人是否处于授权状态,从而进行授权处理。

以上所说只是基础逻辑,实际编写过程中还要考虑各企业的实际情况。

工作流引擎对比

对比

几种工作流引擎对比:

1、jBPM3是一个完整的工作流系统实现,面向开发人员,目的在于简化对组织核心流程进行支撑的软件创建,不支持标准。

2、jBPM4引入PVM,使其拥有更强大的扩展性,同时增加BPMS特性,这些特性包括了对BPMN的支持、面向业务人员的Web建模器和简单统计分析功能的加入。

3、jBPM5基于原先的Drools Flow,支持BPMN,通过与Drools的合并支持BAM,通过内容仓库增加对流程可视化的支持。由于放弃了jBPM4的PVM,引擎的可扩展性受到损害,并且不再支持jPDL。

4、Activiti5基于jBPM4的开源工作流系统,与Alfresco的集成增加了其流程可视化与管理能力,同时通过创新的Activiti Cycle协作组件支持流程相关人员之间的协调,最后,它加强了集成能力。

5、SWF与其说是工作流引擎,不如说是分布式计算调度框架,SWF中只包括Task和History两部分,甚至是每个Task之间如果要传递一些数据的话,都只能通过第三方存储(比如Message Queue或者Redis),不过这也给了编程更大的灵活性,问题是这种灵活性是不是非常需要。

一个SWF由Worker和Decider组成,Worker执行实际的任务,而Decider进行流程控制,两者严格上来讲没有区别,只是所执行的任务不同罢了。每个Worker和Decider会定期的去SWF的一个Task List取下一个任务。可以看出来这更像是一个“多线程”的结构,而SWF官方网站的Use Case是NASA的火星探索计划中需要处理图片的系统,这其实也是一个更多侧重于计算的系统,流程反而非常简单。

另外,SWF(Simple Workflow)的一个Workflow不能太复杂,因为所有的流程控制都集中于Decider,如果太复杂的话Decider将无比庞大,给维护和扩展带来一定的困扰。

Activiti的优势:

1、与jBPM4相比,Activiti5最令人瞩目的特性就在于它的协作工具组件。

Activiti Modeler—建模器

基于开源Signavio Web流程编辑器的一个定制版本,提供了对BPMN2.0图形化规范的支持,建模后的流程以文件格式进行存储。

Activiti probe—管理及监控组件

对流程引擎运行期实例提供管理及监控的Web控制台。包含部署的管理、流程定义的管理、数据库表的检视、日志查看、事务的平均执行时间、失败多次的工作等功能。

2、Activiti拥有更简洁健壮的接口

Activiti中提供TaskQuery接口,可以设置各种查询过滤,排序方式,最终通过list方法执行查询,相比jbpm,它还提供了分页查询功能,双方高下立判。

3、Activiti拥有更友好的用户体验

JBPM核心引擎完全没有关于表单的任何抽象,它的工作机制是通过全局常量,流程变量,任务变量,这些概念十分技术化。

相比之下Activiti则更贴近实际的应用场景,它将为开始节点,以及人工任务提供了表单设置,用户可以设置字段名称,字段类型。

通过Activiti的平台可以根据这些设置去生成表单,但如果不使用其平台只使用引擎的话,也支持通过它来表达与第三方表单的关系。这些表单设置的元数据信息也可以通过接口去获取。

4、Activiti支持启动引擎后随时热部署

JBPM存在一个软肋,一个RuntimeService只能在启动的时候指定bpmn资源,一旦启动后便不再能够去更新或者增加bpmn了,这会导致我们系统集成的困难,因为我们自然希望整个系统只有一个工作流引擎实例运行。

Activiti则提供了Deploy机制,将bpmn资源的热部署,热更新都做了很好的支持

5、Activiti拥有更友好易用的Eclipse编辑插件和在线插件

6、Activiti依赖更少的jar包

Activiti依赖的第三方jar包较少,主要就是mybatics,而JBPM则依赖了一大堆的jar,从drools到繁杂的hibernate,再到自身拆分的零零散散的jar包,让人不由觉得它是一个庞大的怪物。

工作流有版本的概念,jBPM和Activiti上传一个新的版本后,版本号会增加1,旧版本还没执行完的流程实例还会继续执行。

SWF的版本是个字符串,随意指定好了,这样也很好,字符串名称更明确。

嵌入式部署即将流程引擎嵌入部署于Web应用中

个人收获

  • 授权

拓展阅读

BPM

OA

ERP

CRM

参考资料

java开源工作流引擎梳理

什么情况下,需要使用工作流引擎?

什么是工作流引擎

java spring actviti 工作流引擎 前后端分离 框架源码

Java三大主流开源工作流引擎技术分析

几大工作流引擎对比