近日又发现了一个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 直接放到上下文中的 。。。