工作流程flowable

目录

  • Flowable
    • 概念
    • 工作流分类:
            • 网关图标 :
      • 一、会签流程
      • 二、或签流程
      • 分支流程
      • 四、并行流程
    • 第二步:源码及表结构对应关系
        • 第三步 部署一次流程
        • 第四步 启动一个流程实例
            • 关注其中4张表:
            • act_ru_execution ![在这里插入图片描述](https://img-blog.csdnimg.cn/20f6653d6411454d935c6e05c07e93f0.png)
        • 第六步 流程监听器与任务监听器
        • 第七步 候选人组和抢单-拾取任务

Flowable

概念

流程定义,插入:act_re_procdef 和 act_ge_bytearray
流程部署,插入:act_re_develop
工作流程flowable_第1张图片
工作流程flowable_第2张图片
工作流程flowable_第3张图片

工作流分类:

参考: link

官方中文文档:网关

网关图标 :

工作流程flowable_第4张图片

一、会签流程

  1. 适用场景

会签是一种联合审批的特殊审批节点,可理解为一种多人投票机制,一个任务需要多个人同时处理,然后汇总多个人的意见,决定流程下一步该如何执行。流程设计时,若会签审批节点中设置多个参与人,流程运行时,会签节点任务需要多人共同处理,然后汇总多人的处理意见,决定会签节点的处理结果。

例如:员工发起采购申请,需经过多名领导共同审批后,才决定是否可以采购,只要其中1名领导不同意,便退回申请人。

  1. 具体规则

会签分并行会签和顺序会签两种:

(1)并行会签

指同一个审批节点同时设置多个人,如ABC三人,三人会同时收到待办,需全部同意之后,审批才可到下一审批节点。

(2)顺序会签

指同一个审批设置多个人,如ABC三人,三人按顺序人依次收到待办,即A先审批,A提交后B才能审批,需全部同意之后,审批才可下一审批节点。

  1. 设置方法
    工作流程flowable_第5张图片

二、或签流程

  1. 适用场景

一个流程审批节点里有多个处理人,任意一个人处理后就能进入下一个节点。

例如:员工发起采购申请,提交给多名领导审批,只要有一名领导同意即可提交到下一节点。

  1. 具体规则

指同一个审批节点设置多个人,如ABC三人,三人会同时收到审批待办,只要其中任意一人审批即可到下一审批节点。

  1. 设置方法
    工作流程flowable_第6张图片

分支流程

  1. 适用场景

分支流程的适用场景:流程中某个节点后有多个分支节点,根据不同条件执行不同的分支,即不同的数据会走不同的流程路径。

例如:请假申请,可根据请假天数走不同的审批路径,3天以内请假由人力资源审批,超过3天的请假由公司领导审批。

  1. 具体规则

(1)分支流程使用【排他网关】,连接在【排他网关】后面的线条,有分流作用,点击线条可设置流转条件。

(2)上一节点点击【提交】后,根据【排他网关】设置按顺序判断所有分支流转条件,出现满足流转条件时,就进入相应的分支节点。

(3)如果不设置,表示无条件限制,会直接进入该节点;如果设置了流转条件,则只有满足条件才会进入该节点;如果所有条件都不满足,则会流转到设置的默认访问;如果有多个条件满足,则会按设置的条件顺序判断,直到出现第一个满足的条件,就进入该节点。

  1. 设置方法
  2. 工作流程flowable_第7张图片

四、并行流程

工作流程flowable_第8张图片

  1. 适用场景

并行流程适用场景:流程中某个节点后有多个节点需要并行执行,节点的处理人需同时收到流程待办,各自处理待办,当所有分支线上的节点都执行后,流程才进入到下一个节点。

例如:员工提交请假申请,同时送部门经理和人力资源部审批,需要部门经理和人力资源全部审批通过后,才算流程审批通过。

  1. 具体规则

连接在【并行网关】后面的线条,才有并流作用;

上一节点点击【提交】后,无论线条是否设置条件,都自动进入所有的分支节点。当所有分支都执行后,才进入这些分支同时连接的下一个节点;

  1. 设置方法

工作流程flowable_第9张图片

第二步:源码及表结构对应关系

官方中文文档很详细

https://tkjohn.github.io/flowable-userguide/
工作流程flowable_第10张图片

工作流程flowable_第11张图片
工作流程flowable_第12张图片

第三步 部署一次流程


工作流程flowable_第13张图片

工作流程flowable_第14张图片
工作流程flowable_第15张图片

第四步 启动一个流程实例

工作流程flowable_第16张图片

关注其中4张表:
  1. act_ru_execution 运行时 流程执行实例
  2. act_ru_identitylink 运行时 流程实例关联用户表,结点流转 insert (多条)
  3. act_ru_task 运行时 流程实例关联的任务,结点流转 update (一个实例,维持一条)
  4. act_ru_variable 运行时 流程实例关联变量
act_ru_execution 工作流程flowable_第17张图片

act_ru_identitylink #proc_inst_id => act_ru_execution (ID_)
在这里插入图片描述
流转到下一结点后,插入新的记录:当前任务表任务结点处理人
工作流程flowable_第18张图片

IdentitylinkType 常量类 流程实例 用户常量类
工作流程flowable_第19张图片
3. act_ru_task 运行时 流程实例关联的任务
在这里插入图片描述
流转后下一个结点后,act_ru_task 表数据是更新,当前流程实例,处理到的结点;
原先的任务数据 进入 act_hi_task ;
流程流转过程# act_ru_task 是更新,不是新增: 7508 -> 10003 总经理审批
工作流程flowable_第20张图片

  1. act_ru_variable 运行时 流程实例关联变量

  2. act_hi_xxxx 上面四个
    工作流程flowable_第21张图片

  3. 可以添加流程变量
    工作流程flowable_第22张图片

第六步 流程监听器与任务监听器

首先创建流程监听器和任务监听器的实体类,个人比较喜欢使用Delegate Expression方式,其他两种方式也可以

流程监听器


package org.mpc.final_activiti;
 
import java.io.Serializable;
 
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.delegate.Expression;
 
/**
 * 
 * 可以使用 CLASS ,EXPRESSION,DELEGATE EXPRESSSION三种方式来创建监听器,这里使用第三种方式,其他两种方式和
 * 在servicetask中的使用方式相同
 * 
 * */
public class ExectuionListenerDemo implements Serializable, ExecutionListener {
 
	/**
	 * @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
	 */
	private static final long serialVersionUID = 8513750196548027535L;
	private Expression message;
 
	public Expression getMessage() {
		return message;
	}
 
	public void setMessage(Expression message) {
		this.message = message;
	}
 
	@Override
	public void notify(DelegateExecution execution) throws Exception {
		System.out.println("流程监听器" + message.getValue(execution));
	}
 
}

任务监听器

package org.mpc.final_activiti;
 
import java.io.Serializable;
 
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.Expression;
import org.activiti.engine.delegate.TaskListener;
 
/**
 * 
 * 任务监听器,实现TaskListener接口
 * 
 * */
public class TaskListenerDemo implements Serializable, TaskListener {
	private Expression arg;
 
	public Expression getArg() {
		return arg;
	}
 
	public void setArg(Expression arg) {
		this.arg = arg;
	}
 
	@Override
	public void notify(DelegateTask delegateTask) {
		System.out.println("任务监听器:" + arg.getValue(delegateTask));
	}
 
}

这两个监听器只是简单的表明了自己的身份,并打印出在流程中注入给他们的值

接着是流程定义图

展示一下配置结果的xml文件,特别注意一下加注释的地方



  
    
      
        
          
        
      
      
        
          
        
      
    
    
    
      
        
          
            
          
        
        
          
            
          
        
      
    
    
    
      
        
          
            
          
        
        
          
            
          
        
        
          
            
          
        
        
              
          
            
          
        
        
          
            
          
        
        
      
    
    
      
        
          
            
          
        
      
    
    
      
        
          
            
          
        
        
          
            
          
        
      
    
    
    
    
  
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
        
      
      
        
        
      
    
  

工作流程flowable_第23张图片

第七步 候选人组和抢单-拾取任务

工作流程flowable_第24张图片工作流程flowable_第25张图片

工作流程flowable_第26张图片
工作流程flowable_第27张图片

工作流程flowable_第28张图片
工作流程flowable_第29张图片
3-1. 抢单后,不想做了,归还到任务池,否则别人也没法抢
工作流程flowable_第30张图片

3-2. 抢单后,不想做了,不归还到任务池,直接交接给指定人
工作流程flowable_第31张图片
工作流程flowable_第32张图片

  1. 候选人组
    工作流程flowable_第33张图片
    工作流程flowable_第34张图片
    工作流程flowable_第35张图片

工作流程flowable_第36张图片
工作流程flowable_第37张图片
工作流程flowable_第38张图片

你可能感兴趣的:(spring,flowable,java)