文档章节

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

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

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


d2167949-acb2-3cd2-bc87-b16006ec9420.jpg (124.37 KB, 下载次数: 32)

下载附件  保存到相册

2014-2-24 10:41 上传



以上流程包括了多种流程节点,如分支,并行节点,多实例任务,子流程。流程执行过程中我们记录其任务完成的每个一步,然后归纳其回退的算法实现。其中,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.这个任务堆栈执行记录在什么时候往里放数据,即产生这个执行树

演示请看:


本文转载自:http://2522897060.iteye.com/admin/blogs/2075840

共有 人打赏支持
马背上的大彬
粉丝 0
博文 6
码字总数 4718
作品 0
广州
程序员
揭秘jbpm流程引擎内核设计思想及构架

揭秘jbpm流程引擎内核设计思想及构架 1 前言 2 阅读本篇的基础准备 2.1 概念的基础 2.2 环境的基础 3 什么是流程引擎内核? 4 引擎内核所关注的四个主要问题 4.1 模型与定义对象 4.2 调度机制...

sundy_ly
2013/11/01
0
0
揭秘jbpm流程引擎内核设计思想及构架

1 前言 流程引擎内核仅是“满足Process基本运行”的最微小结构,而整个引擎则要复杂很多,包括“状态存储”、“事件处理”、“组织适配”、“时间调度”、“消息服务”等等外围的服务性功能。...

leesama
2013/04/17
0
0
为各位看官来介绍一下JBPM是个啥东东

JBPM简介 JBPM,全称是Java Business Process Management(业务流程管理),网络推广它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBP...

网络营销
2012/01/09
0
0
安装 jBPM 的 Eclipse 开发插件

有个辅助工具开发起来方便一点,只不过现在 jBPM 的开发工具插件功能还不算太强,也就一个“项目创建向导”的功能,让你: (1)不用再去配置 classpath 库的引用了 (2)直接得到了一个 jB...

晨曦之光
2012/03/09
0
0
JBoss 系列七十二:jBPM 6 新功能/特性介绍(API 层面)

概述 jBPM 6.0 最终版已与上月底发布,与jBPM 5相比有很大变化,本文从API编程的角度去简单说说jBPM 6,本文涉及到内容包括: 2个重要的接口 运行状态管理 jBPM 服务注入 (CDI) 2个重要的接口...

无鸯
2014/02/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《Netkiller Java 手札》· 二进制文件操作大全

本文节选自《Netkiller Java 手札》 Netkiller Java 手札 Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市望海路半岛城邦三期 518067 +86 13113668890 <netkiller@msn.com> $Id: book.xml 6......

netkiller-
19分钟前
1
0
Fiddler Debugger post请求

常用的两种: 第一种默认的 对应URL为www 的要用请求头为:Content-Type: application/x-www-form-urlencoded 请求参数为 :param1=1234¶m2=12345 注:有些接口是指定用这种的第二方式并不...

轻量级赤影
26分钟前
2
0
如何搭建母婴亲子类知识社区

近期社交领域融资动作频繁,海尔高管、海尔医疗有限公司总裁管礼庆创办的母婴知识分享社区平台Alwayslove于上月获得700万天使轮融资。 Alwayslove是一个母婴知识分享社区平台,采用UGC模式,...

ThinkSNS账号
28分钟前
1
0
Android 自定义构建类型 BuildType

最近接触到自定义构建类型 BuildType,发现这一块有些地方稍不注意的话会被绕进去浪费点时间,既然我这边已经花费时间了,如果正好你也需要接触到 BuildType,也许接下来分享的 tips 可能会帮...

猴亮屏
30分钟前
1
0
美团点评基于 Flink 的实时数仓建设实践

引言 近些年,企业对数据服务实时化服务的需求日益增多。本文整理了常见实时数据组件的性能特点和适用场景,介绍了美团如何通过 Flink 引擎构建实时数据仓库,从而提供高效、稳健的实时数据服...

美团技术团队
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部