工作流软件产品在建模的时候,通常都是从开始节点开始,经过一序列的节点,最后到结束。因为有些业务的特殊性,可能会需要有多个起点,也可能会在流程的某个节点就结束了,这里就涉及到流程的多起点,和多结束点的问题。
通常工作流引擎都需要支持流程的多起点。多结束点倒是很简单,可以通过条件跳转等等来达到流程的某个节点就转向结束。流程的多起点表现方式有很多种,例如有的需要定时启动一个流程实例;同样一个业务流程,不同的人启动时,所走的步骤不一样。
单起点模式:
多起点模式:
注:图中的"开始节点"是个虚拟的节点,流程实例都是从初始化动作开始的。
流程在和业务表单的集成时,流程实例的启动,又分为两种情况:
从业务模块中启动固定的业务流程,在业务表数据提交时,再启动一个流程实例,并将流程实例id绑定到业务表记录。
先启动业务流程实例,再运行业务流程第一个节点上关联的业务表单,填写业务表单数据,将流程实例id和业务表记录关联上。
单起点的模式,适合在业务模块中绑定业务流程,当业务表记录提交时,保存业务数据的同时,启动一个流程实例,并执行单点的初始化动作,得到流程实例id,并将流程实例id写入业务表的同一条记录。(如果业务流程的第一个节点为处理此业务表单,则业务流程还需要执行完第一个节点,使得流程实例流转到第二个节点)
这种类型的集成,有些不够灵活,需要在业务模块中固定启动那个业务流程,并且业务流程是单点启动的模式。
如下图:在业务模块表单中,绑定固定的请假流程,业务表提交后,启动固定的流程。
多起点的模式,流程实例在启动时,需要选择起点,所以不太适合在业务模块中绑定流程的启动方式。当然,如果取出多个起点,列在业务模块中,供用户选择,也是可以的。这样做会使得业务模块比较复杂。
因此,多起点的模式,通常是先确定好起点,获得了流程实例id,再执行流程的第一个节点,打开第一个节点上关联的业务模块,执行业务模块的提交,并将流程实例id写入业务表记录中。
单起点和多起点的模式,都适合先启动一个流程实例,再按照流程的节点往下运行,打开第一个节点上关联的业务模块,执行业务模块的提交。这样会有一个缺点,流程实例启动后,操作者不执行第一个节点,那么流程实例就停在还没有和业务表记录关联上的状态,需要通过任务提醒等功能督促此流程实例继续运行。