# 动态并行

# 概念

并行:在业务需求规则中,已知多个固定用户或部门进行同时对表单查看或操作
动态并行:根据特定条件或表单数据变量,计算出任意多个用户或部门进行同时对表单查看或操作




# 基础篇

# 需求场景

  • 申请人发起,添加指定成员,成员各自完成本人部分数据填写并提交
  • 使用groupMember重复节进行动态处理,无需messenger干预处理

# 开发要点

  • 成员自行填写部分数据应在groupMember重复节中做相互隔离
  • 并行节点使用动态分支绑定groupMember
  • 并行节点步骤 设置 “扩展显示名”
  • “扩展显示名” 优化效果



基础案例地址


# 进阶篇

# 需求场景

  • 申请人发起,添加指定成员,成员各自完成本人部分数据填写并提交
  • 根据groupMember成员所属单位,计算审批单位groupDeptApprove并行审批,同单位多个成员只审一次
  • 有单位审批不通过提前结束,再次提交审批已通过单位无需再审批
  • 单位审批节点,仅查看本单位成员信息

# 开发要点

  • 根据groupMember成员所属单位,计算审批单位groupDeptApprove并行审批



  • 并行审批动态分支 groupDeptApprove



  • 已审批通过单位 无需再审批

    $${fieldDeptApproveResult} 为获取重复节当前行“审批结果”字段,结果为“1”表示为同意




  • 并行审批提前结束设置

校验重复节中“审批结果”字段集合,任意用户有提交非同意意见,提前结束




  • 并行审批完成后 判断是否需要自动退回

校验重复节中“审批结果”字段集合,任意用户有提交非同意意见,自动退回




# 单位审批节点,仅查看本单位成员信息

  • 新增CurrentDept隐藏字段作为临时变量使用;成员列表itemVisible属性在审批节点时,动态显示本单位成员
  • 临时变量CurrentDept通过单位审批并行节点Rendering事件进行赋值
public InfoPlusResponse onStepDeptApproveRendering(InfoPlusEvent e) {
    InfoPlusExampleParallelAdvanced form = e.toBean(InfoPlusExampleParallelAdvanced.class);
    for(InfoPlusExampleParallelAdvancedDeptApprove d:form.getDeptApprove()){
        //此处利用重复节并行 数据隔离特点 仅当前分支才有审批人信息
        //遍历 审批人不为空 设置临时变量CurrentDept 用于前端显示对应单位成员
        if(d.getDeptApprover()!=null && StringUtils.isNotEmpty(d.getDeptApprover().getAccount())){
            form.setCurrentDept(new CodeItemImpl(d.getDeptApproveTitle()));
        }
    }
    InfoPlusResponse response=new InfoPlusResponse(e, form);
    return response;
}
1
2
3
4
5
6
7
8
9
10
11
12
  • 单位并行节点DeptApprover初值,该字段只在当前节点有写权限

# 案例地址

download 流程链接
download messenger地址