电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

如何根据预测流程节点信息判断是否跳过当前审批节点

来源:金蝶云社区作者:金蝶2024-09-2315

如何根据预测流程节点信息判断是否跳过当前审批节点

关键词:工作流、跳过、审批节点

一、需求

     背景:在采购订货系统中,工作流流程审批存在这样的审批规范:

  • 如果某个用户a是某个审批节点审批人 ,同时后面还有审批节点的审批人是用户a,并且后面存在某个审批节点的审批人b是他的下属,那么跳过当前审批节点

  • 如果某个用户a是某个审批节点审批人 ,同时后面没有审批节点的审批人是用户a,或者后面不存在某个审批节点的审批人b是他的下属,则保留当前审批审批节点。

    场景:在工作流审批时,有如下X-Y-Z-M三个审批节点,审批人设置为如下图。第一级审批人、第三级审批人和第四级节点是 一样的。

  • 如果创建人是第二级审批人(张三)的领导时,第一级和第四级审批节点跳过,保留第二级审批节点和第三级审批节点。

  • 如果创建人不是第二级审批人(张三)的领导时,保留第一级审批和第二级审批节点,第三节和第四级审批节点跳过

二、思路与方案

(1)思路:

       目前,工作流系统支持存在多个审批节点时,要么是只能跳过前面相同审批人节点(审批人后审控制介绍 (kingdee.com))。要么只能跳过后面所有系统审批人节点(自动审批的四种场景 (kdcloud.com))。要么是按照当前表单数据作为条件是否跳过当前审批节点。并不能按照当前节点之后的审批信息去判断是否跳过某个审批节点。因此需要借助二开插件实现如需求中描述的场景。

(2)方案:

      在工作流审批的各个节点添加工作流插件,在条件事件hasTrueCondition中调用流程预测接口WorkflowServiceHelper.getPreComputorRecord去获取出每个审批节点的审批人,然后判断后面的审批人中是否存在某个审批人是当前审批人的下属,并且还存在其他审批节点的审批人和当前节点审批人是相同的,则跳过当前审批节点。需要注意的是,调用流程预测接口时,又会进入条件事件hasTrueCondition,导致死循环。因此要在hasTrueCondition做条件判断如果是预测接口进入的工作流插件,直接不走插件的处理逻辑。

三、实现过程

1、控制领导在下属后面去审批

public class ReqWorkflowPlugin implements Plugin, IWorkflowPlugin {
    @Override
    public boolean hasTrueCondition(AgentExecution execution) {
        if(execution instanceof PreComputatorExecutionEntityImpl){//预测流程时,不走这个条件判断,避免死循环
            return false;
        }
        Boolean condition=false;//是否跳过当前节点
        Boolean conditiona=false;//如果当前节点是后面某个节点审批人的领导
        Boolean conditionb=false;//存在后面还有和当前节点相同的审批人的审批节点。
        //单据id
        String businessKey = execution.getBusinessKey();
        //获取当前审批人
        String curPartipantIds =  execution.getCurrentTask() == null?null: (String) execution.getCurrentTask().getVariable("currentParticipant");
        List<Long> currentApproverIds = execution.getCurrentApprover();
        if(currentApproverIds.isEmpty() && null!=curPartipantIds && curPartipantIds.trim().length()>0
                &&!curPartipantIds.contains(",")){
            currentApproverIds.add(Long.parseLong(curPartipantIds));//仅有一个参与人时
        }
        if (currentApproverIds.size() == 1) {
            Long currentApproverId = currentApproverIds.get(0);
            Long processInstanceId = execution.getProcessInstanceId();
            //获取流程后面节点的预计算结果
            IPreComputorRecord preComputorRecord = WorkflowServiceHelper.getPreComputorRecord(processInstanceId);
            List<IPreComputorRecordItem> pcrDataList = preComputorRecord.getPcrData();
            for (int i = 1; i < pcrDataList.size(); i++) {//当i=0时,是当前节点,要比较的是当前之后的节点
                IPreComputorRecordItem pcrData = pcrDataList.get(i);
                List<S

如何根据预测流程节点信息判断是否跳过当前审批节点

关键词:工作流、跳过、审批节点一、需求 背景:在采购订货系统中,工作流流程审批存在这样的审批规范:如果某个用户a是某个审批节点...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信