[Activiti] UserTask

目录

1.Assignee

1.1使用ID赋值

1.2 根据任务DI,变量方式赋值

1.3 当流程到该节点时,引擎自动调用获取

1.4 根据指定人获取待办任务

2.Candidate User

3. Multi instance

3.1 场景

3.2 属性

3.3 内置变量

3.4并行示例

3.5串行示例

3.6 摘录


需要用户介入的节点,即:需要this.taskService.complete(taskid);完成。


1.Assignee

该任务节点的执行人。赋值方法如下:

1.1使用ID赋值

this.taskService.setAssignee("taskid", "userId");

1.2 根据任务DI,变量方式赋值

#{paramName}

流程流转到该节点时进行赋值,是从variables中获取,如果没有则报错。所以需要上一个步骤完成时就需要确定参数的值。否则:Cannot resolve identifier 'param2'。

设置方法:

// 设置参数param1,第一个节点,需要在启动流程的时候设置
Map<String, Object> map = new HashMap<String, Object>();
map.put("param1", 123);
ProcessInstance pi = this.runtimeService.startProcessInstanceByKey(PROCESS_KEY, "key1" ,map );
System.out.println(pi.getName());

// 完成param1节点 中间节点需要在上一步设定
Task task = this.taskService.createTaskQuery().taskAssignee("123").singleResult();
System.out.println(task.getName() + " " + task.getAssignee());

Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("param2", "234");
this.taskService.complete(task.getId());

注意:设置的variables对整个流程有用,如果节点1,节点2,都设定:#{param},那么只需要在启动时确定就成。同理:中间两个节点也是一样。可以得出 变量的生命周期是伴随着流程的。这里的变量指的是全局变量。

变量存储表:act_ru_variable

1.3 当流程到该节点时,引擎自动调用获取

 

${leaveProcessAssignService.findUsersForSL(execution)},当然也可以设定参数

	/*
	 * 指定受理人
	 * ${leaveProcessAssignService.findUsersForSL(execution)}
	 */
	public List<String> findUsersForSL(DelegateExecution execution){
		Object leave_employee = execution.getVariable("leave_employee");
		System.out.println("设置直接经理 ------------ 请假人:"+leave_employee);
		// 根据 请假人 获取 直接经理信息
		return Arrays.asList("李四1");
	}
	/*
	 * 指定受理人
	 * ${leaveProcessAssignService.findUsersForSL1(execution,"manager")}
	 */
	public List<String> findUsersForSL1(DelegateExecution execution,String kine){
		Object leave_employee = execution.getVariable("leave_employee");
		System.out.println("设置总经理 ------------ 请假人:"+leave_employee+" kine:"+kine);
		// 根据 请假人 获取 直接经理信息
		return Arrays.asList("王五1");
	}

1.4 根据指定人获取待办任务

List<Task> list = this.taskService.createTaskQuery().taskAssignee("[李四1]").list();

 

2.Candidate User

候选人,赋值方法。可以设置多个候选人,使用逗号分隔,可以通过任何一个查询到该任务节点,执行后就算该节点执行了。

  1. 复制:根据taskid复制
  2. 变量复制
  3. 表达式

3. Multi instance

多实例设置,即:把改节点创建多个实例。一个网关或事件 不能成为多实例。

3.1 场景

  1. 投票:投票这个动作(节点),需要很多人来完成。
  2. 会签:一个公文需要多部门联合签署才生效。

3.2 属性

  1. isSequentia:多实例执行方式:true 并行;false(默认) 串行。
  2. collection:为此任务的任务办理人集合,只能设置为变量,不能设置为直接量(如设为用户id集合),变量只能传list<string>,不能传string数组
  3. elementVariable将collection集合的遍历并命名,命名后此变量可在会签任务其他地方引用,如此处在任务办理人处(activiti:candidateUsers)引用
  4. loopCardinality:创建多少个任务实例
  5. completionCondition设置会签任务结束条件

3.3 内置变量

(此变量是用来控制上面的功能的,相当于for中的那个i)

  1. nrOfInstances  实例总数。
  2. nrOfCompletedInstances  当前还没有完成的实例 nr是number单词缩写 。
  3. loopCounter 已经循环的次数。
  4. nrOfActiveInstances 已经完成的实例个数。

条件:${nrOfCompletedInstances/nrOfInstances >= 0.25} 四分之一执行了就算完成,当然也可以使用自定义变量,只是自定义变量的并发没法控制。

3.4并行示例

IsSequentia:true

CandidateUser${list1} // user1,user2

Completion contidion${count1>2}

loopCardinality:2

结果:会给user1和user2 各创建一个任务实例。

条件:流程变量count1,的数值大于2结束

3.5串行示例

IsSequentia:false

CandidateUser:${list1} // user1,user2

Completion contidion:${count1>2}

loopCardinality:3  三个任务实例

3.6 摘录

原文:https://blog.csdn.net/qq_30739519/article/details/51239818

我们在使用activiti 工作流引擎的时候,最常用的肯定是任务节点,因为在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这两种功能以及可能更加复杂的操作。


我不是雷锋,我不记日记。

 

猜你喜欢

转载自blog.csdn.net/weixin_42754896/article/details/103349854