定义
手动任务是预期在没有任何业务流程执行引擎或任何应用程序的帮助下执行的任务,它用于建
模那些引擎不需要知道的人所做的工作,以及那些不存在已知系统或 UI 界面的人所做的工作,一
般完善流程结构描述,不被引擎执行。例如,电话技术人员在客户位置安装电话。手工任务就是一
个自动执行的过程,流程引擎只是记录相关的流程历史数据,它用 taskService 查询不到的。
图形标记
手工任务显示为一个普通任务(圆角矩形),左上角是一个手型小图标,如图所示:
XML标记
手动任务的 XML 表示格式如下:
<manualTask id="manualTask1" name="手动任务" />
使用示例
下面我们看一个手动任务的使用示例,设计如图所示流程,这是一个现场兑奖示例流程,
当客户发起申请后,首先到达“管理员审核”用户任务节点,操作完成后流转到“奖品发放”手动
任务节点,自动往下执行到流程结束。
流程对应的 XML 内容如下
<process id="ManualTaskProcess" name="任务-手动任务" isExecutable="true">
<startEvent id="af0d8560213fd4d8b9710b5188cdc6560">
<extensionElements>
<flowable:formData />
</extensionElements>
</startEvent>
<userTask id="a35517e47548f45d49517458e1aab2be1" name="奖品兑换申请">
<extensionElements>
<flowable:formData />
<flowable:assigneeType>static</flowable:assigneeType>
</extensionElements>
</userTask>
<sequenceFlow id="a90f46869ab7e47f5a5e1c11745fcb3d5" sourceRef="af0d8560213fd4d8b9710b5188cdc6560" targetRef="a35517e47548f45d49517458e1aab2be1" />
<endEvent id="Event_1dzfc7c" />
<sequenceFlow id="Flow_0wcdlm3" sourceRef="Activity_0yvfkjj" targetRef="Event_1dzfc7c" />
<manualTask id="Activity_0yvfkjj" name="奖品发放">
<extensionElements>
<flowable:executionListener class="com.dragon.test.bpmn.listener.ManualTaskExecutionListener" event="start" />
<flowable:assigneeType>static</flowable:assigneeType>
<flowable:formData />
</extensionElements>
</manualTask>
<userTask id="Activity_1tmhc8f" name="主办方审核">
<extensionElements>
<flowable:formData />
<flowable:assigneeType>static</flowable:assigneeType>
</extensionElements>
</userTask>
<sequenceFlow id="Flow_05wn51h" sourceRef="a35517e47548f45d49517458e1aab2be1" targetRef="Activity_1tmhc8f" />
<sequenceFlow id="Flow_0f26uqe" sourceRef="Activity_1tmhc8f" targetRef="Activity_0yvfkjj" />
</process>
在以上流程定义中,手动任务 manualTask1 使用 flowable:executionListener 元素定义了一个执行
监听器,该元素并不属于 BPMN2.0 规范,而是 Flowable 扩展出来的元素。在这里设置的执行监听
器会在节点开始(event 属性为 create)时执行。关于执行监听器更详细的介绍和用法。
这里例子中的执行监听器 ManualTaskExecutionListener 内容如下:
@Slf4j
public class ManualTaskExecutionListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
//获取当前节点信息
FlowElement currentFlowElement = execution.getCurrentFlowElement();
log.info("到达手动任务,当前节点名称:{},备注:{}", currentFlowElement.getName(), currentFlowElement.getDocumentation());
log.info("处理结果:奖品线下发放完成!");
}
}
流程到达手动任务后,自动执行往下流转了。
视频地址:
手动任务