【审批工作流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】



  
    
      Flow_0f563t7
    
    
    
      Flow_08w3ufg
    
    
    
      Flow_0f563t7
      Flow_08w3ufg
    
  
  
    
      
        
        
      
      
        
        
      
      
        
      
      
        
      
      
        
      
    
  


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

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


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


 
    
        
        
            org.camunda.bpm
            camunda-bom
            7.18.0
            import
            pom
        
    
 


/
/



    
    
	    org.camunda.bpm.springboot
		camunda-bpm-spring-boot-starter-webapp
	

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 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文件放入如图目录中:

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

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,有可能会进入如下图界面,按照提示输入即可:

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

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

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

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

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

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

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

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

    @Autowired
    TaskService taskService;

    // TODO: 2021/1/18 :(强制)拾取并完成usertask
    @Test
    public void t3(){
        // 获取ProcessInstance的列表
        List 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文件 ④启动类 ⑤部署流程定义、启动流程实例、查看流程实例、查询流程实例、查询任务,强制拾取任务、完成任务。

你可能感兴趣的:(camunda,SpringBoot,Maven项目,spring,boot,camunda,工作流,activiti,idea)