博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti通过API动态创建流程
阅读量:5886 次
发布时间:2019-06-19

本文共 4320 字,大约阅读时间需要 14 分钟。

hot3.png

我在网上搜到了,对代码基本未动,可以参考,下文只是对Demo运行的外围环境进行了补充。

  • Activiti默认配置

@Rule public ActivitiRule activitiRule = new ActivitiRule();

该代码会自动加载根目录下的activiti.cfg.xml;下面是我的activiti.cfg.xml内容:

加载该默认配置,还需要引入如下的Maven依赖:

  
com.h2database
  
h2
  
1.4.184

  • activiti-bpmn-layout引入

源代码中有如下的代码

// 2. Generate graphical informationnew BpmnAutoLayout(model).execute();

其中的BpmnAutoLayout是需要引入如下的Maven依赖

  
org.activiti
  
activiti-bpmn-layout
  
5.17.0

  • 执行结果

原文中未给出执行结果,这里记录一下:结果文件有diagram.png和process.bpmn20.xml;如果不引入activiti-bpmn-layout,可以把代码注释,那么diagram.png不能生成,而且process.bpmn20.xml中没有bpmn2的信息。

diagram.png的内容如下:

100529_tEgf_1053238.png

process.bpmn20.xml的内容如下:

  
    
    
    
    
    
    
    
    
    
      
        
            
        
            
        
            
        
            
        
        
        
        
            
        
        
        
        
            
        
        
        
        
            

  • 附上所有源代码供查找

import java.io.File;import java.io.InputStream;import java.util.List;import org.activiti.bpmn.BpmnAutoLayout;import org.activiti.bpmn.model.BpmnModel;import org.activiti.bpmn.model.EndEvent;import org.activiti.bpmn.model.SequenceFlow;import org.activiti.bpmn.model.StartEvent;import org.activiti.bpmn.model.UserTask;import org.junit.Assert;import org.junit.Rule;import org.junit.Test;import org.activiti.bpmn.model.Process;import org.activiti.engine.repository.Deployment;import org.activiti.engine.runtime.ProcessInstance;import org.activiti.engine.task.Task;import org.activiti.engine.test.ActivitiRule;import org.apache.commons.io.FileUtils;public class ActivitiApiFlowTest {		@Rule	public ActivitiRule activitiRule = new ActivitiRule();	@Test	public void testDynamicDeploy() throws Exception {		// 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		Deployment deployment = activitiRule.getRepositoryService()				.createDeployment().addBpmnModel("dynamic-model.bpmn", model)				.name("Dynamic process deployment").deploy();		// 4. Start a process instance		ProcessInstance processInstance = activitiRule.getRuntimeService()				.startProcessInstanceByKey("my-process");		// 5. Check if task is available		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. Save process diagram to a file InputStream processDiagram = activitiRule.getRepositoryService() .getProcessDiagram(processInstance.getProcessDefinitionId()); FileUtils.copyInputStreamToFile(processDiagram, new File( "target/diagram.png")); // 7. Save resulting BPMN xml to a file InputStream processBpmn = activitiRule.getRepositoryService() .getResourceAsStream(deployment.getId(), "dynamic-model.bpmn"); FileUtils.copyInputStreamToFile(processBpmn, new File( "target/process.bpmn20.xml")); } 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; }}

转载于:https://my.oschina.net/u/1053238/blog/360265

你可能感兴趣的文章
如何使用Core Text计算一段文本绘制在屏幕上之后的高度
查看>>
2010技术应用计划
查看>>
Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现...
查看>>
JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)...
查看>>
【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
查看>>
在 ASP.NET MVC 中使用异步控制器
查看>>
SQL语句的执行过程
查看>>
详解Linux中Load average负载
查看>>
PHP遍历文件夹及子文件夹所有文件
查看>>
WinForm程序中两份mdf文件问题的解决
查看>>
程序计数器、反汇编工具
查看>>
Android N: jack server failed
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
js replace,正则截取字符串内容
查看>>
Thinkphp5笔记三:创建基类
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
Android中EditText,Button等控件的设置
查看>>
TextKit简单示例
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>