Activiti6教程二

 

基于上一节,登录activiti-app工程http://localhost:8080/activiti-app/

进入首页如下得到3个模块

 

Activiti6教程二_第1张图片

  1. 第一个模块主要是画图模块,用来配置,维护和部署流程,可以理解为该模块是一个后台管理端。activiti其实最核心的功能就是将我们从各种流程的状态中解脱出来,你可以假设一下,如果没有开源的工作流引擎你会怎么去实现一个流程?一般人的想法就是直接用硬编码的方式去维护流程的状态,如果你编码和设计水平过硬,那么你可以应用各种设计模式,你还可以将代码把控到一个可空的范围,如果不是的话那么你的流程代码里面就充满了if和else,在第一个版本可能还勉强过的去,但是随着业务的复杂性的增加,或者是人员离职,那么这些大量的if和else就会变成所谓的技术债务,你每一次修改流程都要修改这些if和else,这明显违背了开闭原则,而且出来混迟早要还的,所以工作流引擎就将我们从流程状态的各种if和else中解放了出来 。

  2. Task App该模块可以理解为前端模块,该模块官方为我们是实现了一个工作流该有的功能和东西,在我们实际设计工作流的功能的时候可以作为参考

  3. 第三个模块为账号管理模块,改模块的很多实现对接activiti 的IdentityService(Activiti的身份接口,后续会介绍),不过本人认为除非你重写该部分接口,将获取用户和身份的信息对接自身的系统的角色和用户,否则该模块用处不大(一直不喜欢将角色和用户托管给引擎去维护)

 

 

进入第一个画图模块后看到如下界面

Activiti6教程二_第2张图片

在最顶部有4个按钮

  1. Processes这个tab下为流程图和绘制的功能模块,主要就是绘制流程(控制流程的流程状态)
  2. 第二个为表单模块,想象一下一个请假流程单,每一个任务节点可能对应的表单(比如请假时间,请假理由),那这些表单如何和流程做关联呢?官方给出的解决方案是和每个Task(任务节点做关联,Task概念后续介绍),其实通过看后台代码感觉这个功能有些鸡肋,在activiti官方的说明中提供了2中表单设计,一种是基于键值对的设计,一种是外置表单,但是这个模块的实现却没有调用官方提供的表单接口,我也不知道为什么,所以表单模块可能还是要有客户端自行去实现的。
  3. 第三个模块到现在我也不知道哪里做什么用的。。。。
  4. 第四个为发布模块,我们画完流程图后需要将流程打包发布,这样前端就可以看到和调用这个流程,这个维护是在这个模块去实现的。

 

 

首先介绍Processes模块

点击Create Process模块,会叫你填写key和name这里我们都取名叫test1

Activiti6教程二_第3张图片

 

然后点击Create new model 进入如下界面

Activiti6教程二_第4张图片

 

最左边的树是流程图的元素,里面都是一些bpmn2.0元素,因为activiti都是实现bpmn2.0规范去实现的

下面介绍几个常用的元素

Activiti6教程二_第5张图片 

Start event为空白事件标志着一个流程的开始

start timer event简单的来说就是一个计时器,用处为当一个流程开始时,过一段时间再执行

start singnal和start message 类似如下图所示

 

Activiti6教程二_第6张图片

当主流程开启时,如果触发了一个message事件那么m1流程开始,single事件和message事件的区别是,single可以作用所有流程,打个比方,2个人同时发起请假,那么single就会影响全部这2个人的流程(可以设置成只影响一个流程),message只影响一个流程(你发起事件的那个流程)

其余的可以参考官方文档 https://www.activiti.org/userguide/#bpmnStartEvents

Activiti6教程二_第7张图片 

其中最重要的是User task这个标签为任务的核心,以请假流程来说,他代表着一个任务(也可以理解为一个处理),比如请假节点,第一个task可能是流程发起人,第二个task可能为部门经理,那么这些处理人我们就可以用一个task来表示

详细信息 https://www.activiti.org/userguide/#bpmnTask 

Activiti6教程二_第8张图片 

在流程进行中可能一些节点需要进行流程状态的判断,比如请假单来说普通员工的请假流程的下一个节点是部门经理,但是部门经理的下一个节点可能是总经理,总的来说我们可以运用网关来替换代码中的if和else,让这部分状态在流程图中配置出来而不通过硬编码的方式来实现

具体使用https://www.activiti.org/userguide/#bpmnGateways

Activiti6教程二_第9张图片 

我们以 messageEvent为例,这部分网上的实例并不多,但是我感觉这部分功能非常有用,我们可以用其实现回退等功能,我们定义一个流程图如下

Activiti6教程二_第10张图片

改流程的T1任务三有一个message边界事件,假设现在我们流程进行到T1那么突然要人为主动干预让他走到T2那么我们就可以设置这样一个message,点击下图方框处

Activiti6教程二_第11张图片 

如下图添加事件后保存

Activiti6教程二_第12张图片 

 

 鼠标点击message event,再点击message reference,选择上一步创建的事件,那么之后你当流程走到T1节点时候你就可以往API中发送一个message事件控制流程走向,默认情况下触发了边界事件,那么就会执行触发的那一条线路,原有的那条流程就不在执行,如上面例子如果触发了边界事件那么就流程就会走到T2节点,当然可以设置并行触发(原有流程和触发流程都可执行) https://www.activiti.org/userguide/#bpmnBoundaryEvent

Activiti6教程二_第13张图片

Activiti6教程二_第14张图片 

主要会使用到的bpmn标签大体就这么多,其余的可执行参考官方文档https://www.activiti.org/userguide/#bpmn20 第七章

  1. Start Events 顾名思义就是流程的开始事件
  2. Activities标签
  3. 网关
  4. 边界事件
  5. 结束节点代表着流程结束

你可能感兴趣的:(Activiti6教程二)