1. 固定分配
在绘制流程时直接指定 Assignee
测试
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
测试
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")}
测试
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 和具体的监听器全路径类名)
测试方法同理以上其他的任务分配方式
评论 (0)