Activiti6.0(十二)子流程

目录

一、概述

二、子流程

1、嵌入子流程

2、调用子流程

3、事件子流程

三、总结


一、概述

子流程是包含其他的活动、网关、事件等的活动,其本身构成一个流程,并作为更大流程的一部分,子流程完全在父流程中定义(这就是为什么经常被称作嵌入式子流程),子流程也是实际业务场景中比较常见的一个需求。

Activiti提供了三种子流程的实现,分别是 嵌入子流程、调用子流程、事件子流程,下面分别介绍。

二、子流程

1、嵌入子流程

对应Activiti-app中的

Activiti6.0(十二)子流程_第1张图片

所谓嵌入子流程,即子流程元素内嵌在主流程元素之内,只能在该主流程中使用,外部流程无法调用。这种子流程一般作为局部通用逻辑处理或为特定业务需求服务,会使得主流程看起来比较直观。流程图看如下:

Activiti6.0(十二)子流程_第2张图片

xml为:



  
    
    
      
        
        
        
      
    
    
      
      
        
          
          
          
        
      
      
      
      
    
    
    
    
      
        
      
    
    
    
    
  

可以看到元素与主流程其他元素同级,作为主流程的专属属性,其本质上只有一个流程,因此使用主流程的key也能查询出子流程的任务等信息,主子流程的变量信息也是共享的。

2、调用子流程

对应Activiti-app中的

Activiti6.0(十二)子流程_第3张图片

所谓调用子流程,即需要预先定义一个流程实现,然后在主流程中引用该流程的id,完成内嵌,该方式比较灵活且易复用,因此也是子流程使用中最常用的方式,这种子流程是使用标签进行调用,简单的流程图如下:

Activiti6.0(十二)子流程_第4张图片

其主要配置包括 子流程环节所引用的流程进出子流程的变量传递:

引用元素可以是外部流程的某个id,也可以是个变量,进行动态传递

Activiti6.0(十二)子流程_第5张图片

上面的 In 是指主流程在进入子流程时的变量传递配置,Source代表主流程传递的变量名称,Target代表子流程接收的变量名称,还有一个 Out 配置与之同理。

最后保存后的xml如下:



  
    
    
      
        
        
        
      
    
    
      
        
        
      
    
    
    
    
    
  

可以看到调用子流程主要的xml标签为:以及它的属性calledElement、

由于主子流程是不同的实例,因此在查询子任务时需要使用子流程的key来进行查询。

注意:流程流转到子流程时,子流程的业务键即 Business_key 是为空的,如果需要与主流程保持一致则需要使用到任务监听器,通过变量的形式,先在监听器中先获取主流程的业务键然后以此更新子流程的业务键。

3、事件子流程

对应Activiti-app中的

Activiti6.0(十二)子流程_第6张图片

事件子流程是指通过事件触发的子流程,可以存在于流程级别或子流程级别,用于触发事件子流程的事件,使用启动事件进行配置,因此在事件子流程中不允许使用空启动事件,同时其不允许有任何入口和出口顺序流。

在事件子流程的宿主范围(流程实例或子流程)创建时,创建对启动事件的订阅,当该范围销毁时,删除订阅。

Activiti6.0(十二)子流程_第7张图片

三、总结

嵌入子流程:主子流程本质是同一个流程实例,共享数据

调用子流程:主子流程是不同的实例,但是可以通过监听器方式使得其拥有唯一业务标识,无法通过主流程的key查询子流程的任务,可以通过业务键查询

在实际使用时,Activiti提供的子流程会不满足有些实际业务需求,比如挂起与恢复等等,可使用人工任务进行替代实现。

你可能感兴趣的:(Activiti工作流)