Flowable深入浅出-12 Flowable-BPMN操作流程之用户任务UserTask

12 Flowable-BPMN操作流程之用户任务UserTask

  • 定义
  • 常用配置
  • 参数赋值
  • 监听类实现
  • BPMN配置
  • 验证
  • 代码下载
  • 打赏
  • 版权

定义

流程启动后,任务会给到指定的责任人,如果是需要人工审核的任务,那么就需要使用UserTask,也就是用户任务,需要用户完成审批,流程才能继续往下走。

常用配置

  • 执行人 Assignments

  • 执行人类型
    (1)Assignee:代理执行人,一般一个用户
    (2)CandidateUser:候选执行人,一般有多个用户
    (3)CandidateGroup:候选用户组,一般绑定到角色,支持多个用户进行操作。

  • modeler操作
    modeler中配置如下图所示:
    Flowable深入浅出-12 Flowable-BPMN操作流程之用户任务UserTask_第1张图片
    进入后信息如下:
    Flowable深入浅出-12 Flowable-BPMN操作流程之用户任务UserTask_第2张图片

  • 任务监听器Task Listeners

  • 监听器类型
    (1)create:任务创建时,并且所有的属性都被设置好后,进入该回调。
    (2)assignment:任务被委派给某人后.。注意: 当流程执行到达一个userTask时,会先触发一个assignment事件,再触发create事件。
    (3)complete:在任务完成后,且被从运行时数据(runtime data)中删除前触发。
    (4)delete:在任务将要被删除之前发生。注意,当任务通过completeTask完成任务时,它也会被执行。

  • 监听器class:
    回调的委托类,需要实现 org.flowable.engine.delegate.TaskListener接口。

  • modeler操作:
    配置页面如下图:
    Flowable深入浅出-12 Flowable-BPMN操作流程之用户任务UserTask_第3张图片

参数赋值

执行人:分配给admin
任务监听配置为:create类型,实现类为com.hyj.flowlistener.CommonUserStartListener.

监听类实现

监听类主要读取一些环境信息,如执行人,当前的系统变量,修改系统变量等操作,具体代码如下:


public class CommonUserStartListener implements TaskListener {

    /**
     * 日志类
     */
    private static final Logger log = LoggerFactory.getLogger(CommonUserStartListener.class);


    @Override
    public void notify(DelegateTask delegateTask) {
        log.warn("进入通用用户任务启动监听器");

        //查询信息
        log.info("任务执行人:"+delegateTask.getAssignee());
        log.info("任务配置ID: " +delegateTask.getTaskDefinitionKey());

        //查询变量
        Set<String> setNames= delegateTask.getVariableNames();
        if (!CollectionUtils.isEmpty(setNames)){
            log.info("任务变量:"+setNames.toString());
        }

        for (String varName :setNames){
            Object varValue= delegateTask.getVariable(varName);
            log.info("变量名:"+varName+" 变量值:"+ JSON.toJSONString(varValue));
        }

        //修改变量
        delegateTask.setVariable("Test_Var","测试变量");

        log.warn("退出通用用户任务启动监听器");
    }
}

BPMN配置

修改后的我们的BPMN20的xml文件配置如下:


<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
  <process id="test_bpmn" name="测试BPMN模型" isExecutable="true">
    <documentation>测试BPMN模型documentation>
    <startEvent id="start" name="开始">startEvent>
    <endEvent id="end" name="结束">endEvent>
    <userTask id="testUser" name="用户任务测试" flowable:assignee="admin">
      <extensionElements>
        <flowable:taskListener event="create" class="com.hyj.flowlistener.CommonUserStartListener">flowable:taskListener>
        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler">modeler:initiator-can-complete>
      extensionElements>
    userTask>
    <sequenceFlow id="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" sourceRef="start" targetRef="testUser">sequenceFlow>
    <sequenceFlow id="sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44" sourceRef="testUser" targetRef="end">sequenceFlow>
  process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_test_bpmn">
    <bpmndi:BPMNPlane bpmnElement="test_bpmn" id="BPMNPlane_test_bpmn">
      <bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
        <omgdc:Bounds height="30.0" width="30.0" x="210.0" y="60.0">omgdc:Bounds>
      bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
        <omgdc:Bounds height="28.0" width="28.0" x="525.0" y="61.0">omgdc:Bounds>
      bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="testUser" id="BPMNShape_testUser">
        <omgdc:Bounds height="80.0" width="100.0" x="315.0" y="35.0">omgdc:Bounds>
      bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" id="BPMNEdge_sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002">
        <omgdi:waypoint x="239.94999779398907" y="75.0">omgdi:waypoint>
        <omgdi:waypoint x="315.0" y="75.0">omgdi:waypoint>
      bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44" id="BPMNEdge_sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44">
        <omgdi:waypoint x="414.9499999999903" y="75.0">omgdi:waypoint>
        <omgdi:waypoint x="525.0" y="75.0">omgdi:waypoint>
      bpmndi:BPMNEdge>
    bpmndi:BPMNPlane>
  bpmndi:BPMNDiagram>
definitions>

验证

创建新流程:
在这里插入图片描述
启动新流程
在这里插入图片描述
监听器结果:
Flowable深入浅出-12 Flowable-BPMN操作流程之用户任务UserTask_第4张图片

代码下载

代码在CSDN中下载,链接地址:https://download.csdn.net/download/houyj1986/10914484

打赏

如果您觉得该文章对您有帮助,欢迎打赏作者,谢谢。
Flowable深入浅出-12 Flowable-BPMN操作流程之用户任务UserTask_第5张图片
Flowable深入浅出-12 Flowable-BPMN操作流程之用户任务UserTask_第6张图片

版权

版权所有,侵权必究,代码与文章,使用、copy、转载请联系作者。由书山登峰人创作。

你可能感兴趣的:(Flowable,Flowable深入浅出)