activiti工作流流程复制功能的实现

本文介绍如何使用Springboot结合Activiti实现工作流流程模型的复制功能。通过深拷贝源流程设计信息并更新关键属性,如流程key、名称等,完成流程复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录工作,记录生活。

当前公司业务开发过程中有对activiti工作流流程复制的需求,便查找了一些资料和代码,站在巨人的肩膀上总结一下业务功能的实现逻辑和经验。

开发环境:Spring boot + activiti5.22

    /**
     * 流程复制业务实现
     *
     * @param modelId
     */
    public void flowCopy(String modelId) {
        if (StringUtils.isBlank(modelId)) {
            // 提示请求参数信息不能为空
        }
        // 获取复制源流程的模型信息
        byte[] bytes = repositoryService.getModelEditorSource(modelId);
        if (bytes == null || bytes.length < 0) {
            // 源流程信息为空,无效复制
        }
        try {
            // 获取流程设计节点信息
            ObjectNode sourceObjectNode = (ObjectNode) new ObjectMapper().readTree(bytes);
            // 创建复制的目标流程模型, 填充部分默认信息
            Model newModel = repositoryService.newModel();
            ObjectNode modelNode = objectMapper.createObjectNode();
            newModel.setKey("填充流程名称");
            // 填充模型名称, 其中在activiti7.1.M6版本中该name值必须定义为SpringAutoDeployment
            newModel.setName("SpringAutoDeployment");
            newModel.setVersion(1);
            // 其余的信息填充可选填
            modelNode.put(ModelDataJsonConstants.MODEL_NAME, "填充模型名称");
            modelNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
            modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, "填充模型描述信息");
            newModel.setMetaInfo(modelNode.toString());
            // 保存模型
            repositoryService.saveModel(newModel);
            // 对源流程信息进行深拷贝
            ObjectNode editorNode = sourceObjectNode.deepCopy();
            // 以下信息可以通过debugger查看源流程信息, 定义新的流程信息后进行覆盖
            ObjectNode properties = objectMapper.createObjectNode();
            // 流程key的唯一性, 复制后的流程key需要更新, 可定义为源key_copy
            properties.put("process_id", "新的流程key");
            properties.put("name", "新的流程名称");
            properties.put("author", "新的流程创建者定义");
            // 根据源流程复制后的属性信息覆盖
            editorNode.set("properties", properties);
            // 保存新的流程模型的设计信息
            repositoryService.addModelEditorSource(newModel.getId(), editorNode.toString().getBytes(StandardCharsets.UTF_8));
            // 复制成功, 根据新的流程模型设计流程信息发布, 启动实例验证即可
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

该业务可以实现流程模型及流程设计信息的复制,对复制后的模型进行改动后应用即可。

搭配activiti官方的流程设计器进行设计配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值