Activiti7入门Demo
时间:2022-07-23
本文章向大家介绍Activiti7入门Demo,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
项目框架描述
项目基于springboot 2.1.1
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/>
</parent>
搭建环境
一、引入Activiti所需所需包
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M1</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
二、配置Activit
# activiti
#1.flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
#2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
#3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
#4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
spring.activiti.database-schema-update=true
#检测历史表是否存在
spring.activiti.db-history-used=true
#记录历史等级 可配置的历史级别有none, activity, audit, full
spring.activiti.history-level=full
#校验流程文件,默认校验resources下的processes文件夹里的流程文件
spring.activiti.check-process-definitions=false
security.basic.enabled=false
三、配置不使用springsecurity
@SpringBootApplication(
exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
}
)
常用API
部署一个流程定义
@Test
public void createDeploy() {
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/ddsplc.bpmn")//添加bpmn资源
// .addClasspathResource("diagram/holiday.png")
.name("销售订单发货流程")
.deploy();
System.out.println("流程部署id:" + deployment.getName());
System.out.println("流程部署名称:" + deployment.getId());
}
根据任务ID查询下一步审核信息(按钮信息,如通过,驳回)
public List<String> queryOutComeByTaskId(String taskId) {
List<String> outComeList = new ArrayList<>();
Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult();
if (task != null) {
String processDefinitionId = task.getProcessDefinitionId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
Process process = bpmnModel.getProcesses().get(0);
String taskDefinitionKey = task.getTaskDefinitionKey();
UserTask userTask = (UserTask) process.getFlowElement(taskDefinitionKey);
List<SequenceFlow> sequenceFlowList = userTask.getOutgoingFlows();
for (SequenceFlow sequenceFlow : sequenceFlowList) {
String sequenceFlowName = sequenceFlow.getName();
outComeList.add(sequenceFlowName);
}
}
return outComeList;
}
开始任务
/**
* processDefinitionKey 流程定义key ddsplc
* businessKey 业务数据id
* variables 参数 用以确定下一步的走向或者指定审核人是谁
*/
runtimeService.startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables);
开始并完成任务
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
List<Task> list = (this.taskService.createTaskQuery().processInstanceId(instance.getId())).active().list();
for (Task task : list) {
taskService.complete(task.getId());
}
查询任务
List<ActFlowDto> actFlowDtos = new ArrayList<>();
List<Task> taskList = taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).taskAssignee(identifier).list();
if (taskList != null && !taskList.isEmpty()) {
for (Task task : taskList) {
ActFlowDto actFlowDto = new ActFlowDto();
String processInstanceId = task.getProcessInstanceId();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
actFlowDto.setBusinessKey(processInstance.getBusinessKey());
actFlowDto.setAssignee(task.getAssignee());
actFlowDto.setTaskId(task.getId());
actFlowDtos.add(actFlowDto);
}
} else {
log.debug(String.format("task not found. processDefinitionKey=[%s], identifier=[%s]", processDefinitionKey, identifier));
}
可能会遇到的报错信息
Bpmn文件乱码
打开如下文件(有的人目录是idea程序所在目录,有的是用户下面的目录)
添加-Dfile.encoding=UTF-8
需要注意的是idea64.exe.vmoptions 这个文件可能有多个,别改错了。
启动报错activiti-发现了以元素 'process' 开头的无效内容
报错信息如下
解决方法
通过其他文本编辑器打开bpmn文件,做如下操作
需要登录验证
有可能集成好activiti后,启动项目访问的时候会跳转到一个登陆页
出现这个问题的根本原因是因为Activiti7里面强引用了SpringSecurity。所以我们要关闭这个功能。如何关闭?
security
basic
enabled=false
启动类新增如下代码
@SpringBootApplication(
exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
}
)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nginx启动报错:sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object
- 有赞美业店铺装修前端解决方案
- nginx部署react项目
- Golang 标准库 限流器 time/rate 设计与实现
- Node搭建简易的UDP服务器
- cordova run android 下载gradle报timeout
- How we redesign the NSQ-NSQ重塑之客户端
- [PHP] 使用php生成下载csv文件
- 深入浅出MySQL crash safe
- Cordova+React+Ant.design项目搭建
- ubuntu配置ZeroTier
- 有赞零售小票打印图片二值化方案
- 虚拟机中CentOS获取ip
- CentOS7 安装JDK8,tomcat8
- Py2和Py3共存相关问题