Author: adrianc
Date: Sat Oct 4 12:52:48 2014 New Revision: 1629382 URL: http://svn.apache.org/r1629382 Log: Fixed a bug in Mini-language <field-to-result> element where nested expressions were not evaluated correctly. Reported by Jacopo on the dev mailing list. Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/serviceops/FieldToResult.java ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/test/MiniLangTests.java Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/serviceops/FieldToResult.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/serviceops/FieldToResult.java?rev=1629382&r1=1629381&r2=1629382&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/serviceops/FieldToResult.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/serviceops/FieldToResult.java Sat Oct 4 12:52:48 2014 @@ -18,7 +18,8 @@ *******************************************************************************/ package org.ofbiz.minilang.method.serviceops; -import org.ofbiz.base.util.collections.FlexibleMapAccessor; +import org.ofbiz.base.util.string.FlexibleStringExpander; +import org.ofbiz.base.util.collections.*; import org.ofbiz.minilang.MiniLangException; import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; @@ -60,7 +61,14 @@ public final class FieldToResult extends Object fieldVal = this.fieldFma.get(methodContext.getEnvMap()); if (fieldVal != null) { if (this.resultFma.containsNestedExpression()) { - String expression = (String) this.resultFma.get(methodContext.getEnvMap()); + /* + * Replace FMA nested expression functionality with our own. + * The nested expression must be evaluated once using the + * method context, [methodContext.getEnvMap()] then again to + * place the value in the result Map [methodContext.getResults()]. + */ + FlexibleStringExpander fse = FlexibleStringExpander.getInstance(this.resultFma.getOriginalName()); + String expression = fse.expandString(methodContext.getEnvMap()); FlexibleMapAccessor<Object> resultFma = FlexibleMapAccessor.getInstance(expression); resultFma.put(methodContext.getResults(), fieldVal); } else { Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/test/MiniLangTests.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/test/MiniLangTests.java?rev=1629382&r1=1629381&r2=1629382&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/test/MiniLangTests.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/test/MiniLangTests.java Sat Oct 4 12:52:48 2014 @@ -102,7 +102,7 @@ public class MiniLangTests extends OFBiz MethodContext context = createServiceMethodContext(); String result = methodToTest.exec(context); assertEquals("testFieldToResult success result", methodToTest.getDefaultSuccessCode(), result); - assertEquals("Constant result name set", "someResultValue", context.getResult("constantResultName")); - //assertEquals("Dynamic result name set", "someResultValue", context.getResult("dynamicResultName")); This one fails! + assertEquals("Plain expression result name set", "someResultValue", context.getResult("constantResultName")); + assertEquals("Nested expression result name set", "someResultValue", context.getResult("dynamicResultName")); } } |
Free forum by Nabble | Edit this page |