Activiti7系列课程1-快速入门

摘要:本文使用的Activiti7具体版本是7.1.0.M1,springboot版本是2.1.5.RELEASE。本文重点讲解在activiti7中如何部署流程、启动流程实例,查询待办和完成任务。

项目搭建

首先,新建一个springboot项目,关于pom.xml文件内容如下:

 
        org.springframework.boot
        spring-boot-starter-parent
        2.1.5.RELEASE
         
    
    com.shareniu.activiti7
    activiti7
    0.0.1-SNAPSHOT
    shareniu-activiti7
    activiti7

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.1
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            com.alibaba
            druid
            1.1.16
        

        
        
            org.activiti.dependencies
            activiti-dependencies
            7.1.0.M1
            pom
        

        
            org.activiti
            activiti-spring-boot-starter
            7.1.0.M1
        

        
        
            org.activiti
            activiti-image-generator
        


        
        
            org.springframework.security
            spring-security-core
            5.1.5.RELEASE
        

SpringBoot启动类

springboot启动类代码如下:

/**
 * @author 分享牛
 */
@SpringBootApplication
public class ShareniuApplication {

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

}

数据源以及Activiti相关配置

数据源以及Activiti相关配置代码如下:

spring:
  activiti:
    db-history-used: true
    check-process-definitions: true # 自动部署验证设置:true-开启(默认)、false-关闭

  datasource:
    url: jdbc:mysql://localhost:3306/reanod_workflow?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&nullCatalogMeansCurrent=true
    username: root
    password: 123
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

 

流程绘制

activiti7目前使用的Bpmn-js设计器,但是目前还没有发布正式版。activiti7流程设计器可以使用eclipse或者idea插件即可。接下来绘制一个简单的请假流程。流程图如下:

上面的流程非常简单,请假天数大于3天,总经理审批;否则分享牛审批。上图中的xml内容如下:



  
    
      SequenceFlow_1c8p9y9
    
    
    
      SequenceFlow_1c8p9y9
      SequenceFlow_1w1yfm1
    
    
      SequenceFlow_1w1yfm1
      SequenceFlow_1mz7srn
      SequenceFlow_18xwjyq
    
    
    
      ${day>3}
    
    
      
    
    
      SequenceFlow_1mz7srn
      SequenceFlow_0kpiffh
    
    
      SequenceFlow_18xwjyq
      SequenceFlow_1gxr4wh
    
    
      SequenceFlow_1gxr4wh
    
    
    
      SequenceFlow_0kpiffh
    
    
  
  
    
      
        
      
      
        
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
        
      
      
        
        
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
      
      
        
        
      
    
  

部署流程

部署流程直接使用RepositoryService即可,相关代码如下:

    @Test
    public void deploy() {

        //创建一个部署对象
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment().name("分享牛请假流程");
        Deployment deployment = null;
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("processes/leave.bpmn20.xml");
            deployment = repositoryService.createDeployment()
                .name("请假流程")
                //指定zip格式的文件完成部署
                .addInputStream("shareniu.bpmn",in)
                .deploy();//完成部署
    }

流程文档部署完毕之后,

会涉及到如下几张表。

  1. ACT_RE_DEPLOYMENT(部署表)
  2. ACT_RE_PROCDEF(流程定义表)
  3. ACT_GE_BYTEARRAY(资源表)
  4. ACT_GE_PROPERTY(通用属性表)
  5. ACT_RU_IDENTITYLINK(运行权限表)

启动流程

启动流程实例使用RuntimeService类。相关代码如下:

    @Test
    public void start() {

        String processDefinitionKey ="leave";//每一个流程有对应的一个key这个是某一个流程内固定的写在bpmn内的
        HashMap variables=new HashMap<>();

        ProcessInstance instance = runtimeService
                .startProcessInstanceByKey(processDefinitionKey,variables);

        System.out.println("流程实例ID:"+instance.getId());
        System.out.println("流程定义ID:"+instance.getProcessDefinitionId());
    }
startProcessInstanceByKey需要的参数,对应ACT_RE_PROCDEF表key_列的值。

查询待办

查询待办任务使用TaskService,相关代码如下:

    /**查询当前人的个人任务*/
    @Test
    public void findTask(){
        List list = taskService.createTaskQuery()//创建任务查询对象
                .list();
        if(list!=null && list.size()>0){
            for(Task task:list){
                System.out.println("任务ID:"+task.getId());
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务的创建时间:"+task.getCreateTime());
                System.out.println("任务的办理人:"+task.getAssignee());
                System.out.println("流程实例ID:"+task.getProcessInstanceId());
                System.out.println("执行对象ID:"+task.getExecutionId());
                System.out.println("流程定义ID:"+task.getProcessDefinitionId());
            }
        }
    }

上述代码执行完毕,会查询任务表ACT_RU_TASK。启动实例之后,实例直接运转到请假申请节点。接下来开始完成该任务。

完成用户任务

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Activiti7系列课程1-快速入门)