[ 
https://issues.apache.org/jira/browse/OFBIZ-3847?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15279901#comment-15279901
 ] 

Gareth Carter commented on OFBIZ-3847:
--------------------------------------

Hi

I have just encountered an issue caused by the patch committed for this issue.

If you delete records in an entity that has an eca on operation="remove" and 
conditions on the eca, you receive a NPE because of the line highlighted
{code:title=org.ofbiz.entityext.eca.EntityEcaRule}
        if( !fieldsToLoad.isEmpty()) {
            Delegator delegator = dctx.getDelegator();
            --> GenericValue oldValue =  delegator.findOne(entityName, 
value.getPrimaryKey(), false); // null on remove
            for( String fieldName : fieldsToLoad) {
                value.put(fieldName, oldValue.get(fieldName));
            }
        }
{code}

The old value does not exist any more and is null.


An example eca:


{code:title=applications/product/entitydef/eecas.xml}
    <eca entity="InventoryItemDetail" operation="create-store-remove" 
event="return">
        <condition field-name="availableToPromiseDiff" operator="not-equals" 
value="0" type="BigDecimal"/>
        <action service="setLastInventoryCount" mode="sync"/>
    </eca>
{code}

> Entity ECAs not triggered correctly when using Delegator.storeAll() method
> --------------------------------------------------------------------------
>
>                 Key: OFBIZ-3847
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-3847
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework
>    Affects Versions: Release Branch 10.04
>            Reporter: Martin Kreidenweis
>            Assignee: Jacques Le Roux
>             Fix For: Upcoming Branch
>
>         Attachments: GenericDelegator.java.diff, 
> OFBIZ-3847_Entity-ECAs-not-triggered-correctly.patch, 
> OFBIZ-3847_Entity-ECAs-not-triggered-correctly.patch
>
>
> The conditions don't work when updating (not creating) entities using the 
> Delegator.storeAll() method. E.g. the following condition does not work:
> {code}
> <eca entity="Product" operation="create-store" event="return">
>         <condition field-name="autoCreateKeywords" operator="not-equals" 
> value="N"/>
>         <action service="indexProductKeywords" mode="sync" 
> value-attr="productInstance"/>
> </eca>
> {code}
> The indexProductKeywords service is called anyway when the product is updated 
> and the autoCreateKeywords was "N" and stays "N". It works correctly for 
> newly created products. 
> The problem is in the method GenericDelegator.storeAll(), where unchanged 
> field values are not passed down to the store() method. The store method 
> calls the ECA engine, which does not receive the unchanged values at all and 
> thus cannot evaluate the EECA conditions correctly. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to