【审批工作流camunda教程】(一):创建camunda项目=>部署流程定义=>创建流程实例=>走完流程实例

教程一:创建camunda项目=>部署流程定义=>创建流程实例=>走完流程实例
教程二:camunda数据库中的48张表分别的大致含义,数据库表结构介绍
教程三:下载camunda-modeler并将其置为IDEA的外部工具详细过程,且在camunda-modeler中进行绘制流程定义图
教程四:不使用camunda-modeler,使用Fluent Builder API,代码编写流程定义并部署
教程五:代码编写流程定义,并自定义创建需要展示的流程图

教程(一)学习前提:
①了解bpmn2.0(一种规范)基础知识中的:
    startEvent-开始事件,endEvent-结束事件,Task-任务;
②会使用IDEA,以及Maven(JAVA);

1、首先,随便创建一个文件,然后保存下方这个xml文件并更名为:【simpleTest.bpmn20.xml】

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1pgt2on" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.3.0">
  <bpmn:process id="simpleTest" name="simpleTest" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1" camunda:initiator="zzx">
      <bpmn:outgoing>Flow_0f563t7</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_0f563t7" sourceRef="StartEvent_1" targetRef="Activity_1whdatw" />
    <bpmn:endEvent id="Event_1xpl0u1">
      <bpmn:incoming>Flow_08w3ufg</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_08w3ufg" sourceRef="Activity_1whdatw" targetRef="Event_1xpl0u1" />
    <bpmn:userTask id="Activity_1whdatw">
      <bpmn:incoming>Flow_0f563t7</bpmn:incoming>
      <bpmn:outgoing>Flow_08w3ufg</bpmn:outgoing>
    </bpmn:userTask>
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="simpleTest">
      <bpmndi:BPMNEdge id="Flow_08w3ufg_di" bpmnElement="Flow_08w3ufg">
        <di:waypoint x="360" y="120" />
        <di:waypoint x="442" y="120" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0f563t7_di" bpmnElement="Flow_0f563t7">
        <di:waypoint x="188" y="120" />
        <di:waypoint x="260" y="120" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="152" y="102" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1xpl0u1_di" bpmnElement="Event_1xpl0u1">
        <dc:Bounds x="442" y="102" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0bor2fs_di" bpmnElement="Activity_1whdatw">
        <dc:Bounds x="260" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

后续教程(教程三)中有详细提到如何在IDEA中添加一个外部工具,即:camunda-modeler。

此处默认已经添加该外部工具。


2、新建一个SpringBoot的maven项目,在pom文件里面添加依赖(依赖非最新,请根据实际情况进行引用),例如:

<!-- 在 项目最外层 | 依赖管理的模块  的pom文件中添加该依赖管理 -->
<dependencyManagement> 
    <dependencies>
        <!-- camunda 依赖管理 -->
        <dependency>
            <groupId>org.camunda.bpm</groupId>
            <artifactId>camunda-bom</artifactId>
            <version>7.18.0</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement> 


/
/

<!-- 在需要对应依赖的模块,在pom文件中添加下面这个依赖 -->
<dependencies>
    <!-- camunda -->
    <dependency>
	    <groupId>org.camunda.bpm.springboot</groupId>
		<artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
	</dependency>
<dependencies>

3、根据自身的数据库,选择数据库的依赖,此处略(不懂的网上搜相关依赖添加方法)。

4、在application.yml文件中增添相关内容:

camunda.bpm:
  # 流程引擎name
  process-engine-name: camundaEngine
  # 历史级别
  history-level: full
  # 是否自动部署
  auto-deployment-enabled: false
  id-generator: strong
  deployment-resource-pattern:
    - classpath:processes/*.bpmn20.xml
  job-execution:
    enabled: true
  # database:
  #   type: postgres
  #   # 在使用自定义模式和表前缀时,应该手动使用sql脚本创建camunda所需要的的表
  #   table-prefix: camunda_service.
  #   jdbc-batch-processing: true
  authorization:
    enabled: true
  admin-user:
    id: admin
    password: password
spring:
  application:
    name: camunda-demo
  datasource:
    # 使用mysql不能自动建表,解决办法:增添nullCatalogMeansCurrent=true,共47张表
    url: jdbc:mysql://localhost:3306/camundatest?serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver

5、在CamundaTestAppliction文件中修改启动类代码如下:

import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.repository.ProcessDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.List;

@SpringBootApplication
public class CamundaTestApplication implements CommandLineRunner {
    private final Logger logger = LoggerFactory.getLogger(CamundaTestApplication.class);

    @Autowired
    RepositoryService repositoryService;

    public static void main(String[] args) {
        SpringApplication.run(CamundaTestApplication.class, args);
    }

    @Override
    public void run(String... args) {
        List<ProcessDefinition> processDefinitionList = repositoryService.createProcessDefinitionQuery().active().latestVersion().list();
        logger.info("> 处于激活状态的最新版本的流程定义数量: " + processDefinitionList.size());
        for (ProcessDefinition pd : processDefinitionList) {
            logger.info("\t ===> Process definition: " + pd.getKey() + " 版本:" + pd.getVersion());
        }
    }
}

6、将之前保存好的bpmn20.xml文件放入如图目录中:

7、在测试类中进行部署:

import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.repository.Deployment;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleTest {

    @Autowired
    RepositoryService repositoryService;

    // TODO: 2021/1/18 :部署 
    @Test
    public void t1() {
        Deployment deployment = repositoryService.createDeployment()
                .name("simpleTest")
                .addClasspathResource("processes/simpleTest.bpmn20.xml")
                .deploy();
        System.out.println("部署ID: " + deployment.getId());
        System.out.println("部署名称: " + deployment.getName());
        System.out.println("————————————————————————————————————————————————————");
    }
}

8、开启流程实例:

    @Autowired
    RuntimeService runtimeService;

    // TODO: 2021/1/18 :启动流程实例
    @Test
    public void t2(){
        ProcessInstance simpleTest = runtimeService.startProcessInstanceByKey("simpleTest");
        System.out.println("流程实例的ProcessInstanceId: " + simpleTest.getId());
        System.out.println("流程实例的ProcessDefinitionId: " + simpleTest.getProcessDefinitionId());
        System.out.println("————————————————————————————————————————————————————");
    }

9、启动项目启动类CamundaTestApplication,打开浏览器,输入localhost,有可能会进入如下图界面,按照提示输入即可:

有可能直接进入这个界面,直接登录:

登录后,在右上角选择tasklist:

在此处可以看到这个task所处的位置:

10:强制拾取任务并完成任务:

    @Autowired
    TaskService taskService;

    // TODO: 2021/1/18 :(强制)拾取并完成usertask
    @Test
    public void t3(){
        // 获取ProcessInstance的列表
        List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery()
                .processDefinitionKey("simpleTest")
                .active()
                .list();
        if (processInstanceList.isEmpty()){
            throw new RuntimeException("没有流程实例!");
        }
        // 只获取一个流程实例进行(强制)拾取并完成操作
        ProcessInstance processInstance = processInstanceList.get(0);
        // 查询task
        Task task = taskService.createTaskQuery()
                .processInstanceId(processInstance.getId())
                .active()
                .singleResult();
        // 强制拾取操作
        taskService.setAssignee(task.getId(),"user");
        // 完成操作
        taskService.complete(task.getId());
    }

11、再回到浏览器tasklist中,可以看到此task消失了,代表走完了这个流程实例,此时可以在数据库中act_hi_procinst等多个表中看到有关此流程实例的相关历史信息


总结:

以上就是一个关于camunda的simpleTest的全部过程。

内容包含:①bpmn20.xml文件 ②pom依赖 ③application.yml文件 ④启动类 ⑤部署流程定义、启动流程实例、查看流程实例、查询流程实例、查询任务,强制拾取任务、完成任务。

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值