Activiti里附件Attachment管理(添加、查询、删除)

前言

在流程流转过程中可能会需要附带一些文件,每个任务办理人都可以上传附件,然后在流转过程中可能会被多次审批。

本篇将介绍附件的添加、查询、下载和删除代码操作。

代码示例

老规矩,本文只贴activiti附件相关的代码,其它基础代码可以参看《SpringBoot2.0整合activiti6示例

添加附件

activiti里添加附件有两种方式,文件方式url方式。

查询附件

下载附件

删除附件信息

+5

Activiti删除流程实例

省略了其它和本例无关的代码,需要查看请参阅《SpringBoot2.0整合activiti6示例

+2

activiti用户任务多实例实战教程(离职会签)

简介

在学习工作流的时候,我们可以想到这样一个场景,一个员工离职,可能要很多部门或领导盖章审批,像主管、部门经理、财务部、资产管理部等等。这种过程我们就可以称之为会签。

在activiti里,允许配置了多实例特性的活动在流程运行时以顺序或并行的方式创建活动实例。其中因为用户任务(UserTask)涉及到了“人”的这个重要特性,所以学会使用用户任务的多实例变得尤为重要。

下面会依据员工离职的流程,分别介绍用户任务多实例的顺序方式办理、并行方式办理以及如何自定义设置多实例的结束条件。

还是老规矩,本教程的代码是在《SpringBoot2.0整合activiti6示例》基础上写的,这边只贴本教程相关的代码,其它的代码就可以到之前的这篇博文去看。

顺序方式办理

顺序办理,就是员工要离职,需要拿着离职单一个个找主管、部门经理、财务部、资产管理部签字审批,它们的顺序可以颠倒,但是同一时刻只能是给一个领导或部门签字。

顺序执行流程图

activiti用户任务多实例顺序执行

bpmn文件 departureSequence.bpmn20.xml

测试代码

在浏览器里访问 http://localhost:5656/departureSequence

查看数据库表,说明顺序执行成功。

离职流程的多实例顺序执行的过程

离职流程的多实例顺序执行的过程

并行方式办理

并行办理,就是离职员工拿着请假单下的N个子项目纸条,送到各个部门领导那儿,让他们审批盖章,最后再统一汇总(例子可能不太好,就是那个意思)。

流程图

并行处理方式和顺序处理方式只有一个,isSequential=”true”还是”false”,其它配置都一样。

activiti用户任务多实例并行执行

bpmn文件 departureParallel.bpmn20.xml

测试代码

在浏览器里访问 http://localhost:5656/departureParallel

查看控制台,并行处理的话,它是一下子就生成了三个任务,然后它们的assignee分别就是代码里设置的Y00008、Y00009、Y00010。

离职流程的多实例并行执行的过程

设置结束条件(completion condition)

上面两个例子都是默认所有实例的任务都完成了,任务节点才结束,那如果想提前结束呢?

比方说,员工离职本来是需要三个部门领导审批盖章的,现在放松了,可以只一个部门领导审批(随机)盖章就OK了。

流程图

在completion condition栏里设置了如下代码,意思是当已完成的实例/所有实例大于或等于我们设置的比率(比方说30%),那就结束。

bpmn文件 departureSequenceCompleteCondition.bpmn20.xml

测试代码

在浏览器里访问 http://localhost:5656/departureSequenceCompleteCondition

查看控制台

总结

activiti用户任务多实例的员工请假教程结束,有问题或者写的不对的欢迎指正留言。

参考《Activiti实战》

0

activiti禁用自带的用户身份模块

简介

activiti自带的身份模块属实鸡肋,根本不符合咱们国内绝大多数系统的要求。

国内一般一个完整的系统,都会有自己的身份模块,大多是管理用户、组织、角色、岗位等。而activiti里既没有组织也没有角色的概念,只有一个组(Group)的概念。

综上有两点理由我们需要配置activiti禁用自带的用户身份模块。

  • activiti自带的身份模块和业务系统的身份模块冲突,同时维护两套不实际
  • activiti自带的身份模块太过简陋

配置

1.在配置类里给 ProcessEngineConfiguration 加上配置

2.删除数据库里涉及到的四张表

这个时候我们再重新启动集成了activiti的业务系统,activiti引擎就不会再检查以ACT_ID_*开头的表了,也就等于实现了activiti禁用自带的用户身份模块。

0

Activiti里使用自定义命令实现任务的回退、跳转

简介

一个完善的任务流程不仅需要正常往下走,有时也需要有回退或驳回的功能。本文旨在解决这个需求。

环境

SpringBoot2.X + activiti6

准备bpmn流程文件

一个简单的流程,两个任务节点,原始任务A的assignee是zhangsan,原始任务B的assignee是lisi。

继续阅读“Activiti里使用自定义命令实现任务的回退、跳转”
+2

activiti里的命令、拦截器原理介绍和源码分析

简介

activiti里的api服务核心是它的命令和拦截器,所以我们有必要了解它的运行机制。

activiti里用到的设计模式

activiti的整体架构采用了外观模式(Facede)命令模式(Command)拦截器模式(Interceptor)这三种主要的设计模式,activiti里的所有API均是在此基础上实现的。

继续阅读“activiti里的命令、拦截器原理介绍和源码分析”
0

Activiti 部署流程等资源文件的四种方式

Activiti 的流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被读取。

一、Activiti流程资源

  • 流程定义文件:文件扩展为*.bpmn20.xml或*.bpmn
  • 流程定义的图片:用BPMN2.0规范的各种图形描绘,文件扩展为*.png
  • 表单文件:把表单内容保存在一个文件中,文件扩展为*.form
  • 规则文件:文件扩展为*.drl

二、部署资源文件

1.classpath方式

2.InputStream方式

使用InputStream方式部署流程资源需要传入一个输入流及资源的名称,输入流的来源不限,可以从classpath读取,也可以从一个绝对路径文件读取,也可以是从网络上读取。

3.字符串方式

利用字符串方式可以直接传入纯文本作为资源的来源,和前两种方式类似,字符串方式的实现原理是把一组字符串的内容转化为字节流后再部署。

4.zip/bar格式压缩包方式

以上3种部署方式一次只能部署一个资源,除非执行多次deployment.addXxx()方法,如何一次部署多个资源呢?很简单,是我们可以使用zip/bar格式压缩包方式。将资源文件手动或使用Ant脚本,打包文件扩展名可以是Activiti官方推荐的bar或普通的zip。

0

Activiti6生成实时流程图并高亮已执行流程节点和连接线

前言

Activiti5.x 的追踪流程节点查找,可以用 ActivityImpl 这个类来实现,但是在 Activiti6 版本里,pvm包整个类包都被删除,也就是说不能用 ActivityImpl 这个类来实现流程图追踪了。

不过Activiti6也有自己的实现方法,主要是利用 ProcessDiagramGenerator 这个接口实现类,去实现 generateDiagram 这个方法。默认可以采用 ProcessDiagramGenerator 的子类 DefaultProcessDiagramGenerator 调用 generateDiagram 实现流程图。当然也可以自定义相应的子类 CustomProcessDiagramGenerator 去定制化实现。

生成流程图核心方法

其中比较重要的是 bpmnmodel,highLightedActivities,highLightedFlows 这三个参数。

bpmnmodel模型通过以下代码获取

highLightedActivities(需要高亮的执行流程节点集合的获取)获取方法的核心代码

highLightedFlows(需要高亮流程连接线集合的获取)获取方法的核心代码

activiti6生成流程图代码

activiti5.x生成流程图代码

自定义样式生成流程图思路

activiti提供的样式可能不是特别美观,它的api目前只能改字体大小。如果遇到改颜色等,可以通过重写ProcessDiagramCanvas这个类,并实现ProcessDiagramGenerator这个类的接口。

生成的实时流程图效果图

+2

SpringBoot2.0整合activiti7示例

前文《SpringBoot2.0整合activiti6示例》已经介绍了SpringBoot2.0与activiti6的集成,虽然现在activiti6的使用量还是很大,但是activiti7将来毕竟是趋势,所以本文将介绍如何整合SpringBoot2.0与activiti7,并且通过这两次代码整合,最后会分析activiti7相比activiti6有哪些改进。

继续阅读“SpringBoot2.0整合activiti7示例”
0

SpringBoot2.0整合activiti6示例

最近公司项目用到了activiti流程引擎,正好是自己在做,那就记录一下,方便自己后续查看,也方便需要的朋友查看。

既然已经开始看这篇代码整合文章了,我就当大家已经对activiti已经有了初步的了解了。

初始化activiti的表

activiti默认是H2数据库,这边我们使用mysql,从官方下载的文件里可以找到sql脚本,这边要注意不要选择mysql55那个版本的脚本,那是旧版本的mysql使用的(当然如果你的mysql版本低于5.5那当我没说)

另外就是,也可以不用手工运行脚本,当我们第一次在代码里使用activiti时,会自动帮我们建好表。

maven的pom.xml文件

activiti-spring-boot-starter,把版本换一下即可

application.properties

最后两行日志配置是为了使用activiti时在控制台打印它的sql,方便查看

log4j.properties

inspectProcess.bpmn20.xml

这是我的流程文件,可以通过eclipse或idea的activiti插件或者官方的流程设计器来进行设计

在resources资源目录下新建processes目录,把资源文件放进去, src/main/resources/processes, springboot默认是到这个文件夹里去找流程图进行部署的

ActivitiConfig.java

LeaveProcessController.java

工程图

这样SpringBoot2.0整合activiti6示例就完成了。如果有问题欢迎留言。

+2