activity 流程每个节点绑定不同的审批人实现动态审批基于spring boot 26 + 和activity 7+代码实现
实现动态审批的流程,可以通过在每个节点上绑定不同的审批人来实现。下面是基于Spring Boot 2.6和Activiti 7+的代码示例:
首先,确保在您的项目中已经添加了Spring Boot和Activiti的依赖。例如,在pom.xml文件中添加以下依赖项:
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>7.1.0</version>
</dependency>
</dependencies>
接下来,创建一个活动流程定义文件(例如,process.bpmn20.xml),其中包含需要动态审批的节点和与之相关的任务定义。例如:
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" targetNamespace="http://www.activiti.org/processdef">
<process id="dynamicApprovalProcess" name="Dynamic Approval Process">
<startEvent id="startEvent" name="Start"></startEvent>
<userTask id="task1" name="Task 1" activiti:assignee="${assignee1}"></userTask>
<userTask id="task2" name="Task 2" activiti:assignee="${assignee2}"></userTask>
<endEvent id="endEvent" name="End"></endEvent>
<sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="task1" targetRef="task2"></sequenceFlow>
<sequenceFlow id="flow3" sourceRef="task2" targetRef="endEvent"></sequenceFlow>
</process>
</definitions>
在上述流程定义中,task1和task2节点的activiti:assignee属性使用${assignee1}和${assignee2}进行动态绑定。
接下来,创建一个服务类(例如,DynamicApprovalService),用于启动流程实例并为每个节点设置动态审批人。例如:
import org.activiti.engine.*;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DynamicApprovalService {
@Autowired
private RuntimeService runtimeService;
public void startDynamicApprovalProcess(String assignee1, String assignee2) {
// 设置动态变量
VariableMap variables = Variables.createVariables()
.putValue("assignee1", assignee1)
.putValue("assignee2", assignee2);
// 启动流程实例
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey("dynamicApprovalProcess", variables);
}
}
在上述示例中,startDynamicApprovalProcess方法使用runtimeService启动流程实例,并通过VariableMap设置动态变量assignee1和assignee2。
最后,在您的控制器或其他适当的位置,调用DynamicApprovalService的startDynamicApprovalProcess方法,传递需要绑定的动态审批人。例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DynamicApprovalController {
@Autowired
private DynamicApprovalService dynamicApprovalService;
@GetMapping("/startProcess")
public String startProcess(@RequestParam("assignee1") String assignee1, @RequestParam("assignee2") String assignee2) {
dynamicApprovalService.startDynamicApprovalProcess(assignee1, assignee2);
return "Process started successfully.";
}
}
在上述示例中,通过GET请求的参数传递了动态审批人,并调用了dynamicApprovalService的startDynamicApprovalProcess方法。
这样,当您调用/startProcess接口时,将启动一个动态审批流程实例,并为每个节点动态绑定不同的审批人
原文地址: https://www.cveoy.top/t/topic/igCW 著作权归作者所有。请勿转载和采集!