|View Issue Details|
|Type||Category||Severity||Reproducibility||Date Submitted||Last Update|
|defect||[Openbravo ERP] A. Platform||major||always||2020-10-30 09:54||2020-11-09 12:30|
|Priority||high||Resolution||fixed||Fixed in Version||PR21Q1|
|Status||closed||Fix in branch||Fixed in SCM revision|
|OS Version||Database version||Ant version|
|Product Version||SCM revision|
|Review Assigned To|
|Regression introduced in release|
|Regression introduced by commit|
|Triggers an Emergency Pack||No|
0045341: OBInterceptors consider an udpate new records created manually setting the createdBy
|Description||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.
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.
 https://gitlab.com/openbravo/product/openbravo/-/blob/master/src/org/openbravo/dal/core/OBInterceptor.java#L336 [^]
 https://gitlab.com/openbravo/product/openbravo/-/blob/master/src/org/openbravo/dal/core/OBInterceptor.java#L414 [^]
|Steps To Reproduce||1. Create a process that creates a new record and sets the createdBy field.|
2. Before saving the new object enable the preventUpdateChange flag
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.
|Proposed Solution||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.
|Tags||No tags attached.|
Merge Request created: https://gitlab.com/openbravo/product/openbravo/-/merge_requests/216 [^]
Directly closing issue as related merge request is already approved.
Repository: https://gitlab.com/openbravo/product/openbravo [^]
Author: Cristian Berner <email@example.com>
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.
Merge request merged: https://gitlab.com/openbravo/product/openbravo/-/merge_requests/216 [^]
|2020-10-30 09:54||gorkaion||New Issue|
|2020-10-30 09:54||gorkaion||Assigned To||=> platform|
|2020-10-30 09:54||gorkaion||Modules||=> Core|
|2020-10-30 09:54||gorkaion||Triggers an Emergency Pack||=> No|
|2020-11-04 17:13||cberner||Assigned To||platform => cberner|
|2020-11-05 10:01||hgbot||Note Added: 0124181|
|2020-11-09 12:30||hgbot||Resolution||open => fixed|
|2020-11-09 12:30||hgbot||Status||new => closed|
|2020-11-09 12:30||hgbot||Fixed in Version||=> PR21Q1|
|2020-11-09 12:30||hgbot||Note Added: 0124239|
|2020-11-09 12:30||hgbot||Note Added: 0124240|
|Copyright © 2000 - 2009 MantisBT Group|