使用该方式复杂点在于客户端需要手动构造流程引擎中的BpmnModel实例对象,如果开发人员平时设计流程文档时过多依赖图形化工具,可能对流程文档中定义的元素含义与引擎内部相对的元素属性承载类不熟悉,这里举个简单例子,部署下图文档:
public void addBpmnModel(){
SequenceFlow flow1 = new SequenceFlow();
flow1.setId("flow1");
flow1.setName("开始节点->任务节点1");
flow1.setSourceRed("start1");
flow1.setTargetRef("userTask1");
SequenceFlow flow2 = new SequenceFlow();
flow2.setId("flow2");
flow2.setName("任务节点1->任务节点2");
flow2.setSourceRed("userTask1");
flow2.setTargetRef("userTask2");
SequenceFlow flow3 = new SequenceFlow();
flow3.setId("flow3");
flow3.setName("任务节点2->结束节点");
flow3.setSourceRed("userTask2");
flow3.setTargetRef("endEvent");
String resouce = "addBpmnModel";
BpmnModel bpmnModel = new BpmnModel();
Process process = new Process();
process.setId("process1");
StartEvent startEvent = new StartEvent();
startEvent.setId("start1");
startEvent.setName("开始节点");
startEvent.setOutgoingFlows(Arrays.asList(flow1));
UserTask userTask1 = new UserTask();
userTask1.setName("任务节点1");
userTask1.setId("userTask1");
userTask1.setIncomingFlows(Arrays.asList(flow1));
userTask1.setOutgoingFlows(Arrays.asList(flow2));
UserTask userTask2 = new UserTask();
userTask2.setName("任务节点2");
userTask2.setId("userTask1");
userTask2.setIncomingFlows(Arrays.asList(flow2));
userTask2.setOutgoingFlows(Arrays.asList(flow3));
EndEvent endEvent = new EndEvent();
endEvent.setId("endEvent");
endEvent.setName("结束节点");
endEvent.setIncomingFlows(Arrays.asList(flow3));
process.addFlowElement(start);
process.addFlowElement(flow1);
process.addFlowElement(userTask1);
process.addFlowElement(flow2);
process.addFlowElement(userTask2);
process.addFlowElement(flow3);
process.addFlowElement(endEvent);
bpmModel.addProcess(process);
DeploymentBuilder deploymentBuilder = repositoryService.createDepolyment().addBpmnModel(resouces,bpmnModel);
Deployment deployment = deploymentBuilder.deploy();
}
下图对以上流程更通俗易懂: