本文共 2385 字,大约阅读时间需要 7 分钟。
博主在学习activit7中,涉及到有关bpmnModel来维护整个工作流的内容。其中最先要实现的功能是创建出BPMN流程图。对此在进行翻阅资料后,大致总结出以下一套模板。
注意:
1.本篇文章目前并不针对Activiti7提供的所有的BpmnModel.class进行解析。只涉及代码的编写流程。 2.本篇文章默认读者已经搭建好了Springboot2+activit7的环境。
本次Bpmn将搭建如下图所示的bpmn流程图。
// 创建开始StartEvent startEvent = new StartEvent();startEvent.setId("startEvent");startEvent.setName("startEvent");// 创建初级审批人UserTask first = new UserTask();first.setId("first");first.setName("first");// 创建次级审批成员UserTask second = new UserTask();second.setId("second");second.setName("second");// 创建结束点EndEvent endEvent = new EndEvent();endEvent.setId("endEvent");endEvent.setName("endEvent");
// 创建连线SequenceFlow s1 = new SequenceFlow();s1.setId("s1");s1.setName("s1");s1.setSourceRef("startEvent");s1.setTargetRef("first");SequenceFlow s2 = new SequenceFlow();s2.setId("s2");s2.setName("s2");s2.setSourceRef("first");s2.setTargetRef("second");SequenceFlow s3 = new SequenceFlow();s3.setId("s3");s3.setName("s3");s3.setSourceRef("second");s3.setTargetRef("endEvent");// 连接TaskListstart2first = new ArrayList<>();start2first.add(s1);startEvent.setOutgoingFlows(start2first);first.setIncomingFlows(start2first);List first2Sencond = new ArrayList<>();first2Sencond.add(s2);first.setOutgoingFlows(first2Sencond);second.setIncomingFlows(first2Sencond);List second2End = new ArrayList<>();second2End.add(s3);second.setOutgoingFlows(second2End);endEvent.setIncomingFlows(second2End);
// 创建流程Process process = new Process();process.setName("qingjia");process.setId("qingjia");process.addFlowElement(startEvent);process.addFlowElement(first);process.addFlowElement(second);process.addFlowElement(endEvent);process.addFlowElement(s1);process.addFlowElement(s2);process.addFlowElement(s3);// 创建BpmnmodelBpmnModel bpmnModel = new BpmnModel();bpmnModel.addProcess(process);
repositoryService.createDeployment() .name("bpmn") .addBpmnModel("bpmnModel.bpmn", bpmnModel) // 这个addBpmnModel第一个参数一定要带后缀.bpmn .deploy().getId();
// id 需要去查看的数据库的 ACT_RE_PROCDEF表,这里面放着可以部署的流程的id String id = "qingjia:3:145399ab-6f97-11eb-abc9-1e1bb54db19c"; ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
最后查看act_ru_task等运行时表,查看是否存在通过上述Id创建的实例,如果存在就没有问题。
完整代码就是,将上述几个模块的代码按照顺序依次往下排即可。
转载地址:http://wxgwi.baihongyu.com/