springboot-activiti集成以及使用案例

activiti与springboot集成良好,以下只针对springboot讲解

1.集成之前,首先要配置流程图,有两种方式可以去网上下载IDE的activiti的插件或者去网上下载activiti-6.0.0.zip的包里面会有3个war包分别是activiti-admin,activiti-app,activiti-rest ,把3个war包放入tomcat容器中启动,然后访问http:ip:port/activiti-app 输入admin/test 进入系统配置流程图如下:


配置好以后导出流程配置XML文件

建立springboot项目依赖activiti maven配置如下:


springboot与activiti的依赖

在src/main/resources下建立processes文件夹把刚刚到处的流程配置文件XML放进来(注意文件夹名字processes不能改变,activiti默认从这个路径下去查找流程配置文件)


在application.yml配置文件中配置activiti配置项:

#每次应用启动不检查Activiti数据表是否存在及版本号是否匹配,提升应用启动速度

  activiti.database-schema-update: true 配置为true启动时候,会和当前数据中的activiti表进行版本匹配,有更新会更新,没有则会在数据库中创建相应的表结构

  #保存历史数据级别设置为full最高级别,便于历史数据的追溯

  activiti.history-level: full

下面介绍下activti几个组件

RepositoryService:提供一系列管理流程部署和流程定义的API。

RuntimeService:在流程运行时对流程实例进行管理与控制。

TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。

IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。

ManagementService:提供对流程引擎进行管理和维护的服务。

HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。

FormService:表单服务。

这几大组件直接在spring中注入即可使用

比如说开启一个流程实例

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveFlow",(String)leaveInfo.get("formId"),dynamicArg);

字符串"leaveFlow"是BPMN模型文件里process元素的id

fromId是你业务主键ID目的是把你的业务和流程数据相关联通过业务ID就可以找到相应的流程实例

//流程实例启动后,流程会跳转到第一个节点

Task vacationApply = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();

//设置申请任务的执行人也可以配置动态表达式通过变量注入

taskService.setAssignee(vacationApply.getId(), String.valueOf(leaveInfo.get("userId")));

//设置流程参数:请假天数和表单ID

//流程引擎会根据请假天数days>3判断流程走向

Map args = new HashMap<>();

args.put("days", leaveInfo.get("days"));

//设置审批组

//完成请假申请任务

taskService.complete(vacationApply.getId(), args);

现在说下动态设置代办人

有3个重要属性

1.Assignee 任务执行人,可以用UEL表达式获取 UEL表达式${xxx} 可以在代码中动态设置执行人

2.Candidate users 配置当前节点候选人组可以用UEL获取(当审核者有两个或多个以上,请假申请提交到他们手上后,有一个人认领了该任务,即代表申请被审批通过,这种情况下就需要使用候选人组配置)

3.Candidate groups 与Candidate users 类似 配置当前任务执行人组

下边说3个属性区别:

Assignee 默认签收

Candidate users,Candidate groups 需要手动签收

签收代码:

taskService.claim(taskId, userID); 参数当前任务id,用户id 意思是谁签收了这个任务

签收完审批通过以后如何让流程继续执行只需要一行代码即可

taskService.complete(taskID,"传递给下一个节点任务的参数");

最后说下UEL表达式的坑

首字母一定要小写,不能出现特殊字符例

时间有限,只是粗略记录,activit博大精深,还有很多功能未体现,后续会持续更新

https://github.com/sunnan2/work-flow-demo 附上demo代码示例

你可能感兴趣的:(springboot-activiti集成以及使用案例)