svn commit: r616639 - /ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r616639 - /ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java

adrianc
Author: adrianc
Date: Tue Jan 29 21:49:25 2008
New Revision: 616639

URL: http://svn.apache.org/viewvc?rev=616639&view=rev
Log:
Added the ability to call simple methods from screen widgets. This eliminates the need to define a service to call a simple method.

Just use the <script location="component://... .xml#methodName" syntax. The simple method call works just like a service event - the result Map elements are copied into the screen context.

Note that this enhancement should NOT be used to circumvent existing services - since many processes depend upon SECAs, which won't get executed using this screen widget operation.

Modified:
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java?rev=616639&r1=616638&r2=616639&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java Tue Jan 29 21:49:25 2008
@@ -51,6 +51,9 @@
 import org.ofbiz.entity.finder.ByConditionFinder;
 import org.ofbiz.entity.finder.EntityFinderUtil;
 import org.ofbiz.entity.finder.PrimaryKeyFinder;
+import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.SimpleMethod;
+import org.ofbiz.minilang.method.MethodContext;
 import org.ofbiz.service.DispatchContext;
 import org.ofbiz.service.GenericServiceException;
 import org.ofbiz.service.ModelService;
@@ -386,12 +389,23 @@
                 try {
                     BshUtil.runBshAtLocation(location, context);
                 } catch (GeneralException e) {
-                    String errMsg = "Error running BSH script at location [" + location + "]: " + e.toString();
-                    // throwing nested exception instead of logging full detail: Debug.logError(e, errMsg, module);
-                    throw new GeneralException(errMsg, e);
+                    throw new GeneralException("Error running BSH script at location [" + location + "]", e);
+                }
+            } else if (location.contains(".xml#")) {
+                String xmlResource = ScreenFactory.getResourceNameFromCombined(location);
+                String methodName = ScreenFactory.getScreenNameFromCombined(location);
+                Map localContext = FastMap.newInstance();
+                localContext.putAll(context);
+                DispatchContext ctx = this.modelScreen.getDispatcher(context).getDispatchContext();
+                MethodContext methodContext = new MethodContext(ctx, localContext, null);
+                try {
+                    SimpleMethod.runSimpleMethod(xmlResource, methodName, methodContext);
+                    context.putAll(methodContext.getResults());
+                } catch (MiniLangException e) {
+                    throw new GeneralException("Error running simple method at location [" + location + "]", e);
                 }
             } else {
-                throw new GeneralException("For screen script actions the script type is not yet support for location:" + location);
+                throw new GeneralException("For screen script actions the script type is not yet supported for location: [" + location + "]");
             }
         }
     }