diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java index 0b8a6f4..bce4e23 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java @@ -4,9 +4,13 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.TaskListener; +import org.flowable.engine.runtime.Execution; import org.flowable.task.service.delegate.DelegateTask; import org.jeecg.common.util.SpringContextUtils; +import java.util.LinkedHashSet; +import java.util.Set; + /** * Save the current task assignee as an execution local variable. */ @@ -37,8 +41,20 @@ public class SaveCurrentTaskAssigneeLocalListener implements TaskListener { delegateTask.getId(), delegateTask.getTaskDefinitionKey()); return; } - runtimeService.setVariableLocal(delegateTask.getExecutionId(), VARIABLE_NAME, assignee); - log.info("SaveCurrentTaskAssigneeLocalListener success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}", - delegateTask.getId(), delegateTask.getTaskDefinitionKey(), VARIABLE_NAME, assignee); + Set executionIds = new LinkedHashSet<>(); + executionIds.add(delegateTask.getExecutionId()); + + Execution execution = runtimeService.createExecutionQuery() + .executionId(delegateTask.getExecutionId()) + .singleResult(); + if (execution != null && StringUtils.isNotBlank(execution.getParentId())) { + executionIds.add(execution.getParentId()); + } + + for (String executionId : executionIds) { + runtimeService.setVariableLocal(executionId, VARIABLE_NAME, assignee); + } + log.info("SaveCurrentTaskAssigneeLocalListener success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}, executionIds={}", + delegateTask.getId(), delegateTask.getTaskDefinitionKey(), VARIABLE_NAME, assignee, executionIds); } } diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java index 7f131af..7ee533f 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java @@ -342,9 +342,21 @@ public class FlowNodeExpression { task.getId(), task.getTaskDefinitionKey()); return; } - runtimeService.setVariableLocal(task.getExecutionId(), variableName, assignee); - log.info("saveCurrentTaskAssigneeLocal success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}", - task.getId(), task.getTaskDefinitionKey(), variableName, assignee); + Set executionIds = new LinkedHashSet<>(); + executionIds.add(task.getExecutionId()); + + Execution execution = runtimeService.createExecutionQuery() + .executionId(task.getExecutionId()) + .singleResult(); + if (execution != null && StringUtils.isNotBlank(execution.getParentId())) { + executionIds.add(execution.getParentId()); + } + + for (String executionId : executionIds) { + runtimeService.setVariableLocal(executionId, variableName, assignee); + } + log.info("saveCurrentTaskAssigneeLocal success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}, executionIds={}", + task.getId(), task.getTaskDefinitionKey(), variableName, assignee, executionIds); } private List splitUsernames(Object value) {