Openbravo Issue Tracking System - Openbravo ERP
View Issue Details
0045341Openbravo ERPA. Platformpublic2020-10-30 09:542020-11-09 12:30
gorkaion 
cberner 
highmajoralways
closedfixed 
5
 
PR21Q1 
Core
No
0045341: OBInterceptors consider an udpate new records created manually setting the createdBy
In a flow where it is required to force a different createdBy field than the current user.

The OBInterceptor when it manages the audit fields it checkes the createdBy field to determine if it is a new record or an update[1].

As the createdBy field is manually set the interceptor executes the update method. Which only sets the updated and updatedby fields.

But in case that the preventUpdateChange is enabled no field is set throwing a error of null updatedby.


[1] https://gitlab.com/openbravo/product/openbravo/-/blob/master/src/org/openbravo/dal/core/OBInterceptor.java#L336 [^]
[2] https://gitlab.com/openbravo/product/openbravo/-/blob/master/src/org/openbravo/dal/core/OBInterceptor.java#L414 [^]
1. Create a process that creates a new record and sets the createdBy field.
2. Before saving the new object enable the preventUpdateChange flag
OBInterceptor.setPreventUpdateInfoChange(true)
3. The database insert fails as the createdby column is null

Please note that the preventUpdateChange is set globally, so it is not requried that the same flow that creates the new objects setting the created by is the one setting the flag.
OBInterceptor should also check other audit columns to determine if the record is new.

When executing the onNew() to initialize the audit columns it should set only the ones that are empty at that time to allow forcing different values.
No tags attached.
Issue History
2020-10-30 09:54gorkaionNew Issue
2020-10-30 09:54gorkaionAssigned To => platform
2020-10-30 09:54gorkaionModules => Core
2020-10-30 09:54gorkaionResolution time => 1605826800
2020-10-30 09:54gorkaionTriggers an Emergency Pack => No
2020-11-04 17:13cbernerAssigned Toplatform => cberner
2020-11-05 10:01hgbotNote Added: 0124181
2020-11-09 12:30hgbotResolutionopen => fixed
2020-11-09 12:30hgbotStatusnew => closed
2020-11-09 12:30hgbotFixed in Version => PR21Q1
2020-11-09 12:30hgbotNote Added: 0124239
2020-11-09 12:30hgbotNote Added: 0124240

Notes
(0124181)
hgbot   
2020-11-05 10:01   
Merge Request created: https://gitlab.com/openbravo/product/openbravo/-/merge_requests/216 [^]
(0124239)
hgbot   
2020-11-09 12:30   
Directly closing issue as related merge request is already approved.

Repository: https://gitlab.com/openbravo/product/openbravo [^]
Changeset: aa120022d76fae60a9a4f317479fee11ae5a7461
Author: Cristian Berner <cristian.berner@openbravo.com>
Date: 2020-11-09T12:26:25+01:00
URL: https://gitlab.com/openbravo/product/openbravo/-/commit/aa120022d76fae60a9a4f317479fee11ae5a7461 [^]

Fixes ISSUE-45341: OBInterceptor considers an update if audit manually set on new record

New records were considered by OBInterceptor as an update if the
createdBy audit column was set manually and it also thrown out a
NullPointerException if OBInterceptor.setPreventUpdateInfoChange was set
to true previous to the .save.

This was happening because OBInterceptor assumed(wrongly) that createdBy
field was enough to check if an object was new. This has been modified
to check also the other 3 audit fields, if null, it will be considered
new and execution will happen onNew method, as expected.

Also, onNew method has been modified to update data only if it was not
already set previously manually, that means, when those audit
creationDate, createdBy, updated and updatedBy are null.

---
M modules/org.openbravo.base.weld/src-test/org/openbravo/base/weld/test/testinfrastructure/DalPersistanceEventTest.java
M src/org/openbravo/dal/core/OBInterceptor.java
---
(0124240)
hgbot   
2020-11-09 12:30   
Merge request merged: https://gitlab.com/openbravo/product/openbravo/-/merge_requests/216 [^]