对于人工任务处理其实就是一些命令的执行,任务退回是一个很常见的操作,很多时候任务执行到下一个人工任务节点时可能由于某种情况需要退回重新处理,例如:审批环节如果审批不通过那么就需要退回到指定人进行重处理等等。
针对Foxbpm提供了4个任务退回命令“退回-后台指定步骤-重新分配”、“退回-指定步骤-自动最近处理者”、“退回-指定步骤-指定处理者”、“退回-上一步”,这些命令基本上涵盖了所有应用场景。
下面就这些退回命令进行介绍以及比较。
1、退回-指定步骤-重新分配
描述:退回到前台用户选择的一个节点,任务重新分配处理者。
参数:该命令需要接受一个rollBackNodeId(退回节点号)。
功能:该命令执行时会根据rollBackNodeId获取退回节点,并将流程推向指定的节点。
a:普通退回
例如:C任务退回到B节点,此时B节点上的任务会重新分配
b:分支退回
如图:
例如:以上C和D任务任意一个退回B任务,那么此时C和D此时都会结束,以及F任务退回到B任务时同样会结束C任务。
注意:分支退回一般是用在“并行网关”并且进出类型为“分散”,E任务不能退回到子任务F、D、C上,因为在E任务执行回退,因为退回时只能退回父令牌走过的节点(不包括子令牌)。
c:多实例退回
例如:C任务时一个多实例任务,此时C上退回B任务,此时会结束C任务上所有任务。
注意:这里多实例退回比较特殊,需要在完成表达式中处理任务结束逻辑(需要用变量控制,同时在退回命令表达式中进行操作)否则不会结束多实例任务的。
一般不建议使用多实例退回,因为它太“无情”,一般在使用多实例的时候,只要其中部分任务同意那么整个任务就通过,此时如果只有其中一个人使用该命令那么整个任务都结束不符合实际场景。
2:退回-指定步骤-自动最近处理者
描述:在后台设计器端指定一个节点,用户点击了之后退回这个事先设置好的节点,会自动计算这个节点最近一步处理者分配给他。
参数:该命令需要接受一个rollBackNodeId(退回节点号)。
功能描述:该命令执行时回根据rollBackNodeId查询出指定节点最后一次完成的任务,以及根据rollBackNodeId查询退回节点,并将流程推向退回节点,这里如果退回节点时多是任务那么就直接退回,否则就指定最后完成任务者为处理者。
例如:C任务到B任务,B任务执行“退回-后台指定步骤-重新分配”命令回退到C,C任务再到B,B执行“退回-指定步骤-自动最近处理者”,那么此时C任务就直接给最后一次处理任务的处理者。
3:退回-指定步骤-指定处理者
描述:退回到前台用户指定的节点和处理者。
参数:该命令需要接受一个rollBackNodeId(退回节点号)和rollBackAssignee(退回的指定处理者)。
功能描述:该命令,首先会构造一个令牌集合(子令牌(子任务)和父令牌)查找当前已经完成的任务并且取最后一条任务,根据任务ID或取任务退回的节点,
最后判断该任务如果是会签任务那么就直接推送任务到该节点,否则就推送任务到该节点并分配任务的处理者为最后任务的处理者。
例如:B任务退回到C任务时,自动指定将rollBackAssignee作为C任务的处理者。
注意:该命令不能退回到多实例任务节点上。
4:退回-上一步
描述:自动计算并退回到流程的上一步骤,任务处理者为上一步骤的处理者。
功能描述:该命令,首先会构造一个令牌集合(子令牌(子任务)和父令牌)查找当前已经完成的任务并且取最后一条任务,根据任务ID或取任务退回的节点,
最后判断该任务如果是会签任务那么就直接推送任务到该节点,否则就推送任务到该节点并分配任务的处理者为最后任务的处理者。
说明:该命令可以不需要指定参数。
例如:B任务直接退回C,并且处理者还是C任务的处理者。
以上4个退回命令大致步骤可以分为退回----》节点----》重新分配或指定处理者
下面就以上退回命令分别作比较,以便了解其差异和使用。
“退回-指定步骤-重新分配”、“退回-指定步骤-自动最近处理者”和“退回-指定步骤-指定处理者”相同点都是需要指定rollBackNodeId退回节点ID。
不同点:
1、任务分配上:“退回-指定步骤-重新分配”命令它的任务分配会触发执行选择器,“退回-指定步骤-自动最近处理者”命令任务分配是通过计算最近处理者,“退回-指定步骤-指定处理者”命令 任务分配上是直接指定处理者的。
2、对于任务回退到多实例任务上,“退回-指定步骤-重新分配”和“退回-指定步骤-自动最近处理者”都可以,但是“退回-指定步骤-指定处理者”该命令会抛异常
单独把 “退回-上一步”命令拿出来说是因为前面三个都需要指定“rollBackNodeId”退回节点 ,而该命令只能返回已走过的相邻节点(同是父令牌或子令牌),同时该命令支持退回多实例任务。
最后在实际场景下使用任务退回命令时需要注意以及几点:
1、任务不能回退到子任务(同是父令牌或子令牌的才可以);
2、任务不能退回到未完成任务上;
3、分支退回使用
4、多实例任务退回尽量避免使用
关于更多FoxBPM任务命令以及其他内容,请链接https://github.com/FoxBPM。