工作流如何实现任意节点的跳转?
在一个工作流引擎系统中往往会有非常复杂的流程,包括并行节点的退回,嵌套并行节点的退回以及任意跳转,甚至说加签之类的场景。
盘古BPM工作流引擎专门就是为中国式流程量身打造的一款新的工作流引擎框架,因此呢,在设计的时候,已经考虑到这些问题。不管是任意节点的跳转或者说任务的退回和撤销操作,往往呢会考虑到如下几个因素.
任意节点跳转的流程,如果按照BPM2.0的标准,我们需要在模板中绘制很多的连线,那这样的话就会导致这个流程图非常的庞大,而且看起来也不是特别的美观,那因此在实现过程中,我们往往需要期望通过节点进行操作,而不是通过连线。这种方式如何进行实例的动态化操作呢。
怎么去任意任意的进行跳转呢?大概可以分为如下几个场景。
-
比如说传统的流程,可能有三个节点,那大概呢可能就是有2n+1个连线。如果期望每一个节点都可以进行跳转,那么画的线也会非常非常的多,那这样的话最终绘制的流程图就肯定不是特别的美观。因此盘古在设计的时候呢,已经考虑这种情况了,业务人员只需要传递任务的ID就可以进行任意的跳转。当然在实现这样的简单易用的API的时候,还需要一些策略控制。这些策略说白了就是去控制,在哪种场景下可以去跳转以及跳转之后对其他的节点有没有影响。如果有影响,则影响的程度怎样。
下面以几个案例为阐述目标,我们来进一步探讨一下,这些细化场景如下。
-
常规无分支流程。大概有两个节点,比如说a和b。这种场景呢,基本上没有什么可说的,因为比较简单,说白了就是一条直线。a和b两个节点都可以进行任意的跳转操作,包括工作流引擎中的撤回、退回和跳转概念。它简单的原因是,它就是一个基本的链表结构。且是1对1关系。流程图如下:
-
那我们来看一下第2种场景。比如说目前有三个节点,那么一节点完成之后呢,有两个任务节点,比如说abc那a在完成这个任务的时候呢,当年的实例可以走到2这个节点,也可以走到3这个节点,那我们该怎么设计呢?流程图如下:
-
我们需要在2和3两个节点上进行配置他可以跳转到的节点,它当前可以跳转到的是哪一个节点?如果说当前实例走到1节点,然后又走到2节点,那么2节点可以退回的节点列表就是1,如果说当前的实例完成1之后,走到3这个节点了,那这样的话3节点可以退回的列表就是1节点,但是呢,由于已经进行了两次操作,数据库的结构呢应该是1和2,然后呢再加一个1再加一个3,那这样的话可能就产生了1、2、3三个数据,那这样的话呢,它很显然还是一个链表,如果你说让它退回到上一步节点,那这个地方呢就值得探讨了,那到底是退回到1还是退回到2呢?所以说这个地方就是一个稍微复杂一点的流程,那我们在设计这个流程的时候就需要考虑一下,这个退回策略该怎么设计,如果说我们2和3两个节点可以退回到1,那从流程图这个视角来看的话,它就是什么呀?上一步。对,按照流程图中的上一步执行。这个场景永远就是按照这个实例最后一次的实际执行步骤进行操作,也就是跟上一步实际路径紧密相关。这一个场景的重点就是涉及到反反复复的数据退回,但还是1对1数据结构
-
那接下来呢,我们再来看一下第3种场景,可能是更复杂的一种场景吧。比如说在一个流程中可能涉及到多个并行网关,并行网关呢肯定是成对出现的,当然并行网关里面还可以继续去嵌套并行网关或者或者排他网关,那这样的话呢,就导致这个流程特别的复杂。在不同的工作流引擎系统中,有些系统支持觉并行网关里的节点只能在内部进行退回操作,而不运行退回到外部,有些系统则觉得内部的节点可以退回到外部,但是内部的所有数据要进行删除操作。也就是说任意一个节点进行了推退回操作啊,那么所有当前实例下面的这些节点都需要删除,然后所有的这个实例会聚集到这个前一个节点中。对于这种场景来说呢,已经涉及到两种策略。
-
简单总结一下上面的三种大的场景,我们可以分为三种策略,第1种呢策略呢就是什么呀,比较中规中矩的一种链表链表式结构(1对1),第2中场景根据实际路径实际去实行。第3种呢是并行网关,它又分为2点,第1点呢是只能在内部进行退回,第二中就是什么可以跳转到外面,但是需要把其他的执行实力给删除掉。 那OK,那接下来让我们来看一下啊,盘古工作流引擎是怎么去设计的以及怎么去使用。那首先呢,我们也嗯绘制一个简单的流程图,这里呢,以费用报销流程为主进行展开讲解。
任意节点跳转实现
打开我的工作台找到模型管理,然后点击费用报销流程,再次点击编辑。打开模型,目前的这个流程已经提前绘制好了。
那接下来呢,我们重点来看一下啊,刚才我们说的几种场景怎么去配置?首先选择了任意一个节点,然后点击基础设置,点击节点属性,如下图所示:
目前盘古BPM工作流引擎支持如下4种模式。
-
历史处理节点.(所有已经完成的历史节点都会去重进行展示) -
指定的节点,可以细化到指定的节点
-
任意节点,可以细化到指定的节点,比较随意
-
实际执行路径且跳过并行网关。(并行网关需要打标记)
对于并行网关呢,因为涉及到嵌套的问题了,所以说呢,盘古BPM工作的一个引擎在设计的时候呢,是支持用户为任务节点去打一个标签,你可以标记哪些节点是并行的?而不是通过程序去计算哪些节点是并行的,那这样的话呢可能有两个好处,第一呢出错的几率更低,第2种呢,就是可以用户去控制哪些是并行的以及哪些不是并行的。
那接下来呢,我们再来看一下并行节点怎么去打这个标记的。如下图所示:
我们来看一下怎么去启动实例呢,点击工作台,然后点击费用报销流程再次点击启动,那就可以看到这个流程了,那看到这个流程之后呢,我们点击启动就可以,然后呢,我们就可以查询到我们的代办任务来进行任务的完成。
在完成任务的时候呢,我们就可以看到几个按钮,那那其中有一点需要注意,有一个退回,还有一个任意跳转节点,那不管是任意跳转或者是退回功能,它本质上都是跳转的操作。这两个节点到底有什么不一样的地方呢?任意节点的退回来说白了就是不需要算法去控制,你可以任意的去进行跳转,。呃,对于退回按钮功能来说呢啊,它退回的时候呢,有一个前提条件,那就是刚才我们上文提到的,怎么去配置这个退回的一些策略。
我们点击这个退回操作,那这个地方呢,它会弹出来一个框,那这个框呢,它需要选择是下一步节点的这个处理人以及退回意见,那这样的话下一个节点呢就可以可以看到这个地方的意见,这样的话可能涉及到也是比较人性化的。那差不多呢,关于退回操作以及任意节点的操作呢,我们大概就暂时先说到这个地方。
总结
那接下来我们再来简单总结一下。那对于退回以及任意节点跳转呢?需要注意一点,对于任意节点的跳转呢,,它不需要这个策略去控制,但是对于退回呢,它需要很多策略去配合起来去使用,那这一点大家一定要注意,如果说嗯你想偷懒一下,那也可以我们直接使用任意节点,你也需要去为这些节点去配置不同的按钮,因为这些按钮都是都是可以去配置的。退回按钮使用起来风险相对来说是比较低,因为可以人为去控制它能跳转到哪些节点,大家可以结合着这个实际情况来进行使用。