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

2023-12-13 13:00:25

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

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


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

📕一、编写流程文件

image-20231213093353330

<?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文件一条流程图文件

image-20231213093907415

image-20231213094008114

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

image-20231213101820562

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

image-20231213101751752

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

image-20231213102317454

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

/**
 * 启动流程实例
 */
@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运行时任务节点表 生成一条记录,就是图中这个

image-20231213103125502

image-20231213102936321

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

image-20231213103617198

act_hi_identitylink历史处理人表生成记录

image-20231213103823852

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

image-20231213104248384

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

image-20231213104530095

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

image-20231213104928751

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

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

image-20231213105340824

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

image-20231213105702197

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

image-20231213105828652

image-20231213105627646

新生成了一个task任务

act_ru_task 运行时任务节点表

image-20231213105924862

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

act_hi_identitylink 历史流程人员表

image-20231213110101337

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

image-20231213110518049

act_hi_procinst 历史流程实例表 没变化

image-20231213110554850

act_hi_taskinst 历史任务实例表

image-20231213110643909

act_hi_actinst 历史节点表

image-20231213110751705

act_hi_varinst 历史变量表

image-20231213110924608

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

image-20231213111003072

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

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

image-20231213111401893

再来看下各个表变化

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

image-20231213111545309

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

image-20231213111600346

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

image-20231213111613801

act_hi_identitylink 历史流程人员表 没变化

image-20231213111642166

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

image-20231213111710247

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

image-20231213111754995

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

image-20231213112311255

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

image-20231213111922029

act_hi_varinst 历史变量表 没变化

image-20231213111942791

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

image-20231213111959292

🧣七、最后的话

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

搞笑点赞

文章来源:https://blog.csdn.net/itScholar001/article/details/134968328
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。