flowable 任务节点多实例使用

我们在使用Flowable 工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,在流程运转的时候,可能我们有这样的一个需求,在一个任务节点的时候,我们需要多个人对这个节点进行审批,比如实际中这样一个例子,假如是一个部门的投票,这个部门有5个人,那么当5个人都投票的时候大概分为如下几种:

1.部门所有人都去投票,当所有人都投票完成的时候,这个节点结束,流程运转到下一个节点。(所有的人都需要投票)

2.部门所有人都去投票,只要有任意2/3的人同意,这个节点结束,流程运转到下一个节点。(部分人投票只要满足条件就算完成)。

3.部门中有一个部门经理,只要部门经理投票过了,这个节点结束,流程运转到下一个节点(一票否决权)。

4.部门中根据职位不同,不同的人都不同的权重,当满足条件的时候,这个节点结束,流程运转到下一个节点。比如说所有的人员权重加起来是1,a有0.2的权重,其他的四个人分别是0.1的权重,我们可以配置权重达到0.3就可以走向下一个节点,换言之a的权重是其他人的2倍,那就是a的投票相当于2个人投票。这种需求还是很常见的。

5.部门所有人都去投票,a投票结束到b,b开始投票结束到c,一直如此,串行执行。最终到最后一个人再统计结果,决定流程的运转。

上面的五种情况,我们可以提取出来一些信息,我们的activiti 工作流引擎,必须支持如下功能,才能满足上面的需求:

1.任务节点可以配置自定义满足条件。

2.任务节点必须支持串行、并行。

3.任务节点必须支持可以指定候选人或者候选组。

4.任务节点必须支持可以循环的次数。

5.任务节点必须支持可以自定义权重。

6.任务节点必须支持加签、减签。(就是动态的修改任务节点的处理人)

因为实际上的需求可能比上面的几种情况更加的复杂,上面的6个满足条件,工作流支持前4个,后面的2个条件是不支持的,所以我们必须要扩展activiti 工作流引擎才能使用5、6等的功能。下面我们将详细的介绍前四种条件的使用,在掌握基本使用之后,我们在后面的章节中将详细的介绍,5、6这两种功能以及可能更加复杂的操作。

1.1.2. 串行、并行配置
为了演示如何使用,我们采用由浅入深的使用,结合流程图、流程定义xml、以及代码和数据库的变化来阐释每一个配置的使用以及含义。

流程的详细定义如下图所示:
flowable 任务节点多实例使用_第1张图片

流程的详细定义xml如下:



  
    multiInstance
    
    
      
        2
      
    
    
    
    
    
    
  
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
        
        
      
      
        
        
      
    
  

1.flowable:candidateUsers=“shareniu1,shareniu2,shareniu3,shareniu4” 这个节点可以4个人审核。

2.2 循环2次结束。

3. 串行并行的配置。

1.1.2.1. 串行的配置
修改 中的isSequential为true是串行,isSequential为false是并行。我们测试串行。下面的代码展示启动流程因为是以一个节点所以部署启动后,直接进入多实例任务。

1.1.2.1.1. 流程的部署
@Test

public void addBytes() {

	byte[] bytes = IoUtil.readInputStream(

			ProcessengineTest.class.getClassLoader()

					.getResourceAsStream("com/shareniu/shareniu_flowable_study/bpmn/ch3/multiInstance.bpmn20.xml"),

			"multiInstance.bpmn20.xml");

	String resourceName = "multiInstance.bpmn";

	Deployment deployment = repositoryService.createDeployment().addBytes(resourceName, bytes).deploy();

	System.out.println(deployment);

}

1.1.2.1.2. 流程的启动

        @Test
	public void startProcessInstanceByKey() {
		String processDefinitionKey = "multiInstance";
		ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey(processDefinitionKey);
		System.out.println(startProcessInstanceByKey);
	}

我们按照上面的步骤启动一个流程看一下数据库的变化。

ACT_RU_TASK表的数据有了如下图所示:
在这里插入图片描述
ACT_RU_IDENTITYLINK表的数据有了如下图所示:
flowable 任务节点多实例使用_第2张图片ACT_RU_IDENTITYLINK权限表中,确实把我们设置的人员信息设置进去了,shareniu1,shareniu2,shareniu3,shareniu4现在就有代办信息了。

ACT_RU_VARIABLE表的数据有了如下图示:
在这里插入图片描述
上面重要的变量需要解释一下,要不然还真不好理解,多任务是怎么运转的。

1.nrOfInstances 实例总数。

2.nrOfCompletedInstances 当前还没有完成的实例 nr是number单词缩写 。

3.loopCounter 已经循环的次数。

4.nrOfActiveInstances 已经完成的实例个数。

下面我们结束一个任务看一下,流程走到那个节点了。

1.1.2.1.3. 完成任务

        @Test
	public void complete() {
		String taskId="15011";
		taskService.complete(taskId);
	}

接下来看一下数据库表的变化。

ACT_RU_VARIABLE表的数据有了如下图所示:
flowable 任务节点多实例使用_第3张图片

你可能感兴趣的:(Flowable,Flowable)