You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2007/12/12 12:26:22 UTC

svn commit: r603569 - /ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml

Author: jonesde
Date: Wed Dec 12 03:26:21 2007
New Revision: 603569

URL: http://svn.apache.org/viewvc?rev=603569&view=rev
Log:
Reverted changes done by Jacopo in rev 603506 which was a temporary fix for the problem described there; the real problem appears to be that code, in poss;the real problem seems to be that a variable was retained somewhere in a loop where it should not have been, and to fix that I made 2 changes: in the receiveInventoryProduct simple-method I changed it to use the parameters.inventoryItemId variable for input only, and it isn't set and used inside the loop, instead the new currentInventoryItemId variable is used; also in the quickReceiveReturn simple-method I add a clear-field of receiveCtx to make sure that stale data does not remain between iterations over return items; I don't have a good test case for this, so please take a look at it Jacopo, and it might be good to find a automated test case for this in the near future as this is fairly complicated and error prone code

Modified:
    ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml

Modified: ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml?rev=603569&r1=603568&r2=603569&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml Wed Dec 12 03:26:21 2007
@@ -113,20 +113,21 @@
             
             <!-- if there is an inventoryItemId, update it (this will happen when receiving serialized inventory already in the system, like for returns); if not create one -->
             <clear-field field-name="serviceInMap"/>
-<!--
+            <clear-field field-name="currentInventoryItemId"/>
+            
             <if-empty field-name="parameters.inventoryItemId">
--->
                 <set-service-fields service-name="createInventoryItem" map-name="parameters" to-map-name="serviceInMap"/>
                 <call-service service-name="createInventoryItem" in-map-name="serviceInMap">
-                    <result-to-field result-name="inventoryItemId" field-name="parameters.inventoryItemId"/>
+                    <result-to-field result-name="inventoryItemId" field-name="currentInventoryItemId"/>
                 </call-service>
-<!--
+                
                 <else>
                     <set-service-fields service-name="updateInventoryItem" map-name="parameters" to-map-name="serviceInMap"/>
                     <call-service service-name="updateInventoryItem" in-map-name="serviceInMap"/>
+                    <set field="currentInventoryItemId" from-field="parameters.inventoryItemId"/>
                 </else>
             </if-empty>
--->            
+
             <!-- do this only for non-serialized inventory -->
             <if-compare value="SERIALIZED_INV_ITEM" operator="not-equals" field-name="parameters.inventoryItemTypeId">
                 <clear-field field-name="serviceInMap"/>
@@ -162,7 +163,7 @@
                         </condition>
                         <then>
                             <clear-field field-name="serviceInMap"/>
-                            <set field="serviceInMap.inventoryItemId" from-field="parameters.inventoryItemId"/>
+                            <set field="serviceInMap.inventoryItemId" from-field="currentInventoryItemId"/>
                             <set field="serviceInMap.statusId" value="INV_AVAILABLE"/> <!-- XXX set to returned instead -->
                             <call-service service-name="updateInventoryItem" in-map-name="serviceInMap"/>
                         </then>
@@ -174,10 +175,10 @@
             <set-service-fields service-name="balanceInventoryItems" map-name="parameters" to-map-name="serviceInMap"/>
             <call-service service-name="balanceInventoryItems" in-map-name="serviceInMap"/>
 
-            <set field="successMessageList[]" value="Received ${parameters.quantityAccepted} of ${parameters.productId} in inventory item ${parameters.inventoryItemId}"/>
+            <set field="successMessageList[]" value="Received ${parameters.quantityAccepted} of ${parameters.productId} in inventory item ${currentInventoryItemId}"/>
         </loop>
         <!-- return the last inventory item received -->
-        <field-to-result field-name="parameters.inventoryItemId" result-name="inventoryItemId"/>
+        <field-to-result field-name="currentInventoryItemId" result-name="inventoryItemId"/>
     </simple-method>
 
     <simple-method method-name="quickReceiveReturn" short-description="Quick Receive Entire Return">
@@ -230,7 +231,9 @@
                         <result-to-field result-name="shipmentItemSeqId"/>
                     </call-service>
                 </iterate>
-                <iterate entry-name="returnItem" list-name="returnItems">                    
+                <iterate entry-name="returnItem" list-name="returnItems">
+                    <clear-field field-name="receiveCtx"/>
+                                        
                     <if-empty field-name="expectedItemStatus" map-name="returnItem">
                         <set value="INV_RETURNED" field="returnItem.expectedItemStatus" type="String"/>
                     </if-empty>



Re: svn commit: r603569 - /ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml

Posted by David E Jones <jo...@hotwaxmedia.com>.
Thanks for your persistence Jacopo. In rev 603849 I changed the input  
parameter to be currentInventoryItemId so the IN and OUT are named  
differently. That was the easier to change as the OUT param is used a  
lot, but the IN one I could only find used in the OAGIS component.

So... hopefully it is working properly now!

-David


On Dec 12, 2007, at 7:31 AM, Jacopo Cappellato wrote:

> David,
>
> I'm sorry but it is still not working: I think that the problem is  
> that when you receive two (or more) shipment items, the service  
> "receiveInventoryProduct" is called two times by the "service-multi"  
> event handler; after the first call, the inventoryItemId returned by  
> the service is put in the context (parameters) and so the second  
> service call will evaluate the following condition as false:
>
> <if-empty field-name="parameters.inventoryItemId">
>
> and so the updateInventoryItem service is called.
>
> I really don't know how to fix this, but a solution would be that of  
> changing the name of the IN parameter for the inventoryItemId...
>
> Jacopo
>
>
>
> jonesde@apache.org wrote:
>> Author: jonesde
>> Date: Wed Dec 12 03:26:21 2007
>> New Revision: 603569
>> URL: http://svn.apache.org/viewvc?rev=603569&view=rev
>> Log:
>> Reverted changes done by Jacopo in rev 603506 which was a temporary  
>> fix for the problem described there; the real problem appears to be  
>> that code, in poss;the real problem seems to be that a variable was  
>> retained somewhere in a loop where it should not have been, and to  
>> fix that I made 2 changes: in the receiveInventoryProduct simple- 
>> method I changed it to use the parameters.inventoryItemId variable  
>> for input only, and it isn't set and used inside the loop, instead  
>> the new currentInventoryItemId variable is used; also in the  
>> quickReceiveReturn simple-method I add a clear-field of receiveCtx  
>> to make sure that stale data does not remain between iterations  
>> over return items; I don't have a good test case for this, so  
>> please take a look at it Jacopo, and it might be good to find a  
>> automated test case for this in the near future as this is fairly  
>> complicated and error prone code
>> Modified:
>>    ofbiz/trunk/applications/product/script/org/ofbiz/shipment/ 
>> receipt/ShipmentReceiptServices.xml
>> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/ 
>> shipment/receipt/ShipmentReceiptServices.xml
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml?rev=603569&r1=603568&r2=603569&view=diff
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/ 
>> receipt/ShipmentReceiptServices.xml (original)
>> +++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/ 
>> receipt/ShipmentReceiptServices.xml Wed Dec 12 03:26:21 2007
>> @@ -113,20 +113,21 @@
>>                          <!-- if there is an inventoryItemId,  
>> update it (this will happen when receiving serialized inventory  
>> already in the system, like for returns); if not create one -->
>>             <clear-field field-name="serviceInMap"/>
>> -<!--
>> +            <clear-field field-name="currentInventoryItemId"/>
>> +                         <if-empty field- 
>> name="parameters.inventoryItemId">
>> --->
>>                 <set-service-fields service- 
>> name="createInventoryItem" map-name="parameters" to-map- 
>> name="serviceInMap"/>
>>                 <call-service service-name="createInventoryItem" in- 
>> map-name="serviceInMap">
>> -                    <result-to-field result-name="inventoryItemId"  
>> field-name="parameters.inventoryItemId"/>
>> +                    <result-to-field result-name="inventoryItemId"  
>> field-name="currentInventoryItemId"/>
>>                 </call-service>
>> -<!--
>> +                                 <else>
>>                     <set-service-fields service- 
>> name="updateInventoryItem" map-name="parameters" to-map- 
>> name="serviceInMap"/>
>>                     <call-service service- 
>> name="updateInventoryItem" in-map-name="serviceInMap"/>
>> +                    <set field="currentInventoryItemId" from- 
>> field="parameters.inventoryItemId"/>
>>                 </else>
>>             </if-empty>
>> --->            +
>>             <!-- do this only for non-serialized inventory -->
>>             <if-compare value="SERIALIZED_INV_ITEM" operator="not- 
>> equals" field-name="parameters.inventoryItemTypeId">
>>                 <clear-field field-name="serviceInMap"/>
>> @@ -162,7 +163,7 @@
>>                         </condition>
>>                         <then>
>>                             <clear-field field-name="serviceInMap"/>
>> -                            <set  
>> field="serviceInMap.inventoryItemId" from- 
>> field="parameters.inventoryItemId"/>
>> +                            <set  
>> field="serviceInMap.inventoryItemId" from- 
>> field="currentInventoryItemId"/>
>>                             <set field="serviceInMap.statusId"  
>> value="INV_AVAILABLE"/> <!-- XXX set to returned instead -->
>>                             <call-service service- 
>> name="updateInventoryItem" in-map-name="serviceInMap"/>
>>                         </then>
>> @@ -174,10 +175,10 @@
>>             <set-service-fields service- 
>> name="balanceInventoryItems" map-name="parameters" to-map- 
>> name="serviceInMap"/>
>>             <call-service service-name="balanceInventoryItems" in- 
>> map-name="serviceInMap"/>
>> -            <set field="successMessageList[]" value="Received $ 
>> {parameters.quantityAccepted} of ${parameters.productId} in  
>> inventory item ${parameters.inventoryItemId}"/>
>> +            <set field="successMessageList[]" value="Received $ 
>> {parameters.quantityAccepted} of ${parameters.productId} in  
>> inventory item ${currentInventoryItemId}"/>
>>         </loop>
>>         <!-- return the last inventory item received -->
>> -        <field-to-result field-name="parameters.inventoryItemId"  
>> result-name="inventoryItemId"/>
>> +        <field-to-result field-name="currentInventoryItemId"  
>> result-name="inventoryItemId"/>
>>     </simple-method>
>>      <simple-method method-name="quickReceiveReturn" short- 
>> description="Quick Receive Entire Return">
>> @@ -230,7 +231,9 @@
>>                         <result-to-field result- 
>> name="shipmentItemSeqId"/>
>>                     </call-service>
>>                 </iterate>
>> -                <iterate entry-name="returnItem" list- 
>> name="returnItems">                    +                <iterate  
>> entry-name="returnItem" list-name="returnItems">
>> +                    <clear-field field-name="receiveCtx"/>
>> +                                                             <if- 
>> empty field-name="expectedItemStatus" map-name="returnItem">
>>                         <set value="INV_RETURNED"  
>> field="returnItem.expectedItemStatus" type="String"/>
>>                     </if-empty>
>


Re: svn commit: r603569 - /ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml

Posted by Jacopo Cappellato <ti...@sastau.it>.
David,

I'm sorry but it is still not working: I think that the problem is that 
when you receive two (or more) shipment items, the service 
"receiveInventoryProduct" is called two times by the "service-multi" 
event handler; after the first call, the inventoryItemId returned by the 
service is put in the context (parameters) and so the second service 
call will evaluate the following condition as false:

<if-empty field-name="parameters.inventoryItemId">

and so the updateInventoryItem service is called.

I really don't know how to fix this, but a solution would be that of 
changing the name of the IN parameter for the inventoryItemId...

Jacopo



jonesde@apache.org wrote:
> Author: jonesde
> Date: Wed Dec 12 03:26:21 2007
> New Revision: 603569
> 
> URL: http://svn.apache.org/viewvc?rev=603569&view=rev
> Log:
> Reverted changes done by Jacopo in rev 603506 which was a temporary fix for the problem described there; the real problem appears to be that code, in poss;the real problem seems to be that a variable was retained somewhere in a loop where it should not have been, and to fix that I made 2 changes: in the receiveInventoryProduct simple-method I changed it to use the parameters.inventoryItemId variable for input only, and it isn't set and used inside the loop, instead the new currentInventoryItemId variable is used; also in the quickReceiveReturn simple-method I add a clear-field of receiveCtx to make sure that stale data does not remain between iterations over return items; I don't have a good test case for this, so please take a look at it Jacopo, and it might be good to find a automated test case for this in the near future as this is fairly complicated and error prone code
> 
> Modified:
>     ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml
> 
> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml?rev=603569&r1=603568&r2=603569&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml (original)
> +++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/receipt/ShipmentReceiptServices.xml Wed Dec 12 03:26:21 2007
> @@ -113,20 +113,21 @@
>              
>              <!-- if there is an inventoryItemId, update it (this will happen when receiving serialized inventory already in the system, like for returns); if not create one -->
>              <clear-field field-name="serviceInMap"/>
> -<!--
> +            <clear-field field-name="currentInventoryItemId"/>
> +            
>              <if-empty field-name="parameters.inventoryItemId">
> --->
>                  <set-service-fields service-name="createInventoryItem" map-name="parameters" to-map-name="serviceInMap"/>
>                  <call-service service-name="createInventoryItem" in-map-name="serviceInMap">
> -                    <result-to-field result-name="inventoryItemId" field-name="parameters.inventoryItemId"/>
> +                    <result-to-field result-name="inventoryItemId" field-name="currentInventoryItemId"/>
>                  </call-service>
> -<!--
> +                
>                  <else>
>                      <set-service-fields service-name="updateInventoryItem" map-name="parameters" to-map-name="serviceInMap"/>
>                      <call-service service-name="updateInventoryItem" in-map-name="serviceInMap"/>
> +                    <set field="currentInventoryItemId" from-field="parameters.inventoryItemId"/>
>                  </else>
>              </if-empty>
> --->            
> +
>              <!-- do this only for non-serialized inventory -->
>              <if-compare value="SERIALIZED_INV_ITEM" operator="not-equals" field-name="parameters.inventoryItemTypeId">
>                  <clear-field field-name="serviceInMap"/>
> @@ -162,7 +163,7 @@
>                          </condition>
>                          <then>
>                              <clear-field field-name="serviceInMap"/>
> -                            <set field="serviceInMap.inventoryItemId" from-field="parameters.inventoryItemId"/>
> +                            <set field="serviceInMap.inventoryItemId" from-field="currentInventoryItemId"/>
>                              <set field="serviceInMap.statusId" value="INV_AVAILABLE"/> <!-- XXX set to returned instead -->
>                              <call-service service-name="updateInventoryItem" in-map-name="serviceInMap"/>
>                          </then>
> @@ -174,10 +175,10 @@
>              <set-service-fields service-name="balanceInventoryItems" map-name="parameters" to-map-name="serviceInMap"/>
>              <call-service service-name="balanceInventoryItems" in-map-name="serviceInMap"/>
>  
> -            <set field="successMessageList[]" value="Received ${parameters.quantityAccepted} of ${parameters.productId} in inventory item ${parameters.inventoryItemId}"/>
> +            <set field="successMessageList[]" value="Received ${parameters.quantityAccepted} of ${parameters.productId} in inventory item ${currentInventoryItemId}"/>
>          </loop>
>          <!-- return the last inventory item received -->
> -        <field-to-result field-name="parameters.inventoryItemId" result-name="inventoryItemId"/>
> +        <field-to-result field-name="currentInventoryItemId" result-name="inventoryItemId"/>
>      </simple-method>
>  
>      <simple-method method-name="quickReceiveReturn" short-description="Quick Receive Entire Return">
> @@ -230,7 +231,9 @@
>                          <result-to-field result-name="shipmentItemSeqId"/>
>                      </call-service>
>                  </iterate>
> -                <iterate entry-name="returnItem" list-name="returnItems">                    
> +                <iterate entry-name="returnItem" list-name="returnItems">
> +                    <clear-field field-name="receiveCtx"/>
> +                                        
>                      <if-empty field-name="expectedItemStatus" map-name="returnItem">
>                          <set value="INV_RETURNED" field="returnItem.expectedItemStatus" type="String"/>
>                      </if-empty>
>