`
man1900
  • 浏览: 432807 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于Activiti或JBPM流程的回退的讨论之一

    博客分类:
  • JBPM
 
阅读更多

 

需求:
         流程的回退是一个复杂的计算,特别是在中国式的流程里,现实中的流程则相对简单,如我把一个审批文件提交出去后,若由两个人(张三、李四)同时处理,若张三或李四需要把文件退回来,文件直接打回到发起人我这里,这样张三或李四手上不再存在审批文件,但对于JBPM或Activiti的流程回退则做不到这么简单。
但原则上我们要符合这种现实的要求:流程由谁提交过来,则退回给谁。

 

http://www.redxun.cn:8020/saweb/login.jsp

user:admin

pwd:1

 

更多了解

http://redxun.iteye.com/blog/2406509


为了弄清这个关系,我们以一个稍为复杂一点Activiti流程为例。

 


以上流程包括了多种流程节点,如分支,并行节点,多实例任务,子流程。流程执行过程中我们记录其任务完成的每个一步,然后归纳其回退的算法实现。其中,A为多实例任务,我们在后台指定了其两个执行用户,我们启动流程,然后记录每一步执行的情况。

 

 

流程产生后,产生任务如:

 

 

 

当A的两个实例任务完成后,将会产生后续的任务,即产生B、C、E任务,在这三任务中,若回退的话,均是回退至A,并且是由A原来的执行人员来处理。由于A是多实例任务,其执行的任务个数为动态,若当时执行数为2(并且为张三、李四)两人处理,则回退后,也是回到这两个人那里处理。如下所示:

 

而另外,E回退时,也需要B、C的任务删除(在某种情况下也可能不删除),现实中相当于我把任务完成后,同时提交给三个人去处理,其中一个人回退,不能把另一个任务的工作也回退回来处理。

在B点上回退,C需要销毁,E也存在的话,也不合理,因为在A再往下执行时,又会重新产生B、C、E,因此,为了减少复杂度,需要全部删除B、C、E,回退至A。

当E往下执行时,会产生F或G任务,在这里我们设置条件让他产生F任务,如:

 


若F回退,则应该产生E任务,B、C则正常运行,继续往下执行后,将会产生I任务,再者是J任务。若在I任务回退,则应该回退至F。
同理,若B与C执行完成后,将会产生D。若我们记录任务的产生顺序,将比较容易实现任务的回退,由于jbpm4或activiti5均不记录这种操作,所以要实现回退均比较困难。

在此我们用一个有效的数据结构记录所有的任务产生的顺序,如下所示:

 

 

有了这样的一个数据结构,记录了每个任务节点的产生顺序,我们在任何一个节点上,都能有效回退至上一任务节点,并且包括自由跳转的方式,如在I节点,若我们回退至E,就把F节点从这个记录顺序中去掉,然后产生E任务出来。

这里还有一些问题尚没有得到有效解决:

1.如D任务回退时,应该产生B与C任务的还是仅需要产生其中一个,系统中是提供人工选择的方式给他还是自动产生其中一个?

2.F回退至E时,要不要也产生B、C任务?

3.任务回退时,需要找回原来的执行人

4.这个任务堆栈执行记录在什么时候往里放数据,即产生这个执行树

 

更多资讯请加QQ了解3102760881

 

 

 

  • 大小: 124.4 KB
  • 大小: 123.1 KB
  • 大小: 121.9 KB
  • 大小: 69 KB
  • 大小: 71.7 KB
  • 大小: 72.7 KB
分享到:
评论
3 楼 breadlan 2012-11-08  
1.驳回只能驳回到已执行路径中的结点。
2.同级别execution能够驳回,不要跨级别驳回。
3.父execution的结点不能驳回到子execution的结点。比如一对fork和join网关外的结点不能驳回到fork和join网关的内部结点。
4.子exution结点最好不要驳回到父exution结点中(子流程也类似)。如果要驳回,刚所有和该子exution并行的路径(或子流程)都要驳回,这样会很难处理,大多时候也不符合业务要求。
2 楼 forevercoding 2012-07-18  
看明白jbpm4中的excution机制,流程的驳回应该是这样:
   1、任务只能驳回给同一个excution执行过的上一个任务级别节点;
   2、找不到上一个任务节点驳回变成重新申请(实现重新申请操作-扩展改写jbpm4启动方式)
流程的自由跳转需要控制:
   1、主线任务节点不能跳转到并行任务节点
    比如:E可以跳到F,但E不能跳到B
   2、并行任务相同excution可以互相跳转
子流程的驳回到主流程:
   1、结束子流程(控制好参数)->sub-process驳回到同一个excution执行过上一个任务级别节点;

不合理驳回处理方式:
  1、子excution驳回是就是直接结束主excution旗下所有任务,有主excution发起驳回操作。
  2、改写join节点行为控制类,实现不同级别的excution自由驳回或自由跳转(不推荐)
注:子流程与子流程或主流程的自由跳转实现比较困难:子流程(子流程可以被多个主流程引用)不知道主流程的情况,主流程可以清楚知道子流程情况,但主流程跳到子流程处理比较麻烦。
如果以上方式不能满足业务流程,说明流程太变态,只能硬编码。



不知道是否讲的有错,请赐教?
1 楼 xinggg22 2012-03-02  
最终还是选择了jbpm5

相关推荐

    Activiti5 jbpm 工作流 数据库 表结构.docx

    20. **ACT_RU_IDENTITYLINK** - 身份联系表,处理运行时的用户、用户组与任务或流程实例的关联。 21. **ACT_RU_JOB** - 运行中的任务表,存储定时任务和异步任务的相关信息。 22. **ACT_RU_TASK** - 运行时任务...

    activiti和jbpm4通用的流程设计器

    这个是activiti和jbpm4通用的设计器,里面有教程文档,可以嵌入到项目中,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...

    【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5

    "【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5" 这个标题表明这是一个关于jBPM发展历程的综合分析,涵盖了从jBPM3到jBPM5的变迁,并且提到了Activiti5,这是一款与jBPM相关的流程管理框架。标题暗示了文章...

    activiti 5.22 退回代码

    工作流 activiti 5.22 退回代码实现。 activiti在设计的时候没有回退相关的...这里写一个比较简单的回退。不支持回退到并行网关前面节点,虽然回退到前面节点不会报错 但会导致任务无法结束。使用没有并行网关的回退。

    activiti流程图查看demo

    Activiti 是一个开源的工作流和业务自动化引擎,它支持企业级的业务流程管理(BPM)系统和模型驱动的应用程序。这个"activiti流程图查看demo"是一个示例项目,旨在帮助用户理解如何在Activiti中查看和操作流程图。在...

    Activiti6-流程跟踪监控图-节点-流程线高亮显示-支持通过、不通过、驳回、退回

    Activiti6-流程跟踪监控图-节点-流程线高亮显示-支持通过、不通过、驳回、退回 支持内容: 已完成节点高亮显示、当前执行中节点红色显示 支持一个节点多条流出线,包括通过、不通过、驳回、退回,按照已执行操作正确...

    Activiti流程图部署及流程图部分操作.pdf

    Activiti 是一个开源的工作流和业务自动化引擎,它支持企业级的业务流程管理(BPM)和业务规则管理(BRM)。在这个主题中,我们主要关注如何在Activiti中进行流程图的部署以及如何操作流程图。 流程图的部署是...

    activiti6.0实现流程图片自定义颜色 当前任务为红色,走过的任务为绿色,自定义文字颜色连线文字显示

    在IT行业中,Activiti是一个非常流行的开源工作流引擎,它被广泛用于企业级应用中来管理业务流程。本文将深入探讨如何在Activiti 6.0版本中实现流程图片的自定义颜色功能,以增强流程图的可读性和美观性。 首先,...

    Activiti在线流程设计器

    忙活了一个星期左右,查找各种资料,终于将Activiti的流程设计器分离出来,与SpringMVC,spring整合了起来,先把工程分享出来,等有时间了在慢慢讲解具体的整合步骤。工程下载之后直接可以运行,只需要改一下数据库...

    activiti工作流流程跟踪图(图片(两种方式))

    Activiti是一款开源的工作流引擎,它为业务流程自动化提供了强大的支持。在开发和运维过程中,流程跟踪图是非常重要的工具,可以帮助我们理解流程的执行状态,定位问题,优化流程设计。本实例聚焦于如何生成和查看...

    Activiti可视化流程设计器

    Activiti是一款开源的工作流引擎,它实现了业务流程管理(BPMN 2.0)标准,为企业级应用提供了强大的流程自动化能力。Activiti Designer则是与Activiti引擎配套的一款基于Eclipse的图形化流程设计工具,它允许开发者...

    activiti6.0 自定义流程路径颜色和任务颜色

    在企业级应用开发中,Activiti 是一个广泛使用的开源工作流引擎,它允许开发者通过模型驱动的方式来设计和执行业务流程。在"activiti6.0 自定义流程路径颜色和任务颜色"这个主题中,我们主要关注如何根据业务需求...

    Activiti学习文档(二)之画流程图并部署流程

    总结来说,“Activiti学习文档(二)之画流程图并部署流程”会带你走过从设计到实施一个完整流程的整个过程,包括理解BPMN符号、使用工具绘制流程图、编写部署脚本,以及如何在实际环境中运行和管理流程实例。...

    简单的activiti请假流程

    这个“简单的activiti请假流程”项目是针对初学者或希望了解Activiti基本操作的一个实例,旨在展示如何在实际场景中部署、启动、执行和结束一个流程。 1. Activiti 概述: Activiti 是基于模型驱动的,采用BPMN ...

    activiti 5.10请假流程

    Activiti 是一个开源的工作流和业务自动化引擎,广泛应用于企业级应用中,处理各种业务流程。在本场景中,我们关注的是"activiti 5.10请假流程",这通常涉及员工通过系统提交请假申请,管理者审批的过程,具体实现会...

    Activiti7(流程引擎)简单笔记,附带作者执行的Demo代码文件

    Activiti7是一款强大的开源工作流引擎,用于在Java应用程序中实现业务流程自动化。它基于模型驱动的架构,允许开发者通过BPMN 2.0标准来设计、部署和执行流程。这个“Activiti7(流程引擎)简单笔记”很可能是作者在...

    activiti5.22 流程设计器绘画的流程图条件线上的字不显示

    标题 "activiti5.22 流程设计器绘画的流程图条件线上的字不显示" 指出的问题是,在使用Activiti 5.22版本的流程设计器绘制流程图时,条件线上(通常用于表示流程分支依据的条件)的文字没有正确显示。这可能对流程图...

    Activiti工作流整合Web流程设计器整合

    在Activiti中,常用的Web流程设计器有Alfresco Share、Activiti Modeler或BPMN 2.0兼容的第三方工具,如Stunner(Kie Workbench的一部分)。这些工具允许用户通过拖放操作来创建活动、连接线和事件,然后保存为XML...

    Activiti流程设计器代码

    Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。 Activiti是一个开源的工作流引擎,它实现了...

    Activiti实战(咖啡兔)-含目录

    符合BPMN2.0规范且开源的流程引擎(或平台)才是每个公司需要的,结合长期以来(从jBPM4停止更新)开源流程引擎的使用上可以分为Activiti和jBPM5,前者是jBPM作者Tom的又一力作,而jBMP5则是基于Drools Flow的产物。...

Global site tag (gtag.js) - Google Analytics