svn commit: r579424 - in /ofbiz/trunk/framework/service: dtd/service-eca.xsd src/org/ofbiz/service/eca/ServiceEcaAction.java

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

svn commit: r579424 - in /ofbiz/trunk/framework/service: dtd/service-eca.xsd src/org/ofbiz/service/eca/ServiceEcaAction.java

jonesde
Author: jonesde
Date: Tue Sep 25 18:32:37 2007
New Revision: 579424

URL: http://svn.apache.org/viewvc?rev=579424&view=rev
Log:
Added result-to-result feature for seca rules, based on patch from Adrian Crum but changed to be more consistent with context-to-result, AND to only copy over values that are valid for the service that triggered the eca; Jira #OFBIZ-1237

Modified:
    ofbiz/trunk/framework/service/dtd/service-eca.xsd
    ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java

Modified: ofbiz/trunk/framework/service/dtd/service-eca.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/dtd/service-eca.xsd?rev=579424&r1=579423&r2=579424&view=diff
==============================================================================
--- ofbiz/trunk/framework/service/dtd/service-eca.xsd (original)
+++ ofbiz/trunk/framework/service/dtd/service-eca.xsd Tue Sep 25 18:32:37 2007
@@ -229,6 +229,15 @@
                 </xs:restriction>
             </xs:simpleType>
         </xs:attribute>
+        <xs:attribute name="result-to-result" default="false">
+            <xs:annotation><xs:documentation>If true, and the action is successful, copies the action's result Map into the service's result Map.</xs:documentation></xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
         <xs:attribute name="ignore-failure" default="true">
             <xs:simpleType>
                 <xs:restriction base="xs:token">

Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java?rev=579424&r1=579423&r2=579424&view=diff
==============================================================================
--- ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java (original)
+++ ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java Tue Sep 25 18:32:37 2007
@@ -45,6 +45,7 @@
 
     protected boolean newTransaction = false;
     protected boolean resultToContext = true;
+    protected boolean resultToResult = false;
     protected boolean ignoreFailure = false;
     protected boolean ignoreError = false;    
     protected boolean persist = false;
@@ -62,6 +63,8 @@
         
         // default is true, so anything but false is true
         this.resultToContext = !"false".equals(action.getAttribute("result-to-context"));
+        // default is false, so anything but true is false
+        this.resultToResult = "true".equals(action.getAttribute("result-to-result"));
         this.newTransaction = !"false".equals(action.getAttribute("new-transaction"));
         this.ignoreFailure = !"false".equals(action.getAttribute("ignore-failure"));
         this.ignoreError = !"false".equals(action.getAttribute("ignore-error"));
@@ -99,13 +102,13 @@
             }
         } else {
             // standard ECA
-            if (serviceMode.equals("sync")) {
+            if (this.serviceMode.equals("sync")) {
                 if (newTransaction) {
-                    actionResult = dispatcher.runSync(serviceName, actionContext, -1, true);
+                    actionResult = dispatcher.runSync(this.serviceName, actionContext, -1, true);
                 } else {
-                    actionResult = dispatcher.runSync(serviceName, actionContext);
+                    actionResult = dispatcher.runSync(this.serviceName, actionContext);
                 }
-            } else if (serviceMode.equals("async")) {
+            } else if (this.serviceMode.equals("async")) {
                 dispatcher.runAsync(serviceName, actionContext, persist);
             }
         }
@@ -123,6 +126,11 @@
         // use the result to update the context fields.
         if (resultToContext) {
             context.putAll(dctx.getModelService(this.serviceName).makeValid(actionResult, ModelService.OUT_PARAM, false, null));
+        }
+
+        // use the result to update the result fields
+        if (resultToResult) {
+            result.putAll(dctx.getModelService(selfService).makeValid(actionResult, ModelService.OUT_PARAM, false, null));
         }
 
         // if we aren't ignoring errors check it here...