Activiti7 工作流非原流程终止

这篇具有很好参考价值的文章主要介绍了Activiti7 工作流非原流程终止。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

Activiti7 工作流非原流程终止
正常工作流,需要经过 node1、node2 才能结束。
现在要求已经开启的流程,目前停留在 node1,可以提前终止。

方案

一般根据实际需要,可以有几种做法:

  1. 新绘制流程图,新增 node1 结束的流程分支,替换原流程
  2. SQL 的方式,将该流程的数据,手动修改为终止的状态
  3. 代码动态修改流程模型,并使其流转只流向终止状态

下面分析一下这些方式的应用场景及优缺点。

新绘制流程图

新流程图

Activiti7 工作流非原流程终止

替换原流程图

UPDATE ACT_GE_BYTEARRAY SET BYTES_ = '新流程的对应值' WHERE _ID = xxx AND NAME_ = 'xxxxx.bpmn';
## 以下根据情况可选,在使用 activiti5 时有碰到
UPDATE ACT_GE_BYTEARRAY SET BYTES_ = '新流程的对应值' WHERE _ID = xxx AND NAME_ = 'xxx.png';
UPDATE ACT_GE_BYTEARRAY SET BYTES_ = '新流程的对应值' WHERE _ID = xxx AND NAME_ = 'source';
UPDATE ACT_GE_BYTEARRAY SET BYTES_ = '新流程的对应值' WHERE _ID = xxx AND NAME_ = 'source-extra';

后续根据条件,正确提交即可,可以正常流转。

优缺点

  • 优点
    • 新的流程分支可以从流程图上体现,一目了然;
    • 符合工作流的生命周期,正常应用工作流的监听器
    • 全局应用
  • 缺点
    • 修改工作流比较麻烦
    • 如果改动比较多,而且部分流程已经过了 node1 的话,可能会导致实时绘制流程报错。
    • 需要注意新老代码层面的兼容性(前提数据库唯一,但代码蓝绿发布)
应用场景

改动是全局的;
工作流模型改动有良好的版本管理和上线流程;
流程图需要体现这个分支流程(是正常业务应该关心的流转)

SQL修改工作流数据

DELETE FROM act_ru_task  WHERE ID_ = 'xxxx';
DELETE FROM act_ru_variable  WHERE PROC_INST_ID_ = 'xxxx';
DELETE FROM act_ru_execution WHERE ID_ = 'xxxx';
UPDATE act_hi_taskinst SET END_TIME_ = '2023-02-20 21:57:47.033000', DURATION_= 4180506 WHERE ID_ = 'xxxx';
UPDATE act_hi_procinstSET END_TIME_ = '2023-02-20 21:57:47.033000', DURATION_= 4180506, END_ACT_ID_ = 'endevent_oc' WHERE PROC_INST_ID_ = 'xxxx';

优缺点

  • 优点
    • 一次性,不用开发临时性代码
  • 缺点
    • SQL 改动风险高
    • 无法使用工作流层面的监听器
    • 如果存在业务数据修复,需要同时处理
应用场景

一次性流程关闭,无业务数据修复

代码动态修改流程模型

    /**
     * 提前终止业务流程实例,适用场景:当前任务节点没有对应的流程结束节点(业务变更导致需要终止流程)
     */
    public void terminateProcessByBusinessKey(String businessKey) {
        taskService.createTaskQuery()
                .processInstanceBusinessKey(businessKey)
                .list()
                .forEach(task -> terminateProcessByTask(task.getId(), task));
    }

    private void terminateProcessByTask(String taskId, Task task) {
        if (Objects.isNull(task)) {
            log.warn("流程任务实例不存在. taskId: {}", taskId);
            return;
        }
        BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());

        EndEvent endEvent = bpmnModel.getMainProcess().findFlowElementsOfType(EndEvent.class).get(0);
        FlowNode currentNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(task.getTaskDefinitionKey());
        List<SequenceFlow> orignOutgoingFlows = currentNode.getOutgoingFlows();

        SequenceFlow endFlow = new SequenceFlow();
        endFlow.setId("flow_to_temp_end");
        endFlow.setSourceFlowElement(currentNode);
        endFlow.setTargetFlowElement(endEvent);
        // 将当前节点的出向分支替换为流向 flow_to_temp_end
        currentNode.setOutgoingFlows(Lists.newArrayList(endFlow));
        taskService.complete(taskId);
        // 流转完恢复
        currentNode.setOutgoingFlows(orignOutgoingFlows);
        log.info("非正常方式完成流程. taskId: {},procDefKey: {},caseNo:{}", taskId, bpmnModel.getMainProcess().getId(), task.getBusinessKey());
    }

图例:Activiti7 工作流非原流程终止文章来源地址https://www.toymoban.com/news/detail-414787.html

优缺点

  • 优点
    • 通用的非正常关闭逻辑,不受限于某个节点
    • 可以应用工作流的生命周期,不影响事件触发或监听器
    • 可以便于处理业务数据的非正常结束
  • 缺点
    • 模型的改动是全局的,注意并发
    • 无法体现在流程图上
    • 实时流程图的生成会有影响
应用场景
  • 不仅限于一个节点的流程关闭
  • 业务不强要求流程关闭的分支体现在图上
  • 短期方案,逐步替换为正常流程

到了这里,关于Activiti7 工作流非原流程终止的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【业务功能篇36】Springboot+activiti7 工作流引擎

    业务场景:前段时间总结的有一个告警工单流程,我们都是直接自己建表,状态节点,操作节点,都是自定义设计的,而到后面会有很多的工单流程,比如创建一个遗留问题电子流,指定处理人进行分析闭环,等等多种电子流,后期重复的开发工作以及维护工作会越来越多。

    2024年02月12日
    浏览(51)
  • 【业务功能篇38】上篇:Springboot+activiti7 工作流引擎 增加网关组件、Assignment分配权限

    在前面的一篇文章中,简单举例了一个 工单电子流,【业务功能篇36】Springboot+activiti7 工作流引擎_studyday1的博客-CSDN博客仅有一个子任务,这种一般是针对比较简单的一个遗留问题记录场景,今天再介绍一个,相对比较复杂的流程,多个处理,审批节点任务,通过排他网关组

    2024年02月13日
    浏览(43)
  • Activiti 工作流简介

    1、什么是工作流         工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。 1.2、工作流系统   

    2024年02月04日
    浏览(51)
  • 【activiti】工作流入门基础概念

    为什么使用activiti 状态--------------------------------------------------引擎engin(业务变动不影响程序的进行) 每个人只能看到个人负责的,流程变更困难 bpmn建模语言 activiti流程步骤 步骤: 1、部署流程 2、定义流程 3、部署流程定义:使用activiti中的API把流程定义存储,在Acitivti执行过

    2024年02月16日
    浏览(39)
  • springboot项目集成activiti工作流引擎

    一、一种较为简单,只需要使用idea的插件来画流程图。(我所使用的的插件是Activiti BPMN visualizer) 二、另一种就是可以使用(在线流程设计器)或者(页面设计器部署到自己项目中)来画流程图。 本文是将流程设计页面部署到了项目中 一、使用idea的插件来画流程图。  二

    2024年02月10日
    浏览(44)
  • Spring Boot + Activiti 结合,实现工作流

    Activiti是一个工作流引擎,Activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由Activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,Activiti流程就是数据库表

    2023年04月13日
    浏览(78)
  • 若依框架SpringBoot+Activiti工作流的使用

    使用简介:本技术点主要是针对类审批的业务流程的建模,可以有:任务发布(即流程开始)到一级一级的审批到最终结束(即流程结束)一整套完备的模型 1、idea下载activiti插件 ider以前版本下载actiBPM,但是新版ider这个插件已经被淘汰,已经被下面这个替代     2、单独起

    2024年02月11日
    浏览(38)
  • SpringBoot整合Activiti实现工作流的低代码系统(附源码+文档)

    activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。 springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工作流表单

    2024年04月09日
    浏览(46)
  • 后端面试话术集锦第 九 篇:Activiti工作流面试话术

    这是后端面试集锦第九篇博文—— Activiti 工作流面试话术❗❗❗ 工作流这块儿,实际在工作中使用的时候, Activiti 用的居多,当然还有一些其他的工作流引擎。 在网上看了也大概看了一下,其他的像 JBPM 以及 workflow 等用的情况来讲不是很多。 所以说 Activiti 目前来讲用的比

    2024年02月10日
    浏览(41)
  • SpringBoot整合Activiti实现工作流的低代码系统(附源码和配套文档)

    activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。 springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工作流表单

    2024年03月15日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包