Activiti的流程定义文件解析
2013-09-06 00:00
549 查看
在实现流程的模拟运行时,需获取流程定义中的相关活动节点信息,故需对流程定义文件进行解析。
此处对流程定义文件的解析,主要是通过参考Activiti流程部署的源码来实现。
代码如下:
此处对流程定义文件的解析,主要是通过参考Activiti流程部署的源码来实现。
代码如下:
/** * <p> * 解析流程定义文件;对于Context设置引擎配置可以将流程定义解析操作设置为命令,这样执行时Context将会自动注入引擎配置 * <p> * @author zhangping * @param file 流程定义资源文件 zip压缩文件 * @param filePath 流程定义文件(.bpmn)的类路径 * @return */ public void bpmnParse(File file, String fileClassPath) { try { Context.setProcessEngineConfiguration(getProcessEngineConfiguration()); /* 加载流程定义文件 获取 DeploymentBuilderImpl 由于该步未执行 deploy方法 故不会执行流程定义与数据库的交互 * 可以采用类路径下的流程定义文件进行部署 * 也可以 通过zip文件部署 ,如下代码 */ DeploymentBuilderImpl deploymentBuilder = (DeploymentBuilderImpl) getRepositoryService() .createDeployment(); if(file != null){ InputStream in = new FileInputStream(file); ZipInputStream zis = new ZipInputStream(in); deploymentBuilder.addZipInputStream(zis); } if(fileClassPath != null){ deploymentBuilder.addClasspathResource(fileClassPath); } // 获取DeploymentEntity DeploymentEntity deploymentEntity = deploymentBuilder.getDeployment(); // 设置部署实体的 信息 包括部署时间 是否为新版本 这两步可以省略 deploymentEntity.setDeploymentTime(ClockUtil.getCurrentTime()); deploymentEntity.setNew(true); // 获取部署实体的流程定义资源文件 由于上文中调用了 addClasspathResource("process/Demo.bpmn") 会将资源注入给DeploymentEntity 故可以取到 Map<String, ResourceEntity> resources = deploymentEntity.getResources(); // 获取BpmnDeployer 都是由构建流程引擎时初始设置的 BpmnDeployer bpmnDeployer = (BpmnDeployer) getProcessEngineConfiguration(). getDeploymentManager().getDeployers().get(0); // 流程bpmn解析类 BpmnParser bpmnParser = bpmnDeployer.getBpmnParser(); for (String resourceName : resources.keySet()) { //判断资源文件是否属于BPMN资源文件 if (isBpmnResource(resourceName)) { ResourceEntity resource = resources.get(resourceName); byte[] bytes = resource.getBytes(); ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); //执行解析 BpmnParse bpmnParse = bpmnParser.createParse().sourceInputStream(inputStream) .deployment(deploymentEntity).name(resourceName); bpmnParse.execute(); //解析后即可通过bpmnParse.getBpmnModel() 获取流程模型信息 bpmnParse.getSequenceFlows() 获取顺序流信息 //由于流程定义文件中一般只定义一个流程,故get(0) Collection<FlowElement> fes = bpmnParse.getBpmnModel() .getProcesses().get(0).getFlowElements(); //fes即为当前流程定义中的所有元素集合,可以按需求进行相应处理 getFlowElement(fes, true, null); } } } catch (Exception e) { e.printStackTrace(); } }
相关文章推荐
- Activiti的流程定义文件解析(后续)
- 扩展Activiti流程定义文件,实现自定义节点属性
- 扩展Activiti流程定义文件,实现自定义节点属性
- AAC 文件解析及解码流程
- 工作流引擎Activiti学习第三天(四)--- 基础知识学习之流程定义
- hadoop之 解析HDFS的写文件流程
- AAC 文件解析及解码流程
- Activiti5流程定义(添加、查询、删除、修改)
- Activiti 删除流程定义
- 头文件不宜定义变量原因解析
- BOS项目练习(流程定义/实例管理,bos用户角色同步activiti用户表组表)
- Android开机流程分析 -- init进程之配置文件解析
- activiti流程定义部署。
- osworkflow的流程定义文件的type怎么配置?
- Activiti学习笔记五 流程定义的管理(二)
- 2016.11.25 activiti的配置文件解析
- jbpm3.2.2部署流程定义文件的错误
- 【入门篇】Activiti完成指定流程定义下任务
- (五)Activiti之查看最新版本的流程定义
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)