# 用户任务

顾名思义,用户任务是需要人工参与处理的。当流程执行到用户任务节点时,流程引擎会给指定的用户(办理人或候选人)或一组用户(候选组)创建待处理的任务项,等待用户的处理。

用户任务的参与者类型分为两种:
⑴分配到一个用户(私有任务);
⑵共享给多个用户(共享任务)。

大部分的流程场景,一个用户任务通常被具体指派一个用户,在 流程引擎中称为办理人。

另外在一些业务处理场景中,一个任务可以被共享给多个人,在流程引擎中通过指派给多个候选人/ 候选组来实现,这类任务在流程引擎只创建一个任务实例,所有被共享的人都可以查询任务,候选人中的用户有权认领(claim)该任务并且完成该任务,当任务被领取之后,其他候选人即无法再看到此任务。

一个用户任务只允许分配一个办理人,但可以分配多个候选人/候选组。

# 图形标记

foo

右上角的标识是用来区分任务类型,可以通过小扳手按需调整,右上角小人物表示用户任务。

# 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")    
    

# 多实例任务

foo

用户任务多实例任务,并行和串行图形标记

<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} 
表示任意两人完成审批