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

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

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

文章目录

    • 一、编写流程文件
    • ️二、部署流程
    • 三、启动刚刚部署的流程生成流程实例
    • 四、审批通过第一个节点
    • 五、审批通过第二个节点流程结束
    • 七、最后的话

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

一、编写流程文件

纯干货,activiti入门看这一篇就够了‼️‼️_第1张图片


<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">modeler:initiator-can-complete>
      extensionElements>
    userTask>
    <userTask id="userTask3" name="监听器" activiti:assignee="test">
      <extensionElements>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler">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">conditionExpression>
    sequenceFlow>
    <sequenceFlow id="sid-EDDC5664-19C0-4020-A36D-11F20A1E6962" name="同意" sourceRef="userTask1" targetRef="sid-9AFEE86D-C779-494A-8ACD-D2AC0E96C5AD">
      <conditionExpression xsi:type="tFormalExpression">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文件

/**
 * 部署流程定义
 */
@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文件一条流程图文件

纯干货,activiti入门看这一篇就够了‼️‼️_第2张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第3张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第4张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第5张图片

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

/**
 * 启动流程实例
 */
@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 运行时流程执行实例表 生成两条记录,一条根记录 一条主线记录

image-20231213102759987

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

纯干货,activiti入门看这一篇就够了‼️‼️_第6张图片

纯干货,activiti入门看这一篇就够了‼️‼️_第7张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第8张图片

act_hi_identitylink历史处理人表生成记录

纯干货,activiti入门看这一篇就够了‼️‼️_第9张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第10张图片

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

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

纯干货,activiti入门看这一篇就够了‼️‼️_第11张图片

四、审批通过第一个节点

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

纯干货,activiti入门看这一篇就够了‼️‼️_第12张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第13张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第14张图片

纯干货,activiti入门看这一篇就够了‼️‼️_第15张图片

新生成了一个task任务

act_ru_task 运行时任务节点表

纯干货,activiti入门看这一篇就够了‼️‼️_第16张图片

act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息 纯干货,activiti入门看这一篇就够了‼️‼️_第17张图片

act_hi_identitylink 历史流程人员表

image-20231213110101337

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

纯干货,activiti入门看这一篇就够了‼️‼️_第18张图片

act_hi_procinst 历史流程实例表 没变化

image-20231213110554850

act_hi_taskinst 历史任务实例表

纯干货,activiti入门看这一篇就够了‼️‼️_第19张图片

act_hi_actinst 历史节点表

image-20231213110751705

act_hi_varinst 历史变量表

纯干货,activiti入门看这一篇就够了‼️‼️_第20张图片

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

image-20231213111003072

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

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

纯干货,activiti入门看这一篇就够了‼️‼️_第21张图片

再来看下各个表变化

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

纯干货,activiti入门看这一篇就够了‼️‼️_第22张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第23张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第24张图片

act_hi_identitylink 历史流程人员表 没变化

image-20231213111642166

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

纯干货,activiti入门看这一篇就够了‼️‼️_第25张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第26张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第27张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第28张图片

act_hi_varinst 历史变量表 没变化

纯干货,activiti入门看这一篇就够了‼️‼️_第29张图片

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

纯干货,activiti入门看这一篇就够了‼️‼️_第30张图片

七、最后的话

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

纯干货,activiti入门看这一篇就够了‼️‼️_第31张图片

你可能感兴趣的:(activiti,数据库,服务器,运维)