activiti6.0新增節點,分享一個activiti5.12改6.0.0的新增節點的程式碼,如果有人拿來用的話有些地方請自行調整
阿新 • • 發佈:2019-01-23
實現activiti的新增節點, 5.12版本改為6.0.0版本
以下為5.12版本的程式碼
以下為我改過之後的6.0.0版本的程式碼
package cn.k12soft.servo.module.activiti.apply.service; import junit.framework.Assert; import org.activiti.bpmn.BpmnAutoLayout; import org.activiti.bpmn.model.*; import org.activiti.bpmn.model.Process; import org.activiti.engine.*; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.List; @Transactional public class DynamicActivitiProcessTest { public final TaskService taskService; public final RuntimeService runtimeService; public RepositoryService repositoryService; @Autowired public DynamicActivitiProcessTest(TaskService taskService, RuntimeService runtimeService, RepositoryService repositoryService ) { this.taskService = taskService; this.runtimeService = runtimeService; this.repositoryService = repositoryService; } /** * 增加節點 */ public void createDynamicDeploy(){ // 1. Build up the model from scratch 從頭開始構建模型 BpmnModel model = new BpmnModel(); Process process = new Process(); model.addProcess(process); process.setId("my-process"); process.addFlowElement(createStartEvent()); process.addFlowElement(createUserTask("task1", "First task", "fred")); process.addFlowElement(createUserTask("task2", "Second task", "john")); process.addFlowElement(createEndEvent()); process.addFlowElement(createSequenceFlow("start", "task1")); process.addFlowElement(createSequenceFlow("task1", "task2")); process.addFlowElement(createSequenceFlow("task2", "end")); // 2. Generate graphical information 生成圖形資訊 new BpmnAutoLayout(model).execute(); // 3. Deploy the process to the engine 將過程部署到引擎中 // 建立流程引擎 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); // 得到流程儲存服務元件 // repositoryService = engine.getRepositoryService(); // 部署流程檔案 Deployment deployment = repositoryService.createDeployment() .addBpmnModel("dynamic-model.bpmn", model).name("Dynamic process deployment").deploy(); // 查詢流程定義 ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() .deploymentId(deployment.getId()).singleResult(); // 4. Start a process instance 啟動一個流程例項 ProcessInstance processInstance = runtimeService.startProcessInstanceById(pd.getId()); // 5. Check if task is available 檢查任務是否可用 List<Task> tasks = taskService.createTaskQuery() .processInstanceId(processInstance.getId()).list(); Assert.assertEquals(1, tasks.size()); Assert.assertEquals("First task", tasks.get(0).getName()); Assert.assertEquals("fred", tasks.get(0).getAssignee()); try { // 6. Save process diagram to a file 將流程圖儲存到一個檔案中 InputStream processDiagram = repositoryService.getProcessDiagram(processInstance.getProcessDefinitionId()); FileUtils.copyInputStreamToFile(processDiagram, new File("k12servo/src/main/resources/processes/diagram.png")); System.out.println(FileUtils.getTempDirectoryPath()); // 7. Save resulting BPMN xml to a file 將產生的BPMN xml儲存到一個檔案中 InputStream processBpmn = repositoryService.getResourceAsStream(deployment.getId(), "dynamic-model.bpmn"); FileUtils.copyInputStreamToFile(processBpmn, new File("k12servo/src/main/resources/processes/process.bpmn")); System.out.println(FileUtils.getTempDirectoryPath()); } catch (IOException e) { e.printStackTrace(); } } protected UserTask createUserTask(String id, String name, String assignee) { UserTask userTask = new UserTask(); userTask.setName(name); userTask.setId(id); userTask.setAssignee(assignee); return userTask; } protected SequenceFlow createSequenceFlow(String from, String to) { SequenceFlow flow = new SequenceFlow(); flow.setSourceRef(from); flow.setTargetRef(to); return flow; } protected StartEvent createStartEvent() { StartEvent startEvent = new StartEvent(); startEvent.setId("start"); return startEvent; } protected EndEvent createEndEvent() { EndEvent endEvent = new EndEvent(); endEvent.setId("end"); return endEvent; } }