activiti7通过BpmnModel创建流程并启动实例
一、前言
博主在学习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"); // 连接Task List<SequenceFlow> start2first = new ArrayList<>(); start2first.add(s1); startEvent.setOutgoingFlows(start2first); first.setIncomingFlows(start2first); List<SequenceFlow> first2Sencond = new ArrayList<>(); first2Sencond.add(s2); first.setOutgoingFlows(first2Sencond); second.setIncomingFlows(first2Sencond); List<SequenceFlow> second2End = new ArrayList<>(); second2End.add(s3); second.setOutgoingFlows(second2End); endEvent.setIncomingFlows(second2End);
-
构建BpmnModel
// 创建流程 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); // 创建Bpmnmodel BpmnModel bpmnModel = new BpmnModel(); bpmnModel.addProcess(process);
-
部署BpmnModel
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创建的实例,如果存在就没有问题。
三、结尾
完整代码就是,将上述几个模块的代码按照顺序依次往下排即可。