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


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

        

Reply via email to