定义
顾名思义,用户任务是需要人工参与处理的。当流程执行到用户任务节点时,流程引擎会给指指定的用户(办理人或候选人)或一组用户(候选组)创建待处理的任务项,等待用户的处理。
用户任务的参与者类型分为两种:⑴分配到一个用户(私有任务);⑵共享给多个用户(共享任务)。大部分的流程场景,一个用户任务通常被具体指派一个用户,在 Flowable 中称为办理人。另外在一些业务处理场景中,一个任务可以被共享给多个人,在 Flowable 中通过指派给多个候选人/ 候选组来实现,这类任务在流程引擎只创建一个任务实例,所有被共享的人都可以查询任务,候选人中的用户有权认领(claim)该任务并且完成该任务,当任务被领取之后,其他候选人即无法再看到此任务。
一个用户任务只允许分配一个办理人,但可以分配多个候选人/候选组。
图形标记
用户任务用左上角有一个小用户图标的标准任务(圆角矩形)表示。
XML标记
用户任务在XML中如下定义。其中id是必须属性,name是可选属性。
<userTask id="theTask" name="Important task" />
也可以为用户任务添加描述(description)。事实上任何BPMN 2.0元素都可以有描述。描述由documentation元素定义。
<userTask id="theTask" name="Schedule meeting" >
<documentation>
这是描述信息
</documentation>
</userTask>
可以使用标准Java方式获取描述文本:task.getDescription()
属性描述
分配给办理人(assignee)
用户任务可以直接分配给一个用户,这个任务只能出现在该用户的个人任务列表中,而不会出现在其他人的任务列表中。只有这个用户能查看和办理这个任务,我们称之为办理人。
<userTask id="Activity_1hpkgvi" name="经理" flowable:assignee="${udept.code}">
<extensionElements>
<flowable:assigneeType>static</flowable:assigneeType>
</extensionElements>
</userTask>
<userTask id="Activity_1hpkgvi" name="经理" flowable:candidateUsers="10000">
<extensionElements>
<flowable:assigneeType>idm</flowable:assigneeType>
<flowable:idmCandidateUsers>
[{"id":"1","name":"易烊千玺","code":"10000","sex":0,"mobile":null,"companyId":"1","companyName":"中国石化","deptId":"27","deptName":"领导班子"}]
</flowable:idmCandidateUsers>
</extensionElements>
</userTask>
到期日期(dueDate)
每个任务都可以使用一个字段标志该任务的到期日期(dueDate)。可以使用查询API,查询在给定日期前或后到期的任务。
可以在任务定义中使用扩展指定表达式,以在任务创建时设定到期日期。该表达式必须解析为java.util.Date,java.util.String (ISO8601格式),ISO8601时间长度(例如PT50M),或者null。例如,可以使用在流程里前一个表单中输入的日期,或者由前一个服务任务计算出的日期。如果使用的是时间长度,则到期日期基于当前时间加上给定长度计算。
例如当dueDate使用“PT30M”时,任务在从现在起30分钟后到期。
<userTask id="Activity_0zhp33g" name="经理" flowable:dueDate="P30M">
</userTask>
也可使用变量设置值:
<userTask id="Activity_0zhp33g" name="经理" flowable:dueDate="${dateVariable}">
</userTask>
任务的到期日期也可以使用TaskService,或者在TaskListener中使用传递的DelegateTask修改。
设置到期时间示例
用户指派
用户任务可以直接指派(assign)给用户。可以定义humanPerformer子元素来实现。humanPerformer需要resourceAssignmentExpression来实际定义用户。目前,只支持formalExpressions。
<process >
...
<userTask id='theTask' name='important task' >
<humanPerformer>
<resourceAssignmentExpression>
<formalExpression>kermit</formalExpression>
</resourceAssignmentExpression>
</humanPerformer>
</userTask>
</process>
只能指定一个用户作为任务的humanPerformer。在Flowable术语中,这个用户被称作办理人(assignee)。拥有办理人的任务,在其他人的任务列表中不可见,而只能在该办理人的个人任务列表中看到。
可以通过TaskService获取特定用户办理的任务:
List<Task> tasks = taskService.createTaskQuery().taskAssignee("kermit").list();
视频地址:
FlowableBpmn2.0组件讲解