[ https://issues.apache.org/jira/browse/OFBIZ-4501?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13144402#comment-13144402 ]
Jacques Le Roux commented on OFBIZ-4501: ---------------------------------------- Just FYI: part of this code is pretty old: http://svn.ofbiz.org/viewcvs/trunk/components/product/servicedef/secas_shipment.xml?rev=82&view=markup At this time maybe things were far less complicated... > 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, > 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. > <!-- 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