前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Activiti7入门Demo

Activiti7入门Demo

原创
作者头像
诺浅
修改2020-08-21 17:44:47
1K0
修改2020-08-21 17:44:47
举报
文章被收录于专栏:工具使用工具使用

项目框架描述

项目基于springboot 2.1.1

代码语言:txt
复制
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
    <relativePath/>
</parent>

搭建环境

一、引入Activiti所需所需包

代码语言:txt
复制
<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

代码语言:txt
复制
# 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

代码语言:txt
复制
@SpringBootApplication(
        exclude = {
                org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
                org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
        }
)

常用API

部署一个流程定义

代码语言:txt
复制
@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查询下一步审核信息(按钮信息,如通过,驳回)

代码语言:txt
复制
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;
}

开始任务

代码语言:txt
复制
/**
* processDefinitionKey 流程定义key ddsplc
* businessKey 业务数据id
* variables 参数 用以确定下一步的走向或者指定审核人是谁
*/
runtimeService.startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables);

开始并完成任务

代码语言:txt
复制
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());
}

查询任务

代码语言:txt
复制
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。所以我们要关闭这个功能。如何关闭?

代码语言:txt
复制
security
	basic
		enabled=false

启动类新增如下代码

代码语言:txt
复制
@SpringBootApplication(
        exclude = {
                org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
                org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
        }
)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目框架描述
  • 搭建环境
  • 常用API
    • 部署一个流程定义
      • 根据任务ID查询下一步审核信息(按钮信息,如通过,驳回)
        • 开始任务
          • 开始并完成任务
            • 查询任务
            • 可能会遇到的报错信息
              • Bpmn文件乱码
                • 启动报错activiti-发现了以元素 'process' 开头的无效内容
                  • 需要登录验证
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档