activiti保存流程设计

以下代码支持的版本是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 extends
		DefaultProcessDiagramGenerator {

	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 collaboration for (Pool pool : bpmnModel.getPools()) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo); } // Draw lanes for (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-flows for (Process process : bpmnModel.getProcesses()) { for (FlowNode flowNode : process .findFlowElementsOfType(FlowNode.class)) { drawActivity(processDiagramCanvas, bpmnModel, flowNode, highLightedActivities, highLightedFlows, scaleFactor); } } // Draw artifacts for (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添加两条记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi竹子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值