精雕细琢工作流的状态管理
以有限状态机为原理的工作流引擎,就是通过工作流状态的改变来达到流程的流转,因此工作流系统中的各种状态概念显然很重要。 首先我们来看,工作流引擎在给业务流程建模的时候,将一个业务处理的场所定义成一个步骤节点,然后通过处理业务的时候,"提交业务
以有限状态机为原理的工作流引擎,就是通过工作流状态的改变来达到流程的流转,因此工作流系统中的各种状态概念显然很重要。
首先我们来看,工作流引擎在给业务流程建模的时候,将一个业务处理的场所定义成一个步骤节点,然后通过处理业务的时候,"提交业务处理结果"这样的动作来达到流程的流转。流程流转到哪个下一步骤,通过动作结果连线来导向。
工作流系统发生一次流转,工作流状态就会发生一次改变,即有限状态机中的状态升迁,流程实例从一种状态升迁到另一种状态是通过执行动作来完成的。
通常我们会理解发生一次流转,是从A步骤--》X步骤,但如果一次流转是 A步骤--》A步骤,原地踏步,好象没有发生流转,究竟发生没有发生流转呢?从工作流的状态概念来理解,一定是发生了流转。
工作流状态 = 当前步骤 +当前步骤的状态
工作流发生一次流转,使得流程状态发生一次升迁,当A步骤--》X步骤,步骤发生了变化,状态肯定升迁了。当A步骤--》A步骤,A步骤的状态一定是改变了,否则就没有意义了。A步骤--》A步骤也需要通过执行一个动作来完成,如果执行后,A步骤的状态也未发生改变,哪就不需要设计这个动作,可以通过只保存业务模块的业务数据来完成。
在一个工作流实例的生命周期内通常有一个或者多个活动的状态,单线运行的,就一个当前步骤+当前步骤的状态。当有并行节点的时候,就会有多个当前步骤+当步骤的状态。
步骤的状态,我们可以预设几种状态,步骤在进行中,等候处理中,完成,返回处理。 这几种状态和业务无关,,纯粹只描述步骤的状态。
当A步骤--》A步骤 步骤的状态可以在这几个状态中改变。如当开始进入A步骤的时候,是进行中,当需要处理的事情太多,升迁到等候处理,当离开A步骤时,步骤的状态是完成,下一个步骤为进行中。因此我们在流程定义的时候,进入步骤的状态定义为进行中,离开定义为完成,便于我们更容易理解流程的流转,以实际的业务处理无关。
流程实例状态:创建,激活,挂起,终止,完成,这是工作流引擎中另外一个重要的概念,是描述流程实例的状态。
创建:流程实例刚创建的时候。
激活:流程正常流转时候的实例状态
挂起:当业务需要,暂停此业务的办理时,由管理员或者有权限的管理用户来执行挂起流程。当其它问题处理完毕,需要继续执行此流程的流转时候,可以恢复到激活,也可以直接就终止掉。
终止:当业务发生问题,或者异常的时候,有管理员或有权限的用户来直接终止掉此流程。终止后的流程不能再恢复成正常的继续流转。
完成:业务流程办理完毕,走到尽头了流程实例的状态。
当流程实例状态为挂起,流程实例就不能再发生流转了,同时,任务也不能继续执行,任务的状态也为挂起。等流程实例状态恢复后,任务才能继续执行。要知道在工作流系统中任务的完成,是由执行流程的动作来完成的,也即提交动作上挂接的业务模块来完成任务的。因此,工作流实例状态为挂起,任务也为挂起,工作流实例恢复后,任务也恢复到待执行,工作流实例终止后,任务也异常终止,工作流实例正常完成,实例关联的所有任务也正常完成了。
于细微之处体现成败,严谨这些工作流的状态管理彰显工作流软件产品的品质。