[ 
https://issues.apache.org/jira/browse/OFBIZ-4501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jacques Le Roux reassigned OFBIZ-4501:
--------------------------------------

    Assignee: Jacques Le Roux

> Incorrect use of eca for create/updateShipment
> ----------------------------------------------
>
>                 Key: OFBIZ-4501
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-4501
>             Project: OFBiz
>          Issue Type: Bug
>          Components: product
>    Affects Versions: Release Branch 11.04, Trunk
>            Reporter: Kiran Gawde
>            Assignee: Jacques Le Roux
>            Priority: Major
>         Attachments: OFBIZ-4501-ModifiedCreateUpdateShipmentService.patch, 
> OFBIZ-4501-ModifiedCreateUpdateShipmentService.patch, 
> OFBIZ-4501-ShipmentServiceXml.patch, OFBIZ-4501-ShipmentServiceXml.patch, 
> OFBIZ-4501-ShipmentServiceXml.patch
>
>
> createShipment service doesn't populate the facility and order info into 
> shipment. Instead it is handled by eca rules. This is wrong. ECA rules should 
> be used to update other objects or cause other actions and not update the 
> object that is being committed. This makes it difficult to traverse the code. 
> Can also cause bugs that are difficult troubleshoot. e.g: In this case, 
> facilities are populated in shipment by method 
> setShipmentSettingsFromPrimaryOrder, but eca rule checking for 
> originFacilityId gets executed before it is populated. Following eca rules 
> should be removed and instead the code should be added to 
> create/updateshipment methods.
> {code:xml}
>     <!-- if new originFacilityId or destinationFacilityId, get settings from 
> facilities -->
>     <eca service="createShipment" event="commit">
>         <condition field-name="originFacilityId" operator="is-not-empty"/>
>         <action service="setShipmentSettingsFromFacilities" mode="sync"/>
>     </eca>
>     <eca service="createShipment" event="commit">
>         <condition field-name="destinationFacilityId" 
> operator="is-not-empty"/>
>         <action service="setShipmentSettingsFromFacilities" mode="sync"/>
>     </eca>
>     <eca service="updateShipment" event="commit">
>         <condition-field field-name="originFacilityId" operator="not-equals" 
> to-field-name="oldOriginFacilityId"/>
>         <condition field-name="originFacilityId" operator="is-not-empty"/>
>         <action service="setShipmentSettingsFromFacilities" mode="sync"/>
>     </eca>
>     <eca service="updateShipment" event="commit">
>         <condition-field field-name="destinationFacilityId" 
> operator="not-equals" to-field-name="oldDestinationFacilityId"/>
>         <condition field-name="destinationFacilityId" 
> operator="is-not-empty"/>
>         <action service="setShipmentSettingsFromFacilities" mode="sync"/>
>     </eca>
>     <!-- if new primaryOrderId, get settings from order -->
>     <eca service="createShipment" event="commit">
>         <condition field-name="primaryOrderId" operator="is-not-empty"/>
>         <action service="setShipmentSettingsFromPrimaryOrder" mode="sync"/>
>     </eca>
>     <eca service="updateShipment" event="commit">
>         <condition-field field-name="primaryOrderId" operator="not-equals" 
> to-field-name="oldPrimaryOrderId"/>
>         <condition field-name="primaryOrderId" operator="is-not-empty"/>
>         <action service="setShipmentSettingsFromPrimaryOrder" mode="sync"/>
>     </eca>
> {code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to