Home  >  Article  >  Database  >  精雕细琢工作流的状态管理

精雕细琢工作流的状态管理

WBOY
WBOYOriginal
2016-06-07 17:39:31969browse

以有限状态机为原理的工作流引擎,就是通过工作流状态的改变来达到流程的流转,因此工作流系统中的各种状态概念显然很重要。 首先我们来看,工作流引擎在给业务流程建模的时候,将一个业务处理的场所定义成一个步骤节点,然后通过处理业务的时候,"提交业务

以有限状态机为原理的工作流引擎,就是通过工作流状态的改变来达到流程的流转,因此工作流系统中的各种状态概念显然很重要。

首先我们来看,工作流引擎在给业务流程建模的时候,将一个业务处理的场所定义成一个步骤节点,然后通过处理业务的时候,"提交业务处理结果"这样的动作来达到流程的流转。流程流转到哪个下一步骤,通过动作结果连线来导向。

工作流系统发生一次流转,工作流状态就会发生一次改变,即有限状态机中的状态升迁,流程实例从一种状态升迁到另一种状态是通过执行动作来完成的。

通常我们会理解发生一次流转,是从A步骤--》X步骤,但如果一次流转是 A步骤--》A步骤,原地踏步,好象没有发生流转,究竟发生没有发生流转呢?从工作流的状态概念来理解,一定是发生了流转。

工作流状态 = 当前步骤 +当前步骤的状态

工作流发生一次流转,使得流程状态发生一次升迁,当A步骤--》X步骤,步骤发生了变化,状态肯定升迁了。当A步骤--》A步骤,A步骤的状态一定是改变了,否则就没有意义了。A步骤--》A步骤也需要通过执行一个动作来完成,如果执行后,A步骤的状态也未发生改变,哪就不需要设计这个动作,可以通过只保存业务模块的业务数据来完成。

在一个工作流实例的生命周期内通常有一个或者多个活动的状态,单线运行的,就一个当前步骤+当前步骤的状态。当有并行节点的时候,就会有多个当前步骤+当步骤的状态。

步骤的状态,我们可以预设几种状态,步骤在进行中,等候处理中,完成,返回处理。 这几种状态和业务无关,,纯粹只描述步骤的状态。
当A步骤--》A步骤 步骤的状态可以在这几个状态中改变。如当开始进入A步骤的时候,是进行中,当需要处理的事情太多,升迁到等候处理,当离开A步骤时,步骤的状态是完成,下一个步骤为进行中。因此我们在流程定义的时候,进入步骤的状态定义为进行中,离开定义为完成,便于我们更容易理解流程的流转,以实际的业务处理无关。


流程实例状态:创建,激活,挂起,终止,完成,这是工作流引擎中另外一个重要的概念,是描述流程实例的状态。
创建:流程实例刚创建的时候。
激活:流程正常流转时候的实例状态
挂起:当业务需要,暂停此业务的办理时,由管理员或者有权限的管理用户来执行挂起流程。当其它问题处理完毕,需要继续执行此流程的流转时候,可以恢复到激活,也可以直接就终止掉。
终止:当业务发生问题,或者异常的时候,有管理员或有权限的用户来直接终止掉此流程。终止后的流程不能再恢复成正常的继续流转。
完成:业务流程办理完毕,走到尽头了流程实例的状态。


当流程实例状态为挂起,流程实例就不能再发生流转了,同时,任务也不能继续执行,任务的状态也为挂起。等流程实例状态恢复后,任务才能继续执行。要知道在工作流系统中任务的完成,是由执行流程的动作来完成的,也即提交动作上挂接的业务模块来完成任务的。因此,工作流实例状态为挂起,任务也为挂起,工作流实例恢复后,任务也恢复到待执行,工作流实例终止后,任务也异常终止,工作流实例正常完成,实例关联的所有任务也正常完成了。


于细微之处体现成败,严谨这些工作流的状态管理彰显工作流软件产品的品质。

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn