# 用户任务
顾名思义,用户任务是需要人工参与处理的。当流程执行到用户任务节点时,流程引擎会给指定的用户(办理人或候选人)或一组用户(候选组)创建待处理的任务项,等待用户的处理。
用户任务的参与者类型分为两种:
⑴分配到一个用户(私有任务);
⑵共享给多个用户(共享任务)。
大部分的流程场景,一个用户任务通常被具体指派一个用户,在 流程引擎中称为办理人。
另外在一些业务处理场景中,一个任务可以被共享给多个人,在流程引擎中通过指派给多个候选人/ 候选组来实现,这类任务在流程引擎只创建一个任务实例,所有被共享的人都可以查询任务,候选人中的用户有权认领(claim)该任务并且完成该任务,当任务被领取之后,其他候选人即无法再看到此任务。
一个用户任务只允许分配一个办理人,但可以分配多个候选人/候选组。
# 图形标记
右上角的标识是用来区分任务类型,可以通过小扳手按需调整,右上角小人物表示用户任务。
# XML定义
<bpmn:userTask id="Activity_04p8l52" name="用户任务"></bpmn:userTask>
# 常用API
//根据流程实例id和指定人查询任务
Task task = taskService.createTaskQuery().processInstanceId("xxx").taskAssignee("xxx").singleResult();
//设置任务的办理人,如果已经存在办理人,该接口将进行覆盖操作
taskService.setAssignee(task.getId(), "userName")
//查询用户作为办理人和候选人的待办任务列表
List<Task> taskList = taskService.createTaskQuery().taskCandiateOrAssigned("groupName").list()
//候选人认领任务
taskService.claim(task.getId(), "userName")
# 多实例任务
用户任务多实例任务,并行和串行图形标记
<bpmn:userTask id="Activity_019450y" name="并行">
<bpmn:multiInstanceLoopCharacteristics />
</bpmn:userTask>
<bpmn:userTask id="Activity_0aqqppk" name="串行">
<bpmn:multiInstanceLoopCharacteristics isSequential="true" />
</bpmn:userTask>
xml内容
内置变量如下:
nrOfInstances:多实例任务总数;
nrOfCompletedInstances:当前已完成实例数;
loopCounter:循环计数;
nrOfActiveInstances:当前活动状态的实例数。像串行多实例,自然当前活动状态的实例数就是1了。
用户可以在建模设置结束条件:
找到右侧多实例中->完成条件配置Completion condition 为${nrOfCompletedInstances == 2}
表示任意两人完成审批