import org.activiti.bpmn.model.BpmnModel; //导入方法依赖的package包/类
@Test
public void testDynamicDeploy() throws Exception {
// 1. 创建一个空的BpmnModel和Process对象
BpmnModel model = new BpmnModel();
Process process = new Process();
model.addProcess(process);
process.setId("my-process");
// 创建Flow元素(所有的事件、任务都被认为是Flow)
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. 流程图自动布局(位于activiti-bpmn-layout模块)
new BpmnAutoLayout(model).execute();
// 3. 把BpmnModel对象部署到引擎
Deployment deployment = activitiRule.getRepositoryService().createDeployment()
.addBpmnModel("dynamic-model.bpmn", model).name("Dynamic process deployment")
.deploy();
// 4. 启动流程
ProcessInstance processInstance = activitiRule.getRuntimeService()
.startProcessInstanceByKey("my-process");
// 5. 检查流程是否正常启动
List tasks = activitiRule.getTaskService().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());
// 6. 导出流程图
InputStream processDiagram = activitiRule.getRepositoryService()
.getProcessDiagram(processInstance.getProcessDefinitionId());
// 把文件生成在本章项目的test-classes目录中
String userHomeDir = getClass().getResource("/").getFile();
System.out.println(userHomeDir);
FileUtils.copyInputStreamToFile(processDiagram, new File(userHomeDir + "/diagram.png"));
// 7. 导出Bpmn文件到本地文件系统
InputStream processBpmn = activitiRule.getRepositoryService()
.getResourceAsStream(deployment.getId(), "dynamic-model.bpmn");
FileUtils.copyInputStreamToFile(processBpmn,
new File(userHomeDir + "/process.bpmn20.xml"));
}