纯干货,activiti入门看这一篇就够了‼️‼️

纯干货,activiti入门看这一篇就够了‼️‼️

详细讲解了一个activiti流程的从生到死,及每个节点数据库表的变化

🔊本文耗时五小时,纯干货,讲解了一个activiti工作流的条件流程从部署到结束每个阶段数据库各个表的变化过程,看完此文相信你对acticiti的表结构会有一个清晰的认识,你的支持对我非常重要‼️,觉得有帮助记得点个赞哈👍

📕一、编写流程文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
  <process id="line" name="连线" isExecutable="true">
    <startEvent id="startEvent1"></startEvent>
    <userTask id="userTask1" name="指定处理人" default="sid-EDDC5664-19C0-4020-A36D-11F20A1E6962" activiti:assignee="admin">
      <extensionElements>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <userTask id="userTask3" name="监听器" activiti:assignee="test">
      <extensionElements>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <sequenceFlow id="sid-13B085EF-2E80-43D1-BEDF-8950B2A9B783" sourceRef="startEvent1" targetRef="userTask1"></sequenceFlow>
    <endEvent id="sid-9AFEE86D-C779-494A-8ACD-D2AC0E96C5AD"></endEvent>
    <sequenceFlow id="sid-DCE668F0-BD17-4EC2-8C65-0334163C1767" sourceRef="userTask3" targetRef="sid-9AFEE86D-C779-494A-8ACD-D2AC0E96C5AD"></sequenceFlow>
    <sequenceFlow id="sid-AE551128-BF5C-4F31-89B5-E90744E1C7D9" name="拒绝" sourceRef="userTask1" targetRef="userTask3">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${msg=='拒绝'}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-EDDC5664-19C0-4020-A36D-11F20A1E6962" name="同意" sourceRef="userTask1" targetRef="sid-9AFEE86D-C779-494A-8ACD-D2AC0E96C5AD">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${msg=='同意'}]]></conditionExpression>
    </sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_line">
    <bpmndi:BPMNPlane bpmnElement="line" id="BPMNPlane_line">
      <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
        <omgdc:Bounds height="30.0" width="30.0" x="480.0" y="45.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="userTask1" id="BPMNShape_userTask1">
        <omgdc:Bounds height="80.0" width="100.0" x="445.0" y="180.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="userTask3" id="BPMNShape_userTask3">
        <omgdc:Bounds height="80.0" width="100.0" x="630.0" y="285.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-9AFEE86D-C779-494A-8ACD-D2AC0E96C5AD" id="BPMNShape_sid-9AFEE86D-C779-494A-8ACD-D2AC0E96C5AD">
        <omgdc:Bounds height="28.0" width="28.0" x="481.0" y="454.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-13B085EF-2E80-43D1-BEDF-8950B2A9B783" id="BPMNEdge_sid-13B085EF-2E80-43D1-BEDF-8950B2A9B783">
        <omgdi:waypoint x="495.0" y="75.0"></omgdi:waypoint>
        <omgdi:waypoint x="495.0" y="180.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-DCE668F0-BD17-4EC2-8C65-0334163C1767" id="BPMNEdge_sid-DCE668F0-BD17-4EC2-8C65-0334163C1767">
        <omgdi:waypoint x="630.0" y="363.64864864864865"></omgdi:waypoint>
        <omgdi:waypoint x="506.076673127176" y="459.43803104223696"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-AE551128-BF5C-4F31-89B5-E90744E1C7D9" id="BPMNEdge_sid-AE551128-BF5C-4F31-89B5-E90744E1C7D9">
        <omgdi:waypoint x="545.0" y="248.3783783783784"></omgdi:waypoint>
        <omgdi:waypoint x="630.0" y="296.6216216216216"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-EDDC5664-19C0-4020-A36D-11F20A1E6962" id="BPMNEdge_sid-EDDC5664-19C0-4020-A36D-11F20A1E6962">
        <omgdi:waypoint x="495.0" y="260.0"></omgdi:waypoint>
        <omgdi:waypoint x="495.0" y="454.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

🖥️二、部署流程

部署时只需要部署xml文件即可,流程图png文件会在act_ge_bytearray表自动生成,当然也可以手动选择png文件

java 复制代码
/**
 * 部署流程定义
 */
@Test
public void deploy() {
    Deployment deployment = repositoryService.createDeployment() // 创建部署
            .addClasspathResource("diagrams/line.bpmn20.xml") // 加载流程资源文件
      .addClasspathResource("diagrams/line.png") // 加载png文件可选
            .name("line流程") // 流程名称
            .deploy(); // 部署
    System.out.println("流程部署ID:" + deployment.getId());
    System.out.println("流程部署Name:" + deployment.getName());
}

act_ge_bytearray 二进制数据表将生成两条记录,一条xml文件一条流程图文件

act_re_deployment 部署信息表 将生成一条部署记录

act_re_procdef 流程定义数据表 将生成一条数据

id生成规则:流程key+版本+随机数

🔖 三、启动刚刚部署的流程生成流程实例

java 复制代码
/**
 * 启动流程实例
 */
@Test
public void start() {
    ProcessInstance pi = runtimeService.startProcessInstanceByKey("line"); // 流程定义表的KEY字段值
    System.out.println("流程实例ID:" + pi.getId());
    System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
}

act_ru_execution 运行时流程执行实例表 生成两条记录,一条根记录 一条主线记录

act_ru_task运行时任务节点表 生成一条记录,就是图中这个

act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息 表生成一条记录

act_hi_identitylink历史处理人表生成记录

act_hi_procinst历史实例表生成一条记录

act_hi_taskinst历史人物表生成一条记录

act_hi_actinst历史节点表生成两条记录

🧣 四、审批通过第一个节点

java 复制代码
@Test
public void completeTask2() {
    Map<String, Object> variables = new HashMap<String, Object>();
    variables.put("msg", "拒绝");
    taskService.complete("100005", variables);//10005为taskid
}

审批通过后再看各个表变化 由于我们是拒绝,所以会走这条线

监听器中固定写死了审批人

新生成了一个task任务

act_ru_task 运行时任务节点表

act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息

act_hi_identitylink 历史流程人员表

act_hi_detail 历史详情表,提供历史变量的查询

act_hi_procinst 历史流程实例表 没变化

act_hi_taskinst 历史任务实例表

act_hi_actinst 历史节点表

act_hi_varinst 历史变量表

act_ru_variable 运行时流程变量数据表 新生成一个运行时变量

📌五、审批通过第二个节点流程结束

csharp 复制代码
/**
 * 完成任务
 */
@Test
public void completeTask() {
    taskService.complete("102504"); //102504为任务id
}

再来看下各个表变化

act_ru_execution 运行时流程执行实例表 为空了

act_ru_task 运行时任务节点表 为空了

act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息 为空了

act_hi_identitylink 历史流程人员表 没变化

act_hi_detail 历史详情表,提供历史变量的查询 没变化

act_hi_procinst 历史流程实例表 变成已结束了

act_hi_taskinst 历史任务实例表 变成结束了

act_hi_actinst 历史节点表 变成结束了多了个结束节点

act_hi_varinst 历史变量表 没变化

act_ru_variable 运行时流程变量数据表 为空了

🧣七、最后的话

🖲要熟练掌握技巧,一定多多练习:纸上得来终觉浅,绝知此事要躬行

相关推荐
星就前端叭1 小时前
【开源】一款基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间项目
前端·后端·开源·webrtc
小林coding2 小时前
阿里云 Java 后端一面,什么难度?
java·后端·mysql·spring·阿里云
AI理性派思考者2 小时前
【保姆教程】手把手教你在Linux系统搭建早期alpha项目cysic的验证者&证明者
后端·github·gpu
从善若水2 小时前
【2024】Merry Christmas!一起用Rust绘制一颗圣诞树吧
开发语言·后端·rust
机器之心2 小时前
终于等来能塞进手机的文生图模型!十分之一体量,SnapGen实现百分百的效果
人工智能·后端
机器之心2 小时前
首次!大模型自动搜索人工生命,做出AI科学家的Sakana AI又放大招
人工智能·后端
运维&陈同学3 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
waterme1onY3 小时前
Spring AOP 中记录日志
java·开发语言·笔记·后端
全栈开发帅帅4 小时前
基于springboot+vue实现的博物馆游客预约系统 (源码+L文+ppt)4-127
java·spring boot·后端
zyh_0305215 小时前
GIN中间件
后端·golang·gin