activiti流程导入导出

activiti流程导入导出

提示信息:根据modelId进行对应流程的导入导出
使用场景:我们在开发环境新建了一个流程之后,上到测试环境或者生产环境的时候能够更快速准确,不需要自己手动再画一遍流程图,还容易出错



前言

没啥好说的,直接看代码吧


一、根据modelId导出xml流程文件

主要代码如下(示例):

/**
 * 流程定义资源文件
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ProcessDefinitionResourceResponse implements Serializable {

    private String fileName;

    private byte[] fileBytes;
}


public ProcessDefinitionResourceResponse procDefXmlFile(String modelId){

        Model model = repositoryService.getModel(modelId);
        Assert.isTrue(null != model,"流程模型不存在");

        // 获取流程定义
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .deploymentId(model.getDeploymentId()).singleResult();
        Assert.isTrue(null != processDefinition,"流程定义不存在");

        InputStream inputStream = repositoryService.getResourceAsStream(model.getDeploymentId(),processDefinition.getResourceName());

        return ProcessDefinitionResourceResponse.builder()
                .fileBytes(IoUtil.readInputStream(inputStream,processDefinition.getResourceName()))
                .fileName(processDefinition.getResourceName())
                .build();

    }

二、根据xml流程文件导入流程

主要代码如下(示例):

public void createModelByXmlFile(byte[] bytes,String fileName) throws Exception {

        InputStreamSource inputStreamSource = new InputStreamSource(new ByteArrayInputStream(bytes));

        // 解析xml文件
        BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(inputStreamSource,false,true);

        // 查找对应的流程model是否已存在
        Model existModel = repositoryService.createModelQuery()
                .modelName(bpmnModel.getMainProcess().getName())
                .modelKey(bpmnModel.getMainProcess().getId())
                .singleResult();

        // 唯一标识
        Model model = null != existModel?existModel:repositoryService.newModel();

        model.setKey(bpmnModel.getMainProcess().getId());

        // 名称
        model.setName(bpmnModel.getMainProcess().getName());

        // 分类
        model.setCategory(bpmnModel.getMainProcess().getName());

        // 版本号
        model.setVersion(null != existModel?existModel.getVersion()+1:1);

        // 部署
        Deployment deployment = repositoryService
                .createDeployment()
                .name(model.getName())
                .key(model.getKey())
                .addBytes(fileName,bytes)
                .deploy();

        model.setDeploymentId(deployment.getId());

        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .deploymentId(deployment.getId())
                .singleResult();

        ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
        modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
        modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, model.getVersion());
        modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());

        // 相关信息
        model.setMetaInfo(modelObjectNode.toString());

        //保存模型,存储数据到表:act_re_model
        repositoryService.saveModel(model);

        ObjectNode modelNode = bpmnJsonConverter.convertToJson(bpmnModel);

        //更新资源信息到model
        repositoryService.addModelEditorSource(model.getId(), modelNode.toString().getBytes("utf-8"));
    }

总结

看完点个赞用起来吧

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值