Kaynağa Gözat

fix:【bpm】“refactor(bpm): 优化多实例行为初始化逻辑”导致的问题,对应 https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1483/files

YunaiV 8 ay önce
ebeveyn
işleme
d860ca2c8c

+ 8 - 1
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java

@@ -56,7 +56,14 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav
     protected int resolveNrOfInstances(DelegateExecution execution) {
         // 情况一:UserTask 节点
         if (execution.getCurrentFlowElement() instanceof UserTask) {
-            // 获取任务的所有处理人
+            // 第一步,设置 collectionVariable 和 CollectionVariable
+            // 从  execution.getVariable() 读取所有任务处理人的 key
+            super.collectionExpression = null; // collectionExpression 和 collectionVariable 是互斥的
+            super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId());
+            // 从 execution.getVariable() 读取当前所有任务处理的人的 key
+            super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
+
+            // 第二步,获取任务的所有处理人
             @SuppressWarnings("unchecked")
             Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class);
             if (assigneeUserIds == null) {

+ 8 - 1
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java

@@ -47,7 +47,14 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB
     protected int resolveNrOfInstances(DelegateExecution execution) {
         // 情况一:UserTask 节点
         if (execution.getCurrentFlowElement() instanceof UserTask) {
-            // 获取任务的所有处理人
+            // 第一步,设置 collectionVariable 和 CollectionVariable
+            // 从  execution.getVariable() 读取所有任务处理人的 key
+            super.collectionExpression = null; // collectionExpression 和 collectionVariable 是互斥的
+            super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId());
+            // 从 execution.getVariable() 读取当前所有任务处理的人的 key
+            super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
+
+            // 第二步,获取任务的所有处理人
             // 不使用 execution.getVariable 原因:目前依次审批任务回退后 collectionVariable 变量没有清理, 如果重新进入该任务不会重新分配审批人
             @SuppressWarnings("unchecked")
             Set<Long> assigneeUserIds = (Set<Long>) execution.getVariableLocal(super.collectionVariable, Set.class);