大部分审批场景中,后续审批节点需要在某些情况下驳回流程,使得前置节点重新完成任务。以下将通过几个简单的例子描述如何实现驳回逻辑。
驳回在DeepFlow中不是一个固定的配置,需要多个节点结合后共同实现。实现一个驳回逻辑,需要以下几个配置。
一个用户任务节点(审批节点),用来进行操作
一个网关节点,用来判断审批结果(是否驳回/继续向下执行)
一个跳转节点,根据逻辑跳转回到目标节点继续执行
示例如下:
例提交
节点后,涉及A、B、C三个审批节点:
A节点处理时,可驳回至提交
B节点处理时,可驳回至提交
、A节点
C节点处理时,可驳回至提交
、A节点
、B节点
在基础驳回操作中增加跳转操作,A、B、C节点可跳转的范围依次为:[提交
]、[提交
、A节点
]、[提交
、A节点
、B节点
]
示例如下:
使用态(跳转动作不支持快速处理,需进入任务处理页面):
拓展:若涉及到数据状态变更,例如提交后(A审批前),数据状态为“submitted”,A审批后(B审批前)为“A_approved”,则可以在节点配置监听,当任务创建时/开始后,执行用于更改数据状态的工作流,这样每次驳回后,例如从C驳回A,数据状态则会从“B_approved”更改为“submitted”。
工作流示例:
多人任务不同于单人任务,单人任务是一旦唯一执行人完成任务,整个节点就完成。
多人任务属于多实例的一种,整个节点何时完成要看配置的完成规则(或签、会签、等待特定应答),例如会签是需要所有执行人都完成任务后,取大多数结果作为多人任务的最终输出结果,此时跳转
动作就不适用于其中每个单个用户审批,因为这和会签的逻辑是冲突的,跳转一定会结束当前节点并开始一个新的节点,但会签必须等其他用户也审批完成之后多人任务节点才会结束。
因此,要实现多人任务的自由驳回,需要添加多个拒绝动作+排他网关,来实现,可选被驳回的目标节点有几个,就需要配置多个少拒绝动作。
且多人任务的完成规则一定是等待特定应答
,只要有人驳回,整个节点就驳回,这样可以满足最后一个审批人的审批结果完全等于多人任务整体节点的审批结果。
效果:
平行网关的驳回较上述的一条分支的驳回较为特殊
上述基础驳回场景下,可以直接驳回到需要驳回的节点
平行网关中的驳回,按照同样的逻辑,似乎应该驳回到平行网关处,但是,平行网关作为合并时,会等待所有分支流程的到达,如果直接配置跳转到平行网关,会导致流程运行到平行网关时,由于一直等不到跳转节点的运行,而卡死在平行网关处
因此,对于涉及平行网关的驳回,可参考以下流程图
会签驳回之,需要驳回到平行网关之前,因此在平行网关前面配置一个空的没有任何条件的排他网关专门用来做驳回的跳转使用
按上述配置,如果平行网关内有A、B、C共3条分支,后续汇总审批驳回后,需要3个分支都重新完成才能继续向后流转。
若希望只驳回A,B、C无需再次提交,A提交之后,就能继续向后流转,可以采用以下思路:
新增全局变量记录被驳回的节点,初始值为null,例如变量命名reject_node
汇总审批对应的UX页面,需要在任务处理时回传参数reject_node
的值,告知工作流哪个节点需要重新提交,例如回传A
,则表明A节点需要重新提交,汇总审批节点需要有完成时映射:wfv$reject_node
=acr$extra_res.reject_node
用包容网关替代平行网关,包容网关:包容网关 — 网关 | DeepFOS Docs
入线时,判断,只要wfv$reject_node
为空(没有驳回),或者,wfv$reject_node
=后续分支节点编码(这个分支节点被驳回了),则需要走后续的分支节点,否则不用后续的分支
出线时,无需特殊处理,默认到汇总审批即可,只要到达的数量=入线的数量,就会往下流转
效果:初始审批时,A、B、C都会执行,入线数量=3,出线需要等到3条全部执行完,才会往后走;驳回A时,A会执行,B、C不会执行,入线数量=1,只要A完成了,就会往后走
在上一条DEMO的基础上,若需要汇总审批时能驳回多个节点,而非仅一个,思路相同,需要将字符串
格式修改为字符串数组
格式、相关判断的比较符要从等于
修改为包含
,较为重要的调整点如下:
全局变量reject_node
格式为字符串数组
,初始值为空
汇总审批对应的UX页面,需要在任务处理时回传参数reject_node
的值,对应的控件值要允许多选,这样回传给工作流的值才是数组类型,例如回传["A","B"]
包容网关入线的判断条件需要修改
判断wfv$reject_node
为空(没有驳回),修改为wfv$reject_node.length === 0
判断wfv$reject_node
包含后续分支节点编码(这个分支节点被驳回了),修改为wfv$reject_node.indexOf("A") !== -1
,这是JS的ES5的语法规则
效果:初始审批时,A、B、C都会执行,入线数量=3,出线需要等到3条全部执行完,才会往后走;驳回A和B时,A和B会执行,C不会执行,入线数量=2,只要A和B都完成了,就会往后走
多实例子流程通过数组变量动态下发流程,因此有两种情况
全部驳回时,和普通的驳回一致,只需要跳转回到「多实例子流程」节点,然后按照之前的数组重新下发流程就好
部分驳回时,由于「多实例子流程」节点具体执行多少条子流程只和数组变量内的成员数量有关,因此只需要想办法修改数组变量中的成员即可
推荐1:目前最直接的方法,就是通过PY节点查询关联的业务数据状态,查询当前全部审批的流程中有多少条驳回了,然后返回对应的已经驳回的业务数据数组,只有驳回的数组进行多实例子流程的下发即可
推荐2:后续会增加直接在任务完成时从UX中获取参数,即可直接从UX中获取想要驳回的数组数量
回到顶部
咨询热线