动态创建工作流
来源:互联网 发布:大数据采集软件 破解 编辑:程序博客网 时间:2024/06/01 09:21
import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;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.ExclusiveGateway;import org.activiti.bpmn.model.Process;import org.activiti.bpmn.model.SequenceFlow;import org.activiti.bpmn.model.StartEvent;import org.activiti.bpmn.model.UserTask;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.repository.Deployment;import org.activiti.engine.runtime.ProcessInstance;import org.activiti.engine.task.Task;import org.apache.commons.io.FileUtils;import org.apache.commons.lang.StringUtils;import org.junit.Assert;/** * *//** * @ClassName: ActivitiTest01 * @Description: TODO(activiti 工作流程图自动生成) * @author liang * @date 2016年4月20日 上午8:32:56 * */public class ActivitiTest01 { public static void main(String[] args) { try { test01(); } catch (IOException e) { e.printStackTrace(); } } public static void test01() throws IOException { System.out.println(".........start..."); ProcessEngine processEngine=getProcessEngine(); // 1. Build up the model from scratch BpmnModel model = new BpmnModel(); Process process=new Process(); model.addProcess(process); final String PROCESSID ="process01"; final String PROCESSNAME ="测试01"; process.setId(PROCESSID); process.setName(PROCESSNAME); process.addFlowElement(createStartEvent()); process.addFlowElement(createUserTask("task1", "节点01", "candidateGroup1")); process.addFlowElement(createExclusiveGateway("createExclusiveGateway1")); process.addFlowElement(createUserTask("task2", "节点02", "candidateGroup2")); process.addFlowElement(createExclusiveGateway("createExclusiveGateway2")); process.addFlowElement(createUserTask("task3", "节点03", "candidateGroup3")); process.addFlowElement(createExclusiveGateway("createExclusiveGateway3")); process.addFlowElement(createUserTask("task4", "节点04", "candidateGroup4")); process.addFlowElement(createEndEvent()); process.addFlowElement(createSequenceFlow("startEvent", "task1", "", "")); process.addFlowElement(createSequenceFlow("task1", "task2", "", "")); process.addFlowElement(createSequenceFlow("task2", "createExclusiveGateway1", "", "")); process.addFlowElement(createSequenceFlow("createExclusiveGateway1", "task1", "不通过", "${pass=='2'}")); process.addFlowElement(createSequenceFlow("createExclusiveGateway1", "task3", "通过", "${pass=='1'}")); process.addFlowElement(createSequenceFlow("task3", "createExclusiveGateway2", "", "")); process.addFlowElement(createSequenceFlow("createExclusiveGateway2", "task2", "不通过", "${pass=='2'}")); process.addFlowElement(createSequenceFlow("createExclusiveGateway2", "task4", "通过", "${pass=='1'}")); process.addFlowElement(createSequenceFlow("task4", "createExclusiveGateway3", "", "")); process.addFlowElement(createSequenceFlow("createExclusiveGateway3", "task3", "不通过", "${pass=='2'}")); process.addFlowElement(createSequenceFlow("createExclusiveGateway3", "endEvent", "通过", "${pass=='1'}")); // 2. Generate graphical information new BpmnAutoLayout(model).execute(); // 3. Deploy the process to the engine Deployment deployment = processEngine.getRepositoryService().createDeployment().addBpmnModel(PROCESSID+".bpmn", model).name(PROCESSID+"_deployment").deploy(); // 4. Start a process instance ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(PROCESSID); // 5. Check if task is available List<Task> tasks = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).list(); Assert.assertEquals(1, tasks.size()); // 6. Save process diagram to a file InputStream processDiagram = processEngine.getRepositoryService().getProcessDiagram(processInstance.getProcessDefinitionId()); FileUtils.copyInputStreamToFile(processDiagram, new File("/deployments/"+PROCESSID+".png")); // 7. Save resulting BPMN xml to a file InputStream processBpmn = processEngine.getRepositoryService().getResourceAsStream(deployment.getId(), PROCESSID+".bpmn"); FileUtils.copyInputStreamToFile(processBpmn,new File("/deployments/"+PROCESSID+".bpmn")); System.out.println(".........end..."); } protected static ProcessEngine getProcessEngine(){ ProcessEngine processEngine=ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration() .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE) .setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activitiDB") .setJdbcDriver("com.mysql.jdbc.Driver") .setJdbcUsername("root") .setJdbcPassword("123456") .setDatabaseSchemaUpdate("true") .setJobExecutorActivate(false) .buildProcessEngine(); return processEngine; } /*任务节点*/ protected static UserTask createUserTask(String id, String name, String candidateGroup) { List<String> candidateGroups=new ArrayList<String>(); candidateGroups.add(candidateGroup); UserTask userTask = new UserTask(); userTask.setName(name); userTask.setId(id); userTask.setCandidateGroups(candidateGroups); return userTask; } /*连线*/ protected static SequenceFlow createSequenceFlow(String from, String to,String name,String conditionExpression) { SequenceFlow flow = new SequenceFlow(); flow.setSourceRef(from); flow.setTargetRef(to); flow.setName(name); if(StringUtils.isNotEmpty(conditionExpression)){ flow.setConditionExpression(conditionExpression); } return flow; } /*排他网关*/ protected static ExclusiveGateway createExclusiveGateway(String id) { ExclusiveGateway exclusiveGateway = new ExclusiveGateway(); exclusiveGateway.setId(id); return exclusiveGateway; } /*开始节点*/ protected static StartEvent createStartEvent() { StartEvent startEvent = new StartEvent(); startEvent.setId("startEvent"); return startEvent; } /*结束节点*/ protected static EndEvent createEndEvent() { EndEvent endEvent = new EndEvent(); endEvent.setId("endEvent"); return endEvent; }}
0 0
- 动态创建工作流
- 动态工作流的设计
- 动态的工作流
- 动态工作流引擎
- struts2 动态工作流
- 如何创建工作流项目
- 创建工作流的数据库
- [MSSQL]创建工作流任务
- 工作流引擎创建
- SharepointDesigner创建一个工作流
- 创建 Oozie 工作流 失败
- 创建Oozie工作流
- 创建 Oozie 工作流
- azkaban 创建工作流
- 工作流创建数据库
- 工作流管理系统开发之二十 动态创建流程多分支节点
- 【工作流】——如何创建流程图工作流
- WF - 动态改变工作流模板
- android的四大组件之Content Provider
- 洛谷1025 数的划分
- 延迟加载和预加载
- SS2H框架整合
- VS发布网站的时候,未能找到该文件
- 动态创建工作流
- MSYS2开发环境搭建 proxy
- PHP 实现汉字转化成拼音
- 如何清理Tomcat缓存
- heap(堆)
- JAVA异常层次结构
- CDN(内容分发网络)技术原理(转)
- 程序员面试金典: 9.13 C和C++ 13.6基类的析构函数为何要声明为virtual?
- android 五大布局之LinearLayout(线性布局)