提到工作流,大家或许会想到微软的WF,或者是自己开发的工作流平台软件,也或者是使用状态字段进行跟踪的方式开发,无论是什么样的形式,它都是在扮演着业务流转的角色。所以区分和正确认识业务数据和流程数据,以及之前的关联关系也是很重要,对于平常的开发意义重大。
流程数据,顾名思义,就是能够支撑流程流转的系统数据,这个要根据自己工作流系而定,一般情况,流程模板是流程流转的依据,它定义了流程该怎样流转以及生成任务,任务即挂接在流程实例上的业务节点,根据流程的定义以及当前工作阶段而生成,流程引擎能够解释并执行流程模板以及流程实例,这也是工作流的基础。流程数据包含的信息挺多,就流程定义而言,从流程模板定义到流程节点定义,定义流程节点的各种参数,以及流程节点的路由关系,节点对应的数据权限,抄送,待办信息等,它们是生成流程实例以及节点实例的依据,是流程正确运行的基础,特别是节点路由,它决定了系统能够支持的流程流转各类。对于流程实例,它是根据流程定义生成的,对应到每个业务数据的实例信息,其中包括流程实例的启动信息,状态信息,以及各阶段的节点实例信息,它能标识当前的业务数据的状态以及流程阶段。
业务数据,也就是流程所支撑流转的业务对象,比如一个申请报告,一份合同会签,它是在普通的数据表中添加了流程关系的数据,每一条数据都会对应至少一个流程实例(我们是一对一),所以业务数据是有流程状态的概念,能标识当前的业务数据是处在怎样的流转状态,是刚申请,还是办理中,还是暂停。使用流程状态来标识业务状态,其实并不是很恰当,每类的业务它都有自己的状态标识,比如一个发文,它处的阶段不是流程状态所能代替的,业务的状态远远多于流程状态,流程完成并不代表业务的审批通过,也可能是不同意,或者是别的原因而办结业务。所以建业务表时都会在表中添加业务状态,通过流程流转来驱动业务状态的改变。