Commit 9573a6156ab812e818a465485d762a580a6e23b1
1 parent
8e43004c
fix(crm):回款/回款计划操作日志合同名函数改后置相取值,修 SpEL EL1007E(A29)
getContractById 原 executeBefore=true:模板在方法执行前解析, #receivable/#receivablePlan 等 LogRecordContext 变量此时尚未绑定(方法 内部末尾才 putVariable),取值为 null 抛 SpelEvaluationException EL1007E(2026-09-21 23:50:39 实抓:LogRecordInterceptor:75 log record parse before function exception)。函数只用于日志展示合同名、无前置对比 需求,改后置相取值(与 getAdminUserById 同相,其 #clue 上下文变量后置相 解析正常)。 同修 CRM_RECEIVABLE_UPDATE_SUCCESS 模板变量名:updateReceivable 绑定的 是 oldReceivable 而非 receivable,原写法后置相仍会空引用。
Showing
2 changed files
with
7 additions
and
2 deletions
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java
| @@ -144,7 +144,9 @@ public interface LogRecordConstants { | @@ -144,7 +144,9 @@ public interface LogRecordConstants { | ||
| 144 | String CRM_RECEIVABLE_CREATE_SUB_TYPE = "创建回款"; | 144 | String CRM_RECEIVABLE_CREATE_SUB_TYPE = "创建回款"; |
| 145 | String CRM_RECEIVABLE_CREATE_SUCCESS = "创建了合同【{getContractById{#receivable.contractId}}】的{{#period != null ? '【第'+ #period +'期】' : '编号为【'+ #receivable.no +'】的'}}回款"; | 145 | String CRM_RECEIVABLE_CREATE_SUCCESS = "创建了合同【{getContractById{#receivable.contractId}}】的{{#period != null ? '【第'+ #period +'期】' : '编号为【'+ #receivable.no +'】的'}}回款"; |
| 146 | String CRM_RECEIVABLE_UPDATE_SUB_TYPE = "更新回款"; | 146 | String CRM_RECEIVABLE_UPDATE_SUB_TYPE = "更新回款"; |
| 147 | - String CRM_RECEIVABLE_UPDATE_SUCCESS = "更新了合同【{getContractById{#receivable.contractId}}】的{{#period != null ? '【第'+ #period +'期】' : '编号为【'+ #receivable.no +'】的'}}回款: {_DIFF{#updateReqVO}}"; | 147 | + // 注意:updateReceivable 绑定的上下文变量名是 oldReceivable(更新前的回款), |
| 148 | + // 模板必须与变量名一致,否则后置相取值为 null 抛 SpelEvaluationException | ||
| 149 | + String CRM_RECEIVABLE_UPDATE_SUCCESS = "更新了合同【{getContractById{#oldReceivable.contractId}}】的{{#period != null ? '【第'+ #period +'期】' : '编号为【'+ #oldReceivable.no +'】的'}}回款: {_DIFF{#updateReqVO}}"; | ||
| 148 | String CRM_RECEIVABLE_DELETE_SUB_TYPE = "删除回款"; | 150 | String CRM_RECEIVABLE_DELETE_SUB_TYPE = "删除回款"; |
| 149 | String CRM_RECEIVABLE_DELETE_SUCCESS = "删除了合同【{getContractById{#receivable.contractId}}】的{{#period != null ? '【第'+ #period +'期】' : '编号为【'+ #receivable.no +'】的'}}回款"; | 151 | String CRM_RECEIVABLE_DELETE_SUCCESS = "删除了合同【{getContractById{#receivable.contractId}}】的{{#period != null ? '【第'+ #period +'期】' : '编号为【'+ #receivable.no +'】的'}}回款"; |
| 150 | String CRM_RECEIVABLE_SUBMIT_SUB_TYPE = "提交回款审批"; | 152 | String CRM_RECEIVABLE_SUBMIT_SUB_TYPE = "提交回款审批"; |
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/operatelog/core/CrmContractParseFunction.java
| @@ -24,7 +24,10 @@ public class CrmContractParseFunction implements IParseFunction { | @@ -24,7 +24,10 @@ public class CrmContractParseFunction implements IParseFunction { | ||
| 24 | 24 | ||
| 25 | @Override | 25 | @Override |
| 26 | public boolean executeBefore() { | 26 | public boolean executeBefore() { |
| 27 | - return true; // 先转换值后对比 | 27 | + // 必须在方法执行后(后置相)取值:模板引用的是 LogRecordContext 变量 |
| 28 | + // (如 #receivablePlan.contractId),这些变量在方法内部末尾才绑定, | ||
| 29 | + // 创建前(前置相)取值为 null,会抛 SpelEvaluationException EL1007E | ||
| 30 | + return false; | ||
| 28 | } | 31 | } |
| 29 | 32 | ||
| 30 | @Override | 33 | @Override |