activiti保存流程设计

来源:互联网 发布:视频压缩的常用算法是 编辑:程序博客网 时间:2024/06/07 05:09

以下代码支持的版本是activiti5-13

流程设计图画完之后,就要保存,保存会操作两个表,act_re_model和act_ge_bytearray。

保存act_re_model记录

Model modelData = repositoryService.getModel(modelId);//先通过modelId去查找Model记录//如果没有就创建if ( modelData == null ){modelData = repositoryService.newModel();}//然后修改属性信息String processName = "流程名称";String processkey = "流程Key";String category = "分类";String documentation = "流程描述";// 创建model需要的MetaInfo属性数据ObjectNode modelObjectNode = objectMapper.createObjectNode();modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processName); modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);// 版本modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,documentation); modelData.setMetaInfo(modelObjectNode.toString());// 设置MetaInfo属性数据modelData.setName(processName);modelData.setKey(processkey);modelData.setCategory(category);// 保存模型repositoryService.saveModel(modelData);

保存act_ge_bytearray记录

1)保存二进制源xml

String xml = "";//真实的xml格式数据repositoryService.addModelEditorSource(modelData.getId(),xml.getBytes("UTF-8"));

2)保存流程图片

InputStream in = new ByteArrayInputStream(xml.getBytes("UTF-8"));InputStreamSource xmlSource = new InputStreamSource(in);BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter();BpmnModel bpmnModel = bpmnXMLConverter.convertToBpmnModel(xmlSource, true, false, "UTF-8");List highLightedActivities = new ArrayList();MyDefaultProcessDiagramGenerator defaultProcessDiagramGenerator = new MyDefaultProcessDiagramGenerator();InputStream is = defaultProcessDiagramGenerator.generateDiagram(bpmnModel, "png", highLightedActivities);ByteArrayOutputStream baos = new ByteArrayOutputStream();try {byte[] buff = new byte[1024];while ((is.read(buff)) != -1) {baos.write(buff);}byte[] result = baos.toByteArray();// 添加图片源this.repositoryService.addModelEditorSourceExtra(modelData.getId(), result);} catch (IOException e) {message = "流程图创建失败!";e.printStackTrace();}

因为此代码用的activiti版本是5-13,而图片生成是用5-22版本,需要将activiti-image-generator-5.22.0.jar导入5-13工程,本来图片生成包是独立的,但其中有些方法改动了,所以下面自定义一个图片生成类,集成DefaultProcessDiagramGenerator,代码如下:

import java.io.InputStream;import java.util.Collections;import java.util.List;import org.activiti.bpmn.model.Artifact;import org.activiti.bpmn.model.BpmnModel;import org.activiti.bpmn.model.FlowNode;import org.activiti.bpmn.model.GraphicInfo;import org.activiti.bpmn.model.Lane;import org.activiti.bpmn.model.Pool;import org.activiti.bpmn.model.Process;import org.activiti.bpmn.model.SubProcess;import org.activiti.image.impl.DefaultProcessDiagramCanvas;import org.activiti.image.impl.DefaultProcessDiagramGenerator;/** * @author 竹子 * 自定义流程图管理器 */public class MyDefaultProcessDiagramGenerator extendsDefaultProcessDiagramGenerator {public InputStream generateDiagram(BpmnModel bpmnModel, String imageType,List highLightedActivities, List highLightedFlows,String activityFontName, String labelFontName,String annotationFontName, ClassLoader customClassLoader,double scaleFactor) {return generateProcessDiagram(bpmnModel, imageType,highLightedActivities, highLightedFlows, activityFontName,labelFontName, annotationFontName, customClassLoader,scaleFactor).generateImage(imageType);}public InputStream generateDiagram(BpmnModel bpmnModel, String imageType,List highLightedActivities) {return generateDiagram(bpmnModel, imageType, highLightedActivities,Collections. emptyList());}public InputStream generateDiagram(BpmnModel bpmnModel, String imageType,List highLightedActivities, List highLightedFlows) {return generateDiagram(bpmnModel, imageType, highLightedActivities,highLightedFlows, null, null, null, null, 1.0);}protected DefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType,List highLightedActivities, List highLightedFlows,String activityFontName, String labelFontName,String annotationFontName, ClassLoader customClassLoader,double scaleFactor) {prepareBpmnModel(bpmnModel);DefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName,annotationFontName, customClassLoader);// Draw pool shape, if process is participant in collaborationfor (Pool pool : bpmnModel.getPools()) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId());processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo);}// Draw lanesfor (Process process : bpmnModel.getProcesses()) {for (Lane lane : process.getLanes()) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(lane.getId());processDiagramCanvas.drawPoolOrLane(lane.getName(), graphicInfo);}}// Draw activities and their sequence-flowsfor (Process process : bpmnModel.getProcesses()) {for (FlowNode flowNode : process.findFlowElementsOfType(FlowNode.class)) {drawActivity(processDiagramCanvas, bpmnModel, flowNode,highLightedActivities, highLightedFlows, scaleFactor);}}// Draw artifactsfor (Process process : bpmnModel.getProcesses()) {for (Artifact artifact : process.getArtifacts()) {drawArtifact(processDiagramCanvas, bpmnModel, artifact);}List subProcesses = process.findFlowElementsOfType(SubProcess.class);if (subProcesses != null) {for (SubProcess subProcess : subProcesses) {for (Artifact subProcessArtifact : subProcess.getArtifacts()) {drawArtifact(processDiagramCanvas, bpmnModel,subProcessArtifact);}}}}return processDiagramCanvas;}}
以上保存的结果是:act_re_model添加一条记录,act_ge_bytearray添加两条记录。

原创粉丝点击