Activiti 6.x【2】activiti6.0 基本流程讲解与开发前奏

简介: 版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82560185 ...
版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82560185

基本流程讲解与开发前奏


核心API介绍

这里写图片描述
springboot环境下不再以activiti.cfg.xml文件的形式配置,可在yml内配置,yml配置会在后文讲解。

RepositoryService:对流程定义进行管理。
RuntimeService:对流程实例的管理。
TaskService:对流程任务进行管理。
IdentityService:管理用户和用户组。
ManagementService:提供对activiti数据库的直接访问【一般不用】。
HistoryService:对流程的历史数据进行操作。
FormService:动态表单。

Activiti6 YML配置

1.加入配置

spring: 
  activiti:
    database-schema-update: false
    check-process-definitions: false
AI 代码解读

activiti使用starter配置后属于spring下。
check-process-definitions【检查Activiti数据表是否存在及版本号是否匹配】默认为true,自动创建好表之后设为false。设为false会取消自动部署功能。

database-schema-update【在流程引擎启动和关闭时处理数据库模式】如下(摘自官网)
- false (默认值):在创建流程引擎时检查库模式的版本,如果版本不匹配则抛出异常。
- true:在创建流程引擎时,执行检查并在必要时对数据库中所有的表进行更新,如果表不存在,则自动创建。
- create-drop:在创建流程引擎时,会创建数据库的表,并在关闭流程引擎时删除数据库的表。

准备步骤

1.测试项目结构:主要为做工作流部署的两种形式,zip为bpmn与png文件的压缩文件
这里写图片描述

2.安装eclipse activiti插件
https://www.cnblogs.com/mingforyou/p/5347561.html【百度找了一个老哥的,这个就你们自己去倒腾了。难度不大】

3.流程图如下
这里写图片描述
代码后续用到功能时会贴出

RepositoryService

这里写图片描述
打开测试类
部署流程定义

/**部署流程定义*/
@Test
public void deploy(){
    Deployment deployment = repositoryService.createDeployment()//创建一个部署对象
                    .name("helloworld入门程序")
                    .addClasspathResource("bpmn/MyProcess.bpmn")//从classpath的资源中加载,一次只能加载一个文件
                    .addClasspathResource("bpmn/MyProcess.png")
                    .deploy();
    System.out.println("部署ID:"+deployment.getId());
    System.out.println("部署名称:"+deployment.getName());
}
AI 代码解读

部署过程同时会影响三张表的数据

ACT_RE_DEPLOYMENT(第二行)
这里写图片描述

ACT_GE_BYTEARRAY(文件会被存在这张表内,activiti以纵表方式存储数据)
这里写图片描述
ACT_RE_PROCDEF
这里写图片描述

部署流程定义(zip)

/**部署流程定义(zip) */
@Test
public void deployzip() throws IOException{
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("bpmn/MyProcess.zip");
    ZipInputStream zipInputStream = new ZipInputStream(in);
    Deployment deployment = repositoryService.createDeployment()
                    .name("helloworld入门程序2")
                    .addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
                    .deploy();//完成部署
    System.out.println("部署ID:"+deployment.getId());
    System.out.println("部署名称:"+deployment.getName());
    zipInputStream.close();
}
AI 代码解读

【PS:流程实例可以重复部署,有版本号作为标识】
这里写图片描述

删除流程定义

/**删除流程定义*/
@Test
public void deleteProcess(){

    String deploymentId = "25001";
    /**不带级联的删除:只能删除没有启动的流程,如果流程启动,就会抛出异常*/
//     repositoryService.deleteDeployment(deploymentId);

    /**级联删除:不管流程是否启动,都能可以删除(emmm大概是一锅端)*/
    repositoryService.deleteDeployment(deploymentId, true);
    System.out.println("删除成功!");
}
AI 代码解读

RuntimeService

【多个流程实例之间不会相互影响】
注入Service这里写图片描述

启动流程实例

/**启动流程实例*/
@Test
public void startProcessInstance(){
    //流程定义的key
    String processDefinitionKey = "myProcess";
    //key对应MyProcess.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
    ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefinitionKey);
    System.out.println("流程实例ID:"+pi.getId());//流程实例ID
    System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID
}
AI 代码解读

这里写图片描述

查询流程实例

/**查询流程实例*/
@Test
public void searchProcessInstance(){
    String processDefinitionKey = "myProcess";
    ProcessInstance pi = runtimeService.createProcessInstanceQuery()
            .processDefinitionKey(processDefinitionKey)
            .singleResult();
    System.out.println("流程实例ID:"+pi.getId());
    System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
}
AI 代码解读

这里写图片描述

流程实例的删除

/**流程实例的删除*/
@Test
public void deleteProcessInstanceTest(){
    String processDefinitionKey = "myProcess";
    ProcessInstance pi = runtimeService.createProcessInstanceQuery()
            .processDefinitionKey(processDefinitionKey)
            .singleResult();
    String processInstanceId = pi.getProcessInstanceId();
    System.out.println("流程实例ID:"+pi.getId());
    runtimeService.deleteProcessInstance(processInstanceId,"删除测试");
}
AI 代码解读
目录
打赏
0
0
0
0
2
分享
相关文章
Github Star 36.2K 的开源低代码平台推荐 —JeecgBoot
低代码的含义是少写代码并不是不写代码,面向的用户群体还是编程人员,传统的快速开发平台、在线开发平台、OA办公系统 都可以称为低代码平台,那他是怎么帮助你少写代码的呢,往下看!
1049 0
探索未来网络:量子互联网的崛起
本文深入探讨了量子互联网的基本概念、技术原理及其对未来通信和信息安全的潜在影响。通过对量子纠缠、量子叠加以及量子不确定性等核心原理的解释,本文展示了量子互联网相较于传统互联网所具备的根本性优势,特别是在高安全性和高速度方面。
179 1
未来后端开发的趋势与展望
【2月更文挑战第11天】随着人工智能、大数据等技术的不断发展,后端开发也在迎来新的挑战和机遇。未来的后端开发将更加注重跨平台、微服务架构、持续集成等方面的创新,以应对日益复杂的业务需求和技术变革。
179 6
CSRF防护在Flask中的实现
【4月更文挑战第16天】本文介绍了如何在Flask中防范CSRF攻击。CSRF是一种利用用户身份执行恶意操作的攻击方式。要防御CSRF,可使用Flask-WTF扩展,它集成CSRF保护。首先安装Flask-WTF,设置SECRET_KEY,然后让表单继承自`FlaskForm`,自动应用CSRF保护。在模板中渲染表单时,包含`hidden_tag()`以渲染CSRF令牌。处理CSRF异常,添加错误处理函数。此外,使用HTTPS,限制请求来源,及时更新依赖也是重要措施。遵循这些步骤可提升Flask应用的安全性。
利用frp工具实现内网穿透、随时随地访问内网服务
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
利用frp工具实现内网穿透、随时随地访问内网服务
Activiti原理分析(一)从一个简单流程开始
本系列文章将基于 Activiti 6 源代码对 Activiti 的原理进行深入剖析,让读者快速知其然,同时知其所以然。 第一篇文章将分析一个简单流程在 Activiti 中的执行流程,借此把 Activiti 底层的一些概念快速梳理一遍,让读者对 Activiti 的底层实现有个大概了解,知晓每张表的作用。内容都是笔者从源码里分析出来或者核对过的,比一般的文档更加翔实靠谱。
4023 2
Activiti原理分析(一)从一个简单流程开始
Handsontable - 汉化包(Vue 项目)
Handsontable - 汉化包(Vue 项目)
2074 0
Handsontable - 汉化包(Vue 项目)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问