当流程比较复杂时,可以将流程进行细化,拆分成多个小流程,并通过流程的组合将它们拼接还一个大流程。具体而言,组合流程具有如下的特点:
1 在流程的每个可执行步骤中,都允许发起子流程,这意味着一个主流程中可以嵌套多个子流程
2 针对某一个步骤,它仅能发起一种类型的子流程,如果需要发起多种子流程,请将它们分散到不同的步骤中进行。
3 在发起子流程时,需要选择一个或多个人员,以他们的名义起草子流程,当选择了多个人员时,表明分别发起多个同类型的子流程,这些子流程是各自独立执行的,互不干扰。
4 可以将主流程表单上的数据在发起子流程时,按预先定义好的关系复制到新发起的子流程的表单上。
5 子流程与主流程各自拥在各自的数据表单,所以无法在主流程的表单上直接访问子流程表单的数据,也无法在子流程的表单上直接访问主流程表单的数据,如果需要访问,可以通过为表单增加“查询结果集”性质的数据源来互相访问。
嵌套模式就是在一个主流程中,内嵌了一个或多个子流程。每个子流程自身可能是可独立运转的;也有可能是主流程的辅助性子流程,不可独立运行。
请参考下图,在主流程运行到“Router”位置的时候,会激活一个子流程的运行;在子流
程运行完后,会重新运行到主流程的“Router”位置,继续主流程的运行。

在这种方式下,当子流程运行的时候,主流程会暂停,等待子流程的完结。
与嵌套模式不同的地方,就是调用模式的子流程,不返回主流程。在主流程激活子流程后,主流程继续运行,且不关心子流程的运行状态或运行结果。
参考下图, 子流程最终没有返回到主流程。

因此,归纳起来就是:
嵌套:主流程在执行过程中发起子流程的一个或多个实例(这多个实例必须是同一类型的流程 ),主流程必须等待这多个子流程实例全部执行完成后(包含执行完成和中止),主流程才能继续执行。
调用:主流程在执行过程中发起子流程的一个或多个实例(这多个实例必须是同一类型的流程 ),这多个子流程实例与主流程各自独立运行,互不影响。
子流程发起份数以及起草人的确定
在发起子流程时,可以选择一个人或多个人作为子流程的起草人,即选择了几个人员,就将发起几份子流程,这些人员将作为子流程的起草人。
当发起子流程时,可以将当前流程表单上的数据按照应指定的关系填写到子流程的表单上。对应关系按如下格式设置:
[子流程表单上的表1=主流程表单上的表1] 子流程表单上表1的字段1 = 主流程表单上表1的字段1 [子流程表单上的表2=主流程表单上的表2] 子流程表单上表2的字段1 = 主流程表单上表2的字段1
示例: [flow_a1 = flow_b1] name= name [flow_a2 = flow_b2] name= name 表示把主流程中的 flow_b1中的name字段填到子流程中的 flow_a1表的name字段中,把主流程中的flow_b1中的code2字段填到子流程中的 flow_a1表的code1字段中 注意: 1 主流程中的表与子流程中的表的名称通常是不同的 2 对应表中的字段名称可能相同,也可以不相同
|