任务分配

suaxi
2024-07-05 / 0 评论 / 30 阅读 / 正在检测是否收录...

1. 固定分配

在绘制流程时直接指定 Assignee

1.1固定分配.png

测试

package com.sw.camundademo;

import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.repository.Deployment;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @Author Suaxi
 * @Date 2024/7/3 22:11
 * @Description
 */
@SpringBootTest
public class AssigneeTest {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    @Test
    public void deploy() {
        Deployment deploy = repositoryService.createDeployment()
                .name("请假流程-固定分配")
                .addClasspathResource("flow/01.任务分配-固定分配.bpmn")
                .deploy();
        System.out.println(deploy.getId());
    }

    @Test
    public void startProcess() {
        ProcessInstance processInstance = runtimeService.startProcessInstanceById("Process_0sa1c18:1:db75f76f-3946-11ef-9303-a8a1592cf182");
        System.out.println("processInstance.getId() = " + processInstance.getId());
    }

    @Test
    public void completeTask() {
        taskService.complete("44488821-3947-11ef-98ee-a8a1592cf182");
    }
}


2. 值表达式

通过 ${value} 的形式来设置 Assignee

1.2值表达式.png

测试

package com.sw.camundademo;

import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.repository.Deployment;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

/**
 * @Author Suaxi
 * @Date 2024/7/3 22:11
 * @Description
 */
@SpringBootTest
public class AssigneeTest {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    @Test
    public void deploy() {
        Deployment deploy = repositoryService.createDeployment()
                .name("请假流程-值表达式")
                .addClasspathResource("flow/02.任务分配-值表达式.bpmn")
                .deploy();
        System.out.println(deploy.getId());
    }

    @Test
    public void startProcess() {
        Map<String, Object> variables = new HashMap<>(4);
        variables.put("user1", "admin");
        ProcessInstance processInstance = runtimeService.startProcessInstanceById("Process_0nn4skb:1:cfb647fa-3949-11ef-83c2-a8a1592cf182", variables);
        System.out.println("processInstance.getId() = " + processInstance.getId());
    }

    @Test
    public void completeTaskVariables() {
        Map<String, Object> variables = new HashMap<>(4);
        variables.put("user2", "admin");
        taskService.complete("34ca22b2-394a-11ef-896b-a8a1592cf182", variables);
    }
}


3. 方法表达式

与值表达式类似,当调用无参的方法时,要在表达式方法名的末尾添加括号(与值表达式做区分),如:

# assigneeService是容器中的bean对象,通过调用getAssignee()方法来设置 Assignee
${assigneeService.getAssignee()}
${assigneeService.getAssignee("method expression test")}

1.3方法表达式.png

测试

package com.sw.camundademo.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @Author Suaxi
 * @Date 2024/7/3 22:46
 * @Description
 */
@Slf4j
@Service
public class AssigneeService {

    public String getAssignee() {
        log.info("getAssignee方法执行了");
        return "admin";
    }
}


package com.sw.camundademo;

import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.repository.Deployment;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

/**
 * @Author Suaxi
 * @Date 2024/7/3 22:11
 * @Description
 */
@SpringBootTest
public class AssigneeTest {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    @Test
    public void deploy() {
        Deployment deploy = repositoryService.createDeployment()
                .name("请假流程-方法表达式")
                .addClasspathResource("flow/03.任务分配-方法表达式.bpmn")
                .deploy();
        System.out.println(deploy.getId());
    }

    @Test
    public void startProcess() {
        ProcessInstance processInstance = runtimeService.startProcessInstanceById("Process_128tk93:1:0316ac79-394c-11ef-b118-a8a1592cf182");
        System.out.println("processInstance.getId() = " + processInstance.getId());
    }

    @Test
    public void completeTask() {
        taskService.complete("3858dc36-394c-11ef-bc0e-a8a1592cf182");
    }
    
}


4. 监听器配置

可以通过自定义的监听器配置来指定 Assignee

监听器(根据流程实例的事件类型 create 设置 Assignee)

package com.sw.camundademo.listener;

import lombok.extern.slf4j.Slf4j;
import org.camunda.bpm.engine.delegate.DelegateTask;
import org.camunda.bpm.engine.delegate.TaskListener;

/**
 * @Author Suaxi
 * @Date 2024/7/3 23:07
 * @Description
 */
@Slf4j
public class AssigneeListener implements TaskListener {

    @Override
    public void notify(DelegateTask delegateTask) {
        if (EVENTNAME_CREATE.equals(delegateTask.getEventName())) {
            log.info("自定义监听器触发了...");
            delegateTask.setAssignee("admin");
        }
    }
}


流程图绘制(在 Listener 选项卡下配置 Event Type 和具体的监听器全路径类名)

1.4监听器配置.png

测试方法同理以上其他的任务分配方式

0

评论 (0)

取消