metasfresh 工作流引擎分析

首先要定义工作流模型,就是定义了一个状态机模型

工作流模型由activity(活动)和 node(节点)组成

节点定义了在该节点可以对业务对象(bo)做的action操作(单据操作 启动进程 电子邮件 通知等action)和有权限的操作对象

活动代表在不同的操作后,业务对象流向的下一个节点

常见的的业务对象(单据)操作有prepareit reactivateit completeit approveit rejectit voidit invalidit unlockit closeit

操作可以让业务对象处于新的状态,也可能不改变业务对象的状态,只是流向下一个节点(审批链)

单据的状态分为 drafted inProcess approved invalid  completed closed

metasfresh的工作流由wf.start启动,一个定义了工作流模型的单据,在保存时,就会调用wf.start生成一个工作流进程process,代表这个单据对应的一个工作流实例

工作流进程process再通过startNext()启动当前已经完成的节点的下一个节点(开始节点启动就完成),在startNext里生成该节点定义的操作对应的所有任务tast,有用户task(比如单据操作)或自动task(启动进程,发邮件,通知)

用户在用户界面的工作流task列表里,对选择的任务做对应的操作,approve/reject/complete,从而改变单据的流向或状态