九、业务流程运行

  业务流程运行的本质其实就是实现各种业务流程的业务动作,其最核心部分是基于PetriNet原理的业务流程引擎。从体系结构上来说业务流程引擎和业务动作是没有任何关系的,业务动作只是外界用来控制业务流程引擎的一种途径,外界同样可以使用标准的Http请求调用企业工作应用提供的业务动作。
  业务流程引擎实现两大特性,第一是解析和计算业务流程定义,然后生成ProcessControl。第二是根据ProcessControl实现实际的业务流程操作,并生成业务流程实例数据且存入数据库。所以业务流程引擎的本质就是解析业务流程定义然后生成和维护业务流程实例数据,这也是业务流程运行的本质。

1 运行框架

  在企业实际的业务需求流程分为两大类,第一是预先设置好流程定义画好流程图,然后按照既定规则运行的流程,也就是一般的业务流程。第二则是没有什么预先定义的,可以在任意执行者间传来传去的一些临时协作性的流程,也就是一般的协同。
  业务流程和协同,两者的共同点是都使用待办任务作为参与流程处理的入口和媒介,执行者收到待办任务后进行的都是结束,流转和回退等相同的操作。所以从用户或者待办任务的角度来说,两种流程的都是针对待办任务进行处理,不同点仅仅在于有规则处理和无规则处理的具体代码实现上。
  业务流程的业务动作都是以待办任务ID作为传入参数,保证了业务流程和协作流接口的统一性,也统一了外界对流程的视角是先有待办任务然后才是各自处理。例如流转都可以调advanceProcessAction动作,打开都调executeTaskAction动作。

2 运行过程

  由于业务流程的绝大多数操作都是由两个业务动作一起组合来完成的,在界面中,当调用在界面层上提供的用于流转操作的advanceQuery/advanceQueryExt函数时,其实后台的运行过程如图所示地方

  advanceQuery/advanceQueryExt调度代码首先执行advanceProcessQueryAction得到ProcessControl。基于此ProcessControl代码是可以直接修改它的内容的,那么一般是弹出流转对话框,在流转对话框里表现的可选环节,可选执行者都是从ProcessControl里取得的。用户使用流转对话框修改ProcessControl控制流程运行,最后ProcessControl被传入advanceProcessAction完成流转操作。业务流程其他诸如转发,回退,中止等操作的过程都和流转过程一样。
  在界面层上还提供了另外一套速度快的,可以不弹出流转对话框的函数。例如调用用于流转操作的快速的函数advance/advanceExt时运行过程如图所示:
  advance/advanceExt其实直接调用了advanceProcessAction,并且ProcessControl参数传入为NULL。所以ProcessControl不会传到UI端。其他诸如回退,转发也有类似函数。

3 ProcessControl

  业务动作是外界控制业务流程运行的途径,那么具体的该如何控制呢?就需要借助于ProcessControl了。ProcessControl是控制业务流程运行的实体,基本上ProcessControl里怎么描述业务流程就会怎么走。  ProcessControl可以从过各种讯问的业务动作获取到,也可以完全自己构造。

  ProcessControl包含流向(FlowTo)和通知(Notice)两个主要元素,这两个元素都同属于ProcessControlItem类。在ProcessControlItem类里描述了活动环节的标识,待办任务的属性,已选中的执行者(Executors)和最大的执行者范围(ExecutorRange)。两个元素的任意一个都可以空,单当两个都为空时就不会弹出对话框了。在流转对话框中流转那个页面里表现的是FlowTo,通知页面表现的则就是Notice。

*FlowTo
  FlowTo描述操作的流向,例如流转操作时描述后续有哪些活动环节和哪些执行者可选,回退操作时描述能退到哪些活动环节能选哪些执行者,转发和其他操作也是类似这样的。FlowTo是ProcessControlItem对象的列表,其中每一项代表一个流向,一般流向里有多少个可选的活动环节那么FlowTo列表就有多少个ProcessControlItem对象。FlowTo列表可以为空,为空时表示没有流向,例如终止时只有通知没有流向。

*Notice
  Notice描述操作相关的通知,例如流转操作引发的流转时通知,回退操作时引发的回退时通知,其他操作也是类似这样的。Notice是ProcessControlItem对象的列表,其中每一项代表了一个通知。Notice列表可以为空,为空时表示没有通知,例如没有给流转时设置通知规则。
  在业务流程事件中一般对ProcessControl有两种控制,它们分别是在弹出流转对话框之前修改ProcessControl的信息和使用ProcessControl控制流转。在弹出流转对话框之前修改ProcessControl的目的一般是,让弹出的流转对话框可以显示修改后的ProcessControl信息,像这种控制一般在OnAfterAdvanceQuery事件里做。ProcessControl控制流转一般是在OnBeforeAdvance事件里做。

4 ProcessControlItem

  ProcessControlItem在ProcessControl中用来描述业务流程操作的目标流向和通知流向。在ProcessControl中每个ProcessControlItem将被生成N个待办任务。在ProcessControlItem存储了待办任务的执行者和执行者范围,还使用Task类用来存储待办任务的属性。

*Executors
  ProcessControlItem中已选择的执行者,它是一个OrgNode对象的列表。

*ExecutorRange
  ProcessControlItem中执行者的范围,它是一个OrgNode对象的列表。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""