纯干货,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 运行时流程变量数据表 为空了

🧣七、最后的话

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

相关推荐
Marktowin4 小时前
Mybatis-Plus更新操作时的一个坑
java·后端
赵文宇4 小时前
CNCF Dragonfly 毕业啦!基于P2P的镜像和文件分发系统快速入门,在线体验
后端
程序员爱钓鱼4 小时前
Node.js 编程实战:即时聊天应用 —— WebSocket 实现实时通信
前端·后端·node.js
Libby博仙5 小时前
Spring Boot 条件化注解深度解析
java·spring boot·后端
源代码•宸5 小时前
Golang原理剖析(Map 源码梳理)
经验分享·后端·算法·leetcode·golang·map
小周在成长6 小时前
动态SQL与MyBatis动态SQL最佳实践
后端
瓦尔登湖懒羊羊6 小时前
TCP的自我介绍
后端
小周在成长6 小时前
MyBatis 动态SQL学习
后端
子非鱼9216 小时前
SpringBoot快速上手
java·spring boot·后端