欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

必看!一份详尽的Activiti入门指南

最编程 2024-01-25 17:48:37
...

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

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

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

????一、编写流程文件

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

<?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文件

/**
 * 部署流程定义
 */
@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入门看这一篇就够了‼️‼️_ci_02

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

act_hi_identitylink历史处理人表生成记录

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

新生成了一个task任务

act_ru_task 运行时任务节点表

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

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

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

act_hi_identitylink 历史流程人员表

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

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

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

act_hi_procinst 历史流程实例表 没变化

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

act_hi_taskinst 历史任务实例表

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

act_hi_actinst 历史节点表

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

act_hi_varinst 历史变量表

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

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

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

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

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

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

再来看下各个表变化

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

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

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

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

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

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

act_hi_identitylink 历史流程人员表 没变化

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

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

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

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

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

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

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

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

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

act_hi_varinst 历史变量表 没变化

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

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

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

????七、最后的话

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

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