1.流程定义部署后操作activiti的3张表如下:

  • act_re_deployment 流程定义部署表,每部署一次增加一条记录

  • act_re_procdef 流程定义表,部署每个新的流程定义都会在这张表中增加一条记录

  • act_ge_bytearray 流程资源表

注意

act_re_deployment和act_re_procdef一对多关系,一次部署在流程部署表生成一条记录,但一次部署可以部署多个流程定义,每个流程定义在流程定义表生成一条记录。每一个流程定义在act_ge_bytearray会存在两个资源记录,bpmn和png。

建议:一次部署一个流程,这样部署表和流程定义表是一对一有关系,方便读取流程部署及流程定义信息。

2.启动流程实例操作数据表

  • act_hi_actinst 流程实例执行历史

    act_hi_actinst与act_hi_identitylink通过PROC_INST_ID关联

  • act_hi_identitylink 流程的参与用户历史信息

  • act_hi_procinst 流程实例历史信息,业务ID到这里BUSINESS_KEY_

    注意PROC_INST_ID_和PROC_DEF_ID_字段

  • act_hi_taskinst 流程任务历史信息

  • act_ru_execution 流程执行信息,业务ID到这里BUSINESS_KEY_

  • act_ru_identitylink 流程的参与用户信息

  • act_ru_task 任务信息

3.启动流程实例并添加Businesskey(业务标识)

流程定义部署在activiti后,就可以在系统中通过activiti去管理该流程的执行,执行流程表示流程的一次执行。

比如部署系统出差流程后,如果某用户要申请出差这时就需要执行这个流程,如果另外一个用户也要申请出差则也需要执行该流程,每个执行互不影响,每个执行是单独的流程实例。

启动流程实例时,指定的businesskey,就会在act_ru_execution #流程实例的执行表中存储businesskey。

Businesskey:业务标识,通常为业务表的主键,业务标识和流程实例一一对应。业务标识来源于业务系统。存储业务标识就是根据业务标识来关联查询业务系统的数据。

比如:出差流程启动一个流程实例,就可以将出差单的id作为业务标识存储到activiti中,将来查询activiti的流程实例信息就可以获取出差单的id从而关联查询业务系统数据库得到出差单信息。

    /*** 启动流程实例,添加businessKey*/@Testpublic void addBusinessKey(){//        1、得到ProcessEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、得到RunTimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();
//        3、启动流程实例,同时还要指定业务标识businessKey,也就是出差申请单id,这里是1001ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myEvection","1001");
//        4、输出processInstance相关属性System.out.println("业务id=="+processInstance.getBusinessKey());}

Activiti的act_ru_execution中存储业务标识:

操作数据库表

启动流程实例,操作如下数据库表:

  • SELECT * FROM act_ru_execution #流程实例执行表,记录当前流程实例的执行情况

    说明:

    流程实例执行,如果当前只有一个分支时,一个流程实例只有一条记录且执行表的主键id和流程实例id相同,如果当前有多个分支正在运行则该执行表中有多条记录,存在执行表的主键和流程实例id不相同的记录。不论当前有几个分支总会有一条记录的执行表的主键和流程实例id相同

    一个流程实例运行完成,此表中与流程实例相关的记录删除。

  • SELECT * FROM act_ru_task #任务执行表,记录当前执行的任务

    说明:启动流程实例,流程当前执行到第一个任务结点,此表会插入一条记录表示当前任务的执行情况,如果任务完成则记录删除。

  • SELECT * FROM act_ru_identitylink #任务参与者,记录当前参与任务的用户或组

  • SELECT * FROM act_hi_procinst #流程实例历史表

    流程实例启动,会在此表插入一条记录,流程实例运行完成记录也不会删除。

  • SELECT * FROM act_hi_taskinst #任务历史表,记录所有任务

    开始一个任务,不仅在act_ru_task表插入记录,也会在历史任务表插入一条记录,任务历史表的主键就是任务id,任务完成此表记录不删除。

  • SELECT * FROM act_hi_actinst #活动历史表,记录所有活动

    活动包括任务,所以此表中不仅记录了任务,还记录了流程执行过程的其它活动,比如开始事件、结束事件。

    获取流程businessKey(业务标识 )

    String businessKey = processInstance.getBusinessKey();

    在activiti的act_ru_execution表,字段BUSINESS_KEY就是存放业务KEY的。

4.流程删除

public void deleteDeployment() {// 流程部署idString deploymentId = "1";ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 通过流程引擎获取repositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();//删除流程定义,如果该流程定义已有流程实例启动则删除时出错repositoryService.deleteDeployment(deploymentId);//设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式,如果流程//repositoryService.deleteDeployment(deploymentId, true);}

说明:

  1.   使用repositoryService删除流程定义,历史表信息不会被删除
    
  2.   如果该流程定义下没有正在运行的流程,则可以用普通删除。
    

如果该流程定义下存在已经运行的流程,使用普通删除报错,可用级联删除方法将流程及相关记录全部删除。

先删除没有完成流程节点,最后就可以完全删除流程定义信息

项目开发中级联删除操作一般只开放给超级管理员使用.

5.流程资源下载

现在我们的流程资源文件已经上传到数据库了,如果其他用户想要查看这些资源文件,可以从数据库中把资源文件下载到本地。

解决方案有:

1、jdbc对blob类型,clob类型数据读取出来,保存到文件目录

2、使用activiti的api来实现

使用commons-io.jar 解决IO的操作

引入commons-io依赖包

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>

通过流程定义对象获取流程定义资源,获取bpmn和png

import org.apache.commons.io.IOUtils;@Testpublic void deleteDeployment(){//        获取引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        获取repositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();
//        根据部署id 删除部署信息,如果想要级联删除,可以添加第二个参数,truerepositoryService.deleteDeployment("1");}public void  queryBpmnFile() throws IOException {//        1、得到引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、获取repositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();
//        3、得到查询器:ProcessDefinitionQuery,设置查询条件,得到想要的流程定义ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myEvection").singleResult();
//        4、通过流程定义信息,得到部署IDString deploymentId = processDefinition.getDeploymentId();
//        5、通过repositoryService的方法,实现读取图片信息和bpmn信息
//        png图片的流InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getDiagramResourceName());
//        bpmn文件的流InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getResourceName());
//        6、构造OutputStream流File file_png = new File("d:/evectionflow01.png");File file_bpmn = new File("d:/evectionflow01.bpmn");FileOutputStream bpmnOut = new FileOutputStream(file_bpmn);FileOutputStream pngOut = new FileOutputStream(file_png);
//        7、输入流,输出流的转换IOUtils.copy(pngInput,pngOut);IOUtils.copy(bpmnInput,bpmnOut);
//        8、关闭流pngOut.close();bpmnOut.close();pngInput.close();bpmnInput.close();}

说明:

  1.   deploymentId为流程部署ID
    
  2.   resource_name为act_ge_bytearray表中NAME_列的值
    
  3.   使用repositoryService的getDeploymentResourceNames方法可以获取指定部署下得所有文件的名称
    
  4.   使用repositoryService的getResourceAsStream方法传入部署ID和资源图片名称可以获取部署下指定名称文件的输入流
    

最后的将输入流中的图片资源进行输出。

Activiti常见操作数据表关系相关推荐

  1. Django 之 Models(Models 模型 数据表关系)

    Models 模型 ORM django连接数据库 models类的使用 定义和数据库表映射的类 字段常用参数 数据库的迁移 数据相关操作 查看数据库中的数据 查找数据 添加数据 常见查找方法 数据库 ...

  2. -day26 必备SQL和表关系及授权

    day26 必备SQL和表关系及授权 课程目标:掌握开发中最常见的SQL语句和表关系及授权相关知识点. 课程概要: 必备SQL(8个必备) 表关系 授权 1. 必备SQL语句 上一节讲解了最基础SQL ...

  3. MYSQL学习笔记06:列属性[NULL,default,comment],主键,自增长,唯一键,数据库设计规范[范式(1NF,2NF,3NF),逆规范化],表关系[1V1,1VN,NVN]

    列属性 列属性又称为字段属性. 在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自增长. NULL属性 NULL属性代表字段为空. 如果对应的值为yes表示该字段允许为null, ...

  4. 轩小陌的Python笔记-day26 必备SQL语句、表关系及授权

    day26 必备SQL和表关系及授权 课程目标:掌握开发中最常见的SQL语句和表关系及授权相关知识点. 课程概要: 必备SQL(8个必备) 表关系 授权 1. 必备SQL语句 上一节讲解了最基础SQL ...

  5. Django模型类操作数据表

    1.创建项目 django-admin startproject my_first_django # 创建一个名称为my_first_django的项目 命令执行后会产生一个项目名称的文件夹和一个ma ...

  6. 03_Mysql_约束与多表关系

    课程笔记Day27 约束 多表关系 第一章 约束 第01节 基础理论 1.约束概述 什么是约束呢?约束有什么作用呢? 生活当中的约束:法律的约束.道德的约束前面学习过的约束:XML当中 DTD约束.S ...

  7. MySQL 表关系及多表操作(联合查询、连接查询、子查询)

    文章目录 表关系 一对一关系 一对多关系 多对多关系 总结 MySQL多表操作 联合查询 联合查询排序 连接查询 交叉连接 内连接 外连接 自然连接 using关键字 子查询 表关系 表关系:一个表代 ...

  8. 数据库自学-多表关系和多表查询

    目录 1.多表关系 1.1一对多 1.2多对多 2.多表查询概述 笛卡尔积概述​编辑 多表查询分类 3. 内连接 1.隐式内连接 2.显式内连接 4.外连接 1.左外连接 2.右外连接 5.自连接 1 ...

  9. MYSQL数据库字段关联_MySQL数据库 字段操作 多表关系(更新中...)

    外键 (foreign key) ## 外键 ```mysql # 作者(author):id,name,sex,age,mobile, detail_id # 作者详情(author_detail) ...

最新文章

  1. 大专生自学Java到找到工作的过程
  2. LNMP_静态文件不记录日志,配置缓存
  3. leetcode 1178. 猜字谜(位运算)
  4. mysql参数之innodb_buffer_pool_size大小设置
  5. 30美味的食物移动应用设计
  6. ideal pom文件安装到maven库中_不装 maven 直接使用 IntelliJ 的插件来把本地 jar 包加入到 maven 仓库...
  7. 移动磁盘数据错误循环冗余检查的文件找回方法
  8. Microsoft Office安装全过程记录
  9. linux进入欢迎界面一直重启,Linux无限重启怎么办
  10. win10计算机睡眠怎么设置密码,windows10系统设置待机密码的图文教程
  11. 学习游戏原画需要什么条件或者基础吗?
  12. java计算机毕业设计九宫格日志网站源代码+数据库+系统+lw文档
  13. Mac OS 10.12 - 如何能够像在Windows一样切换中英文输入法和大小写键?
  14. 重写 toFixed 方法,解决 四舍六入五成双 的问题
  15. TCPIP卷一(8):EIGRP的组建和邻居状态机
  16. listen的第二个参数详解
  17. vs中/EHa、/EHs、/EHsc的区别
  18. SpringBoot3.0整合chatGPT
  19. 百度api 人物漫画脸
  20. 亚洲诚信助力看雪安全开发者峰会

热门文章

  1. 第五章课后题答案 软件需求基础
  2. Linux C/C++网络编程实战-陈硕-笔记15-如何正确使用 TCP
  3. 数独高阶技巧入门之七——AIC Nice Loop
  4. 【云开发】小程序端操作数据库详解
  5. Linux进程间通信的几种方式总结-——linux内核剖析
  6. 三层网络体系组成结构
  7. 无效库(可能不是php库),ThinkPHP设置了数据库session,写入无效的问题
  8. 三菱计算机通讯模块的作用,三菱plc数据通信模块功能说明
  9. windows10+arch linux双系统 uefi启动
  10. shell教程(二) 四种工作模式