工作流系统之三十五 自由流的实现
工作流系统在给业务流程建模的时候,按照流程引擎的设计,将业务流程定义出来。这个业务流程的每个流程实例,就按照流程建模时定义好的线路流转。
?
自由流是指流程实例在运行时,不按照预先定义好的线路流转,而是自由的跳转,由流程实例的操作人员来选择下一个到达的节点。通常这种都是不正常的流转,和回退流一样,破坏了流程的正常定义。但是自由流又很有“特色”,符合一定的业务需求。例如,当一份申请单提交审核后,需要部门经理,总经理,都审核过,才能流转到业务部门来处理,但总经理出差在外,申请单又急需处理,部门经理在线下已经征得总经理的同意后,就可以选择跳过总经理的审核,直接送到业务部门。
?
通常自由流是指向前的跳转,回退流是回退到曾经运行过的轨迹。向前跳转会略过一些节点,不运行,直接到达新的节点。回退流是回到原来的轨迹,再重新执行,对应重做(撤回)的功能。自由流对应忽略某些步骤,直接达到后面的步骤。因此在实现上,自由流和回退流的实现是有区别的。
?
顺序流的自由流的实现
?
当运行到填写步骤时,由于某种原因,直接略过审核步骤,跳转到查看步骤。或者填写人想作废掉这次的填写,直接就跳到结束步骤,结束本流程(当然需要填写人有自由跳转的权限)。
实现过程:关闭当前步骤(当前任务)--》转入历史步骤(历史任务)--》指定跳转到的步骤为当前步骤--》生成新步骤的任务
条件路由
实现过程:和顺序流一样,当自由跳转时,关闭当前步骤任务,生成跳转到的节点的步骤和任务。
循环路由:和顺序流处理过程一样。
?
?
分支路由:
分支路由在eworkflow中分为静态分支和动态分支,但是发生自由跳转时,静态分支和动态分支的处理过程是一样的。分支路由的自由跳转,就比顺序流要复杂很多。
?
单层的分支:
?
?
主干---分支
当由主干节点跳转到分支节点上时,这种跳转是没有意义的。因为分支节点产生并行的分支,几个分支后的线路是同时并行的。当自由跳转到一个分支的节点上后,另外的分支不能产生,流程会变的没有意义。
因此当发生 主干 跳转 到分支的情况时候,eworkflow是直接关闭当前节点,生成分支上的节点。但是这样流程可能会变得没有意义,主要看流程建模时候的模型。
?
主干---主干
当由主干节点跳转到主干节点,这种是正常的自由流,实现过程;关闭当前主干步骤(任务)--》转入历史步骤(历史任务)--》跳转到指定的主干步骤--》生成新的主干步骤任务。
?
?
多层的分支:
由于分支节点和聚合节点可以嵌套,因此就有多层的分支节点,分支主干,分支的分支 之间的跳转问题。总的原则是,分支主干跳转到分支主干,其它的分支不受影响。在实现的时候,需要递归的查找出各个分支的所有下级分支。
?
?
主干--主干
最外层的主干节点上的跳转,这种是正常的自由流,实现过程:关闭当前主干步骤(任务)--》转入历史步骤(任务)--》生成最外层的主干步骤--》生成新的主干步骤任务。
分支主干--分支主干
分支主干跳转到本分支的主干,是正常的自由流,关闭本分支主干,生成本分支主干的新节点,其它分支均不受影响。
实现过程:关闭本分支主干步骤(任务)--》转入历史步骤(任务)--》生成本分支跳转到的节点的步骤(任务) 其它分支均不受影响。
?
分支主干--分支的分支
分支主干跳转到本分支的分支,这种是没有意义的,和主干跳入分支是一样的,不是正常的自由流。
?
分支主干--主干
分支主干跳入最外层的主干,是正常的自由流,实现过程:结束所有分支的步骤(任务)--》转入历史步骤(任务)--》生成最外层跳转到的节点的步骤(任务)
?
分支的分支--分支主干
分支的分支跳转到分支主干,这种是正常的自由流,结束本分支下的所有子分支(包含嵌套的多级分支)生成分支主干的步骤任务,其它分支主干不受影响。
实现过程:递归查找出所有分支主干的下级分支节点--》结束查找到的所有分支当前步骤(任务)--》生成新的分支主干步骤(任务) 其它分支主干的当前步骤任务均不变化。
分支的分支--主干
分支的分支跳转到最外层的主干,这种是正常的自由流,结束所有分支,包含嵌套的分支的分支等等。生成最外层的主干步骤。
实现过程:结束所有的当前步骤(任务)--》生成新的最外层的主干步骤(任务)
?
其它 还会有 分支1的分支--分支2的分支:这种的跳转显然是没有意义的。
?
?
<script type="text/javascript"></script>
标签: java工作流, 自定义工作流, .net工作流