一、Activiti简介
本课程选用的是老牌的工作流引擎:Activiti,它可以很好的与SpringBoot框架整合到一起。简单地来讲,工作流就是在计算机的协助下实现流程的自动化控制, 它主要解决的是“使在多个参与者之间,按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现” 。
如果在线办公系统中没有使用工作流引擎,而是把业务流程硬编码到Java代码中,将来维护的时候修改代码比较麻烦,而且还要重新编译项目,重新打包发布,确实挺麻烦的。如果采用了工作流引擎就没有这些烦恼,我们把具体业务流程从Java代码中剥离,然后用XML文件的形式定义。将来重构流程的时候,如果不是大刀阔斧的修改流程,我们几乎不需要重新修改Java代码,只需要向Java程序提供新的XML文件即可。
Activiti 是一个开源架构的工作流引擎,基于bpmn2.0 标准进行流程定义。也就是说我们要自己定义BPMN文件,在里面声明业务流程,然后把BPMN文件交给Activiti引擎去执行。
BPMN就是一个XML文件而已,里面用不同的标签定义不同的业务节点。如果是UserTask节点,工作流引擎执行到这里的时候就会自动阻塞,然后等待审批人员传入处理结果,然后流程才能继续往下进行。如果遇到ServiceTask节点,都会有与之对应的程序脚本。工作流引擎会自动执行这些程序脚本,完成ServiceTask任务,不需要人为干预。例如自动生成Excel报表文件,然后用邮件发送给某个部门,这些操作就可以定义成ServiceTask的脚本,然后让工作流引擎去执行。
Activiti支持的脚本语言有JavaScript和Java,简单的计算、循环和判断,我们可以用JavaScript声明脚本,如果是复杂的任务,我们就需要定义Java任务类,然后把任务类和ServiceTask关联到一起。工作流引擎执行到ServiceTask节点的时候,就会调用你创建的Java任务类了。
有很多MIS系统内置了BPMN设计器,可以让业务人员在图形化界面上随便定义工作流。我一直反对这么做,因为业务流程还是需要由程序员创建才稳妥。就比如说某个政务系统中,小微企业要填报申报材料,然后申请会同时发送给行政、消防、税务等部门去审批,这些部门在审批的时候,需要提取该企业不同方面的业务数据,你说ServiceTask的Java脚本是不是需要程序员来写?而且MIS系统中的图形界面也没办法定义脚本,所以集成的BPMN设计器非常鸡肋,设计个简单的流程还行,涉及到复杂流程和自动化办公,那就指不上了。
二、安装BPMN设计器
Activiti只是工作流引擎,它不包含BPMN设计器,想要定义业务流程,你需要自己去安装BPMN设计器。以前Eclispe上面有BPNM设计器插件,但是现在该插件属于弃管状态,没法使用。IDEA上面的BPMN插件也是这种状态,都没法用。
好在前端领域有人用Node.js做了Web版本的BPMN设计器,我们可以凑合着用一下。大家可以自己到Gitee上面下载这个开源项目(https://gitee.com/MiyueSC/bpmn-process-designer)
1. 初始化项目
因为BPMN设计器是用Node.js做的,所以你需要先把Node.js环境安装好。然后把项目解压缩,并且在命令行进入该项目文件夹,执行初始化命令。
cnpm install
然后还要执行下面的命令,才能让这个BPMN项目兼容高版本的Node.js
# Windows系统执行这个命令
set NODE_OPTIONS=--openssl-legacy-provider
# Linux和MacOS系统执行这个命令
export NODE_OPTIONS=--openssl-legacy-provider
2. 运行BPMN设计器
在命令行中执行下面的命令启动BPMN项目,然后打开浏览器访问本地的8100端口就能看到该设计器了。
npm run demo