在Flowable中创建一个会签(multi-instance)流程模型通常涉及以下步骤:
- 创建流程定义:使用Flowable BPMN 2.0 XML文件定义流程。
- 设置会签任务:在流程中设置会签任务,指定参与会签的用户或组。
- 部署流程定义:将BPMN文件部署到Flowable引擎。 以下是一个简单的例子,演示如何使用Java代码动态创建一个会签流程模型:
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.FlowNode;
import org.flowable.bpmn.model.MultiInstanceLoopCharacteristics;
import org.flowable.bpmn.model.ParallelGateway;
import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.SequenceFlow;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FlowableDemo {
public static void main(String[] args) {
// 获取Flowable引擎的RepositoryService
RepositoryService repositoryService = ProcessEngineUtil.getRepositoryService();
// 创建BPMN 2.0 XML文件对应的BpmnModel对象
BpmnModel bpmnModel = createBpmnModel();
// 部署BPMN文件
Deployment deployment = repositoryService.createDeployment()
.addBpmnModel("multiInstanceDemo.bpmn", bpmnModel)
.deploy();
// 获取流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployment.getId())
.singleResult();
// 启动流程实例
ProcessInstance processInstance = repositoryService.startProcessInstanceById(processDefinition.getId());
// 输出流程实例ID
System.out.println("ProcessInstance ID: " + processInstance.getId());
}
private static BpmnModel createBpmnModel() {
BpmnModel bpmnModel = new BpmnModel();
Process process = new Process();
bpmnModel.setProcess(process);
process.setId("multiInstanceDemo");
process.setName("Multi-Instance Demo");
// 创建用户任务
UserTask userTask1 = new UserTask();
userTask1.setId("userTask1");
userTask1.setName("User Task 1");
userTask1.setAssignee("user1");
process.addFlowElement(userTask1);
// 创建并行网关
ParallelGateway parallelGateway = new ParallelGateway();
parallelGateway.setId("parallelGateway");
process.addFlowElement(parallelGateway);
// 创建用户任务
UserTask userTask2 = new UserTask();
userTask2.setId("userTask2");
userTask2.setName("User Task 2");
userTask2.setAssignee("user2");
process.addFlowElement(userTask2);
// 创建并行网关
ParallelGateway parallelGateway2 = new ParallelGateway();
parallelGateway2.setId("parallelGateway2");
process.addFlowElement(parallelGateway2);
// 创建用户任务
UserTask userTask3 = new UserTask();
userTask3.setId("userTask3");
userTask3.setName("User Task 3");
userTask3.setAssignee("user3");
process.addFlowElement(userTask3);
// 创建结束事件
EndEvent endEvent