Allow entity-data-reader to indicate if it should insert, update, or upsert 
records
-----------------------------------------------------------------------------------

                 Key: OFBIZ-2866
                 URL: https://issues.apache.org/jira/browse/OFBIZ-2866
             Project: OFBiz
          Issue Type: Improvement
          Components: framework
    Affects Versions: SVN trunk
            Reporter: Bob Morley


This ticket is the result of forum conversation: 
http://www.nabble.com/Handling-one-time-seed-data-tt25136333.html

What this support provides is the ability at the entity-data-reader level to 
indicate if the entities loaded from that reader should insert, update, or 
upsert records into the database.  The current process is an upsert.  This 
patch provides the following:

- enhancement on entity-data-reader to indicate if "insert-values" and 
"update-values" is true/false.  By default they are true/true; this provides 
the ability to re-execute "seed-initial" data to pickup new records (but leave 
others unmodified) by setting the attributes to true/false (effectively 
skipping updates).  In practice these are the only two flavors, but this design 
provides the flexibility to do all four permutations.

- resulting informational messages were showing the "read" total but calling 
this the "changed" total.  A new object was created (entityDataLoadResults) 
which can hold any metrics related to the data load.  Signature changes and 
some logic changes were put into place to use this result and then nicely 
report a true "written / read" information message during and at the end of the 
data load.

- a bug was found when the dirty check in DelegatorImpl.storeAll where it was 
using the GenericEntity.get method for the new/old value comparison.  This 
performed a resource lookup so these values would always match.  I found this 
when testing my code using the GeoData -- I was changing the country name and 
it was not being properly updated.  The fix was to change the protection on the 
GenericEntity.getFieldValue method and then use that in the DelegatorImpl.  
This does a check of the true database value vs. the value form the data 
loading entity (typically xml file).

There should be no changes other than the information messages coming out in 
both the DataLoader and the WebToolsService.entityImportReaders.

Configuration change can be applied as such:
<entity-data-reader name="seed-initial" insert-values="true" 
update-values="false"/>

Sample of the information messages from a load:
00005 of 00029 from 
file:/Users/rmorley/dev/ofbiz-trunk/ofbiz/specialpurpose/assetmaint/data/AssetMaintDemoData.xml
=-=-=-=-=-=-= Finished the data load with 1086 rows changed of 12184 rows read.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to