activiti 5.22 使用任务监听器动态设置任务受理人

先设计流程图,受理人位置直接空着

设置任务监听器并指定好自定义的类的路径,不知道怎么画的可以直接全部复制粘贴到xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<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:activiti="http://activiti.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.activiti.org/processdef">
  <process id="reject" name="reject" isExecutable="true">
    <startEvent id="start"/>
      <userTask id="userTask1" name="请假审批">
          <extensionElements>
              <activiti:taskListener event="create" class="n_reject.MyTaskListener"></activiti:taskListener>
          </extensionElements>
      </userTask>
    <userTask id="userTask2" name="经理审批">
      <extensionElements>
        <activiti:taskListener event="create" class="n_reject.MyTaskListener1"></activiti:taskListener>
      </extensionElements>
    </userTask>
    <endEvent id="end"/>
    <sequenceFlow id="sid-170af7ad-c5ac-4c35-9b2f-788430070d1b" sourceRef="userTask1" targetRef="userTask2"/>
    <sequenceFlow id="flow1" sourceRef="userTask2" targetRef="end" name="同意">
      <conditionExpression>${message=='同意'}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-9559e39b-52b9-4fd1-a9cf-dd5bfaa88e88" sourceRef="start" targetRef="userTask1"/>
    <sequenceFlow id="flow2" sourceRef="userTask2" targetRef="userTask1" name="不同意">
      <conditionExpression>${message=='不同意'}</conditionExpression>
    </sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_reject">
    <bpmndi:BPMNPlane bpmnElement="reject" id="BPMNPlane_reject">
      <bpmndi:BPMNShape id="shape-b3440631-0378-4c7c-924f-be411e3ff6b5" bpmnElement="start">
        <omgdc:Bounds x="-45.0" y="-120.0" width="30.0" height="30.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="shape-c10ad80f-9d77-4aef-bbc3-0948423aa888" bpmnElement="userTask1">
        <omgdc:Bounds x="-60.0" y="-65.0" width="60.000004" height="40.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="shape-e36b84ea-bceb-4215-a6b4-91545d1b0122" bpmnElement="userTask2">
        <omgdc:Bounds x="-62.5" y="0.0" width="65.0" height="40.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="shape-80971338-75dd-4980-8281-898593d03cb9" bpmnElement="end">
        <omgdc:Bounds x="-45.0" y="80.0" width="30.0" height="30.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="edge-043009b0-c3fc-4c93-b5ef-44460f076353" bpmnElement="sid-170af7ad-c5ac-4c35-9b2f-788430070d1b">
        <omgdi:waypoint x="-29.999998" y="-25.0"/>
        <omgdi:waypoint x="-30.0" y="0.0"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-77722180-1fbd-42c0-b93d-bc1630bfdbd6" bpmnElement="flow1">
        <omgdi:waypoint x="-30.0" y="40.0"/>
        <omgdi:waypoint x="-30.0" y="80.0"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-59037ea7-c8ea-4911-8db6-c933e24d2de1" bpmnElement="sid-9559e39b-52b9-4fd1-a9cf-dd5bfaa88e88">
        <omgdi:waypoint x="-30.0" y="-90.0"/>
        <omgdi:waypoint x="-29.999998" y="-65.0"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-ee6aac1c-c0a9-46a6-b7a2-4b2ffb5a3bd8" bpmnElement="flow2">
        <omgdi:waypoint x="2.5" y="20.0"/>
        <omgdi:waypoint x="2.5" y="20.0"/>
        <omgdi:waypoint x="2.5000005" y="20.0"/>
        <omgdi:waypoint x="63.75" y="20.0"/>
        <omgdi:waypoint x="63.75" y="-45.0"/>
        <omgdi:waypoint x="4.7683716E-6" y="-45.0"/>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

这些里面是重点

 然后创建流程引擎,部署流程,启动流程,启动流程的时候会自动跳转到自定义的类中跑自定义的代码,如果没跳的话就是没有设置好路经

package n_reject;

import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.task.Task;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 使用任务监听器动态设置任务受理人
 */
public class TestReject {
    // 得到流程引擎
    private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    // 重置数据库
    @Test
    public void testResetDatabase() {
        ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResourceDefault()
                .setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE)
                .buildProcessEngine();
    }

    // 部署流程使用classpath
    @Test
    public void deployProcess() {
        RepositoryService repositoryService = this.processEngine.getRepositoryService();
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("bpmn/reject.bpmn20.xml")
                .name("请假流程")
                .deploy();
        System.out.println("部署完成,流程部署id:" + deploy.getId());
    }

    // 启动流程并指定下一个任务的办理人
    @Test
    public void startProcess() {
        RuntimeService runtimeService = this.processEngine.getRuntimeService();

        String processDefinitionKey = "reject";
        runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println("启动成功");
    }

    // 查询我的个人任务
    @Test
    public void queryMyTask() {
        TaskService taskService = this.processEngine.getTaskService();
        String assignee = "张三";
        List<Task> list = taskService.createTaskQuery()
                // 条件
                .taskAssignee(assignee) // 根据任务办理人查询任务
                // 排序
                .orderByTaskCreateTime().desc()
                // 结果集
                .list();
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任务id:" + task.getId());
                System.out.println("任务办理人:" + task.getAssignee());
                System.out.println("执行实例id:" + task.getExecutionId());
                System.out.println("任务名称:" + task.getName());
                System.out.println("流程定义id:" + task.getProcessDefinitionId());
                System.out.println("流程实例id:" + task.getProcessInstanceId());
                System.out.println("任务创建时间:" + task.getCreateTime());
                System.out.println("******************************");
            }
        }
    }

    // 办理任务
    @Test
    public void completeTask() {
        TaskService taskService = this.processEngine.getTaskService();
        // 根据任务id去完成任务
        String taskId = "15003";
        Map<String,Object> variables = new HashMap<>();
        variables.put("message","不同意");
        taskService.complete(taskId,variables);
        System.out.println("任务完成");
    }
}

这个类弄好之后先不要着急执行,自定义的类也要弄好 

package n_reject;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class MyTaskListener implements TaskListener {

    @Override
    public void notify(DelegateTask delegateTask) {
        System.out.println("开始指派受理人");
        delegateTask.setAssignee("张三");
    }
}

一共有两个任务监听器,所以我也设置了两个类,比较好理解

package n_reject;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class MyTaskListener1 implements TaskListener {

    @Override
    public void notify(DelegateTask delegateTask) {
        System.out.println("开始指派受理人");
        delegateTask.setAssignee("李四");
    }
}

全部弄好之后可以启动,可以看控制台打桩输出或者观察数据库数据来判断是否成功

第一次上传,多多关照

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值