ofbiz11.04 eca 中 set 操作的BUG

本文介绍了一个 OFBiz 11.04 版本中 ECA set 指令存在的 bug,该 bug 导致 set 操作在特定情况下无法正确更新上下文中的值。文中还详细解释了 bug 的原因,并分享了针对此问题的源码修改方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日又发现了一个ofbiz 11.04  的bug .

在eca 中使用set 如果使用ofbiz 提供的表达式就会出现问题 . eg: <set field-name="newCpspTxId" env-name="${oriTx.oldCpspTxId}" />

 

这行命令的意思是 是把eca 中上下文context 中的oriTx 这个map 中的key 为oldCpspTxId 对应的value 以newCpspTxId为key put 到上下文context 中。。

 

这行命令在第一次执行是正确的 , 如果第一次从上下文取到的值为 301415 的话,那么下次执行取值仍然还是301415 .

之后再执行的话都是定值,不会根据上下文参数的变化而变化了 。

 

 

 

根据我们使用的需要,通过修改其源码 , 现对eca set 规则调整如下 ::

eca  set 使用规则(env-name , format , value  这三者单独设置的时候,不需要特别留意,配合使用的时候 请参考规则) :

1: 如果不设置 format   参数值来源先从env-name 中获取 , 如果 解析env-name 获得的值为null 那么默认使用 value  .这里的env-name 包括带${} 和 不带${}的,  如果 env-name 和 value 都为null 那么不做任何操作 。env-name 值类型为Object ,其上下文本来是什么类型现在还是什么类型 ,value 是String 类型 。


2:如果format 为 append 则先把env-name 转化成String  然后和 value 拼接起来 , env-value 居左  value 居右 .结果类型为String


3如果format 为其他类型 ,那么以env-name format 之后的值 为主 ,如果env-name 为null 那么 format value .

 

duan.jt(段金涛) 10:53:40

4 如果 field-name 的格式是以后逗号分隔的
 。eg:  <set field-name="oriTx.txId"    这种 ,系统会把最后的结果以 txId 为key 放到上下文中的oriTx 这个Map 中 。。。
field-name 中只支持一个逗号.如果不包含逗号 ,结果是以field-name  为key 直接放到上下文中的 。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值