[ https://issues.apache.org/jira/browse/OFBIZ-4501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kiran Gawde updated OFBIZ-4501: ------------------------------- Attachment: OFBIZ-4501-ModifiedCreateUpdateShipmentService.patch Changes are done to 4 files: controller.xml, services_shipping.xml, secas_shipment.xml(Removed reference to setShipmentSettingsFromPrimaryOrder, setShipmentSettingsFromFacilities) ShipmentServices.xml(Changes look a lot, but most are just renaming of newEntity and lookedUpValue to shipment) > 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, SVN trunk > Reporter: Kiran Gawde > Attachments: OFBIZ-4501-ModifiedCreateUpdateShipmentService.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. > <!-- 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> -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira