From 99f33801e9a8e78824b52e945a32a24ee3ea0961 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Sun, 3 May 2026 12:08:48 +0800 Subject: [PATCH] =?UTF-8?q?yxk-20260506-=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=A1=A8=E8=BE=BE=E5=BC=8F=EF=BC=9A=201?= =?UTF-8?q?=E3=80=81saveCurrentTaskAssigneeLocal=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E8=8A=82=E7=82=B9=E5=8A=9E=E7=90=86=E4=BA=BA?= =?UTF-8?q?=E5=88=B0=E5=AD=90=E6=B5=81=E7=A8=8B=E7=9A=84=E5=B1=80=E9=83=A8?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E4=B8=AD=E5=8E=BB=202=E3=80=81getSonProcessV?= =?UTF-8?q?ariableString=E8=8E=B7=E5=8F=96=E5=AD=90=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=8F=98=E9=87=8F=EF=BC=8C=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=98=AFString?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/expression/FlowNodeExpression.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) 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();