Thank you Adrian, but I am not sure I understand what you are proposing; could you add some details? If I use the declaration:
def testMethod1(Map context) { ... } I get the error: javax.script.ScriptException: java.lang.NullPointerException: Cannot set property 'orderId' on null object Thanks, Jacopo On Apr 13, 2012, at 12:57 PM, Adrian Crum wrote: > Functions/methods should return a value. Also, according to the JSR if a > scripting language doesn't support returning a value, then the last value > assigned to a variable is returned. > > So, trying to return values from a function via the context Map will not > work. That's why I originally supplied the context Map as a function/method > argument - so you could do something like: > > def testMethod1(Map context) { > orderId = parameters.orderId; > context.orderId = orderId; > } > > > -Adrian > > > On 4/13/2012 11:37 AM, Jacopo Cappellato wrote: >> Hi Adrian, >> >> I am trying to test the ability to specify a method name from from a<script> >> element in a screen widget but I am getting an error and I am wondering if >> you could help in figuring out what is wrong. >> >> If you apply this patch: >> >> Index: applications/order/widget/ordermgr/OrderViewScreens.xml >> =================================================================== >> --- applications/order/widget/ordermgr/OrderViewScreens.xml (revision >> 1325649) >> +++ applications/order/widget/ordermgr/OrderViewScreens.xml (working copy) >> @@ -55,7 +55,7 @@ >> <set field="layoutSettings.javaScripts[]" >> value="/ordermgr/images/js/order.js" global="true"/> >> <set field="layoutSettings.javaScripts[]" >> value="/ordermgr/images/js/OrderShippingInfo.js" global="true"/> >> <set field="layoutSettings.javaScripts[]" >> value="/ordermgr/images/js/geoAutoCompleter.js" global="true"/> >> -<script >> location="component://order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy"/> >> +<script >> location="component://order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy#testMethod1"/> >> <script >> location="component://order/webapp/ordermgr/WEB-INF/actions/order/OrderViewWebSecure.groovy"/> >> </actions> >> <widgets> >> Index: >> applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy >> =================================================================== >> --- >> applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy >> (revision 1325649) >> +++ >> applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy >> (working copy) >> @@ -33,6 +33,8 @@ >> >> import javolution.util.FastMap; >> >> +def testMethod1() { >> + >> orderId = parameters.orderId; >> context.orderId = orderId; >> >> @@ -494,3 +496,5 @@ >> } >> } >> context.orderAdjustmentId = orderAdjustmentId; >> + >> +} >> >> and then visit this url: >> >> https://localhost:8443/ordermgr/control/orderview?orderId=Demo1002 >> >> you will get the following error: >> >> [java] Error running script at location >> [component://order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy]: >> javax.script.ScriptException: groovy.lang.MissingPropertyException: No such >> property: context for class: Script1 >> [java] Exception: javax.script.ScriptException >> [java] Message: groovy.lang.MissingPropertyException: No such property: >> context for class: Script1 >> [java] ---- cause >> --------------------------------------------------------------------- >> [java] Exception: groovy.lang.MissingPropertyException >> [java] Message: No such property: context for class: Script1 >> [java] ---- stack trace >> --------------------------------------------------------------- >> [java] groovy.lang.MissingPropertyException: No such property: context >> for class: Script1 >> [java] >> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50) >> [java] >> org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49) >> [java] >> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:231) >> [java] Script1.testMethod1(Script1.groovy:39) >> [java] sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> [java] >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> [java] >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> [java] java.lang.reflect.Method.invoke(Method.java:597) >> [java] >> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) >> [java] groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) >> [java] groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1047) >> [java] groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:914) >> [java] groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:877) >> [java] groovy.lang.Closure.call(Closure.java:412) >> [java] >> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.callGlobal(GroovyScriptEngineImpl.java:385) >> [java] >> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.callGlobal(GroovyScriptEngineImpl.java:379) >> [java] >> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.invokeImpl(GroovyScriptEngineImpl.java:368) >> [java] >> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.invokeFunction(GroovyScriptEngineImpl.java:163) >> [java] org.ofbiz.base.util.ScriptUtil.executeScript(ScriptUtil.java:387) >> [java] org.ofbiz.base.util.ScriptUtil.executeScript(ScriptUtil.java:339) >> [java] org.ofbiz.base.util.ScriptUtil.executeScript(ScriptUtil.java:324) >> [java] >> org.ofbiz.widget.ModelWidgetAction$Script.runAction(ModelWidgetAction.java:416) >> ... >> >> So the error is caused by line 387 of ScriptUtil.java; here is the relevant >> code: >> >> if (UtilValidate.isNotEmpty(functionName)) { >> try { >> Invocable invocableEngine = (Invocable) engine; >> result = invocableEngine.invokeFunction(functionName, args >> == null ? EMPTY_ARGS : args); // this is where the error is thrown >> } catch (ClassCastException e) { >> throw new ScriptException("Script engine " + >> engine.getClass().getName() + " does not support function/method >> invocations"); >> } >> } >> >> Any hint on how I could solve this? >> >> Thanks! >> >> Jacopo >> >> >> >> >>