[ 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)