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 f9e7874..49a65ca 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 @@ -8,6 +8,7 @@ import org.apache.commons.lang.StringUtils; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.runtime.Execution; +import org.flowable.task.service.delegate.DelegateTask; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.system.api.ISysBaseAPI; import org.springframework.beans.factory.annotation.Autowired; @@ -152,6 +153,49 @@ public class FlowNodeExpression { return Collections.emptyList(); } + /** + * Get first subprocess variable username. + * Example: ${flowNodeExpression.getSonProcessVariableString(execution, 'subApproveUser')} + * + * @param execution current execution + * @param variableName subprocess variable name + * @return username + */ + public String getSonProcessVariableString(DelegateExecution execution, String variableName) { + List usernames = getSonProcessVariable(execution, variableName); + if (CollectionUtils.isEmpty(usernames)) { + return null; + } + return usernames.get(0); + } + + /** + * Save current task assignee as execution local variable. + * Example: ${flowNodeExpression.saveCurrentTaskAssigneeLocal(task, 'subApproveUser')} + * + * @param task current task + * @param variableName local variable name + */ + public void saveCurrentTaskAssigneeLocal(DelegateTask task, String variableName) { + if (task == null || StringUtils.isBlank(variableName)) { + return; + } + String assignee = task.getAssignee(); + if (StringUtils.isBlank(assignee)) { + log.warn("saveCurrentTaskAssigneeLocal skipped, taskId={}, taskDefinitionKey={}, assignee is blank", + task.getId(), task.getTaskDefinitionKey()); + return; + } + if (StringUtils.isBlank(task.getExecutionId())) { + log.warn("saveCurrentTaskAssigneeLocal skipped, taskId={}, taskDefinitionKey={}, executionId is blank", + 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); + } + private List splitUsernames(Object value) { if (value == null) { return Collections.emptyList();