每个工作流触发后,会创建对应的执行计划,以跟踪此次任务的执行过程。每个执行计划都有一个状态值用于表示当前的执行状态,该状态在执行历史的列表和详情中都可以查看到:
当主流程分支中的节点全部都以“完成”状态执行到流程终点时,整个执行计划将以“完成”状态结束。当主流程分支中的节点出现“失败”、“出错”、“取消”、“拒绝”等终态时,整个执行计划将以对应的状态提前终止。当主流程分支中的节点出现“等待”状态时,整个执行计划将暂停执行,但仍显示“执行中”的状态,直到等待的节点被恢复后继续执行。不同的节点类型对等待状态的处理方式不同,比如人工节点需要等待人工处理,而延时节点需要等待时间到达后继续执行。
执行计划的状态如下表:
状态 | 对应主流程最后执行的节点状态 | 含义 |
---|---|---|
队列中 | - | 流程已触发并生成执行计划,排队等待调度器安排执行 |
进行中 | 等待 | 节点要求暂停,等待进一步输入或回调再继续 |
完成 | 完成 | 未遇到任何问题,所有节点按预期逐个执行完成。 |
失败 | 失败 | 由于未满足节点配置,导致失败。 |
出错 | 出错 | 节点遇到未捕获的程序错误,提前结束。 |
取消 | 取消 | 等待中的节点被流程管理者从外部取消执行,提前结束 |
拒绝 | 拒绝 | 在人工处理的节点中,被人工拒绝不再继续后续流程 |
在 [快速开始] 的例子中,我们已经知道查看工作流的执行历史的详情可以检查执行过程中所有节点的执行是否正常,以及每个已执行的节点的执行状态和结果数据,在一些高级的流程和节点中,节点的结果还可能有多个,例如循环节点的结果:
工作流可以被并发的触发,但执行是逐个排队执行的,即使同时触发多个工作流,也会依次执行,不会并行执行。所以出现“队列中”的情况时,代表有其他工作流正在执行,需要等待。
“进行中”的状态只代表该执行计划已经开始,且通常由于内部节点的等待状态而暂停,并不代表该执行计划抢占了队头的执行资源。所以存在“进行中”的执行计划时,其他“队列中”的执行计划仍可被调度开始执行。
执行计划的状态是由其中每个节点的执行决定的,在一次触发后的执行计划中,每个节点执行后会产生一个执行状态,状态则会决定后续流程是否继续执行。通常情况下,节点执行成功后,会继续执行下一个节点,直到所有节点依次执行完成,或者被中断。当遇到流程控制相关节点时,如分支、循环、并行、延时等,会根据节点配置的条件,以及运行时的上下文数据,决定下一个节点的执行流向。
每个节点执行后可能产生的状态如下表:
状态 | 是否是终态 | 是否提前终止 | 含义 |
---|---|---|---|
等待 | 否 | 否 | 节点要求暂停,等待进一步输入或回调再继续 |
完成 | 是 | 否 | 未遇到任何问题,执行成功,继续执行下一个节点直至结束。 |
失败 | 是 | 是 | 由于未满足节点配置,导致失败。 |
出错 | 是 | 是 | 节点遇到未捕获的程序错误,提前结束。 |
取消 | 是 | 是 | 等待中的节点被流程管理者从外部取消执行,提前结束 |
拒绝 | 是 | 是 | 在人工处理的节点中,被人工拒绝不再继续后续流程 |
除等待状态外,其他状态都是节点执行的终态,只有终态是“完成”的状态,才会继续执行,否则都会提前终止整个流程的执行。当节点处在分支流程中时(并行分支、条件判断、循环等),节点执行产生的终态会由开启分支的节点接管处理,并以此类推决定整个流程的流转。
例如当我们使用了“‘是’则继续”模式的条件节点时,当执行时如果结果为“否”,则会提前终止整个流程的执行,并已失败状态退出,不再执行后续节点,如下图所示:
所有非“完成”的终止状态都可以被视为失败,但失败的原因不同,可以通过查看节点的执行结果来进一步了解失败的原因。