Finally, I found something on Oracle that explains it all:
E1: DD: Impact of Changing the Size of a Standard Data Dictionary Item [ID 643221.1]
Modified 15-FEB-2012 Type BULLETIN Status PUBLISHED
In this Document
Purpose
Scope and Application
E1: DD: Impact of Changing the Size of a Standard Data Dictionary Item
Overview
Issues that Can Occur when Changing the Size of String Data Dictionary Alias DL01
Consequences of String Data Dictionary Size Change to Unit of Measure
References
Applies to:
JD Edwards EnterpriseOne Tools - Version: S23 and later [Release: S23 and later ]
JD Edwards EnterpriseOne Tools - Version: 8.93 and later [Release: 8.93 and later]
Information in this document applies to any platform.
Purpose
This document is part of an Information Center - to see other documents related to Data Dictionary, please use the links provided below:
Information Center: Using Data Dictionary in the JD Edwards EnterpriseOne Tools and Technology Product > Doc ID 643221.1
This document details the impact of changing the size on a standard EnterpriseOne Data Dictionary data item. The document includes the impact and some examples of the results when making this type of change.
Scope and Application
This document is intended for the EnterpriseOne Data Dictionary Administrator
E1: DD: Impact of Changing the Size of a Standard Data Dictionary Item
Overview
Making a change to a standard EnterpriseOne data dictionary item is not recommended or supported. Tables, business views, applications and business functions are designed with the standard size of the data item and making a change to this size can result in errors within the applications and data integrity issues. If a data item size is changed, all tables using the data item would need to be generated, any data entered would need to be manually converted, all business functions that use the data item in their data structures would need the header files updated and business functions rebuilt, all business functions that reference tables that contain this data item would need to be rebuilt, and so forth. This is a widespread change that impacts all objects across the system that use the data item. In addition, this type of change is not supported in an upgrade.
NOTE: Based on the above implications of this type of change, we do not recommend making any changes to the size of standard EnterpriseOne data dictionary items. We recommend that the additional information be contained within another field, within a custom data dictionary item in a custom table or some other logic be used to achieve the needed results. By default, changing a Data Dictionary item affects all environments as the recommended configuration is to have one Data Dictionary F9210 in the Data Source 'Data Dictionary'
For additional information on the Data Dictionary, refer to Document 1267422.1 E1: DD: Overview of EnterpriseOne Data Dictionary.
Issues that Can Occur when Changing the Size of String Data Dictionary Alias DL01
In EnterpriseOne, thousands of objects including Tables, Business Views, Business Functions, Data Structures, etc. make use of the Data Dictionary item DL01 as a member, column, or parameter.
In EnterpriseOne (or any C Programming) a string value will be handled as 'Character Array' and it determines the end of array by reading NULL Character (Termination Character '\0'). In changing the size of a data dictionary item, if it is not properly applied, the allocated size of the array is different from the assigned size of the array which results in a typical memory violation scenario.
A business function, which contains DL01 as a member of its data structure, during compilation will assign memory. For this example, DL01 is 30 in size so it will be describe as szDescription01 [31] so JDE will assign 62 bytes to hold that information.
If the change has been made after implementation, there can be multiple ODBC/OCI errors. One possible example is that EnterpriseOne recognizes F0030.DL01 as 40 characters, but the database (metadata) determines it as 30 characters (31 bytes for non-unicode encoding and 62 bytes for Unicode encoding). When an EnterpriseOne application tries to insert or update 40 characters, the Database will only accept 30 characters. To overcome this, the standard requirement is to generate/truncate table(s) through Object Management Workbench (OMW) with a drop/create table. Alternatively we can alter the table (column size), but this will be risky and very tedious. Therefore, the generation of Tables and Business Views would be required.
The following are some discrepancies that can occur as a result of a size change of this standard DD item.
Synchronization of DD items between RDB and TAMSpec
Currently the change made through P92001 - Data Dictionary application will update RDB File F9210 and F92* series tables.
In running application it will read TAMSPEC (binary format file) which are dddict.xdb and ddb files.
In case synchronization was not done properly it will issue an error.
Synchronization between DD and Table Columns definition in Central Objects
Check individual tables whether the size of column DL01 is changed properly through xxx.h files in include folder.
During runtime glbltbl.xdb and ddb will be read to resolve the size. So if any of table information is not corrected/synchronized then error will come from ODBC.
Synchronization within a Business Function
EnterpriseOne holds cache data using a Data Structure.
A String value is handled through Character Array.
The end of string is recognized by NULL Character '\0'.
If the size of the individual character array is not updated, then it will cause overlapping in memory resulting in a Memory Violation.
Synchronization between two Business Functions
When Business Function A is calling Business Function B and DL01 is a member of the Data Structure of Business Function B and the size has not been changed properly, an error will occur and the process may fail to return to the calling Business Function A.
Synchronization between Application and Business Function
If the size of input or returned value of a Business Function are different from each other it will cause a memory error.
The specifications of the application (both Interactive Application and Batch Application) has to be synchronized with the change made.
Synchronization between E1 Logic and Database
Table Columns and Business View Columns must be synchronized.
The action has to be taken either through MANUAL alternation of the database or through Generation from JDE Object Management Workbench (OMW).
Based on the above implications of this type of change, we do not recommend making any changes to the size of standard EnterpriseOne data dictionary items. We recommend that the additional information be contained within another field, within a custom data dictionary item in a custom table or some other logic be used to achieve the needed results. In case the existing size does not meet your legal requirement, then inquire with Oracle Global Support for further clarification
Consequences of String Data Dictionary Size Change to Unit of Measure
The following example shows the results of a string data dictionary size change. In this example, the size of the standard EnterpriseOne Data Dictionary item with DD Alias 'UOM1' UnitOfMeasurePrimary (Unit of Measure - Primary) was changed by a developer at the customer's site from a size of 2 to a size of 3.
Symptoms
After building a full package, multiple errors across EnterpriseOne are occurring.
Some examples of the errors are:
In clicking Find button 4310, it throws an error message "There was a problem with the server while running the business function GetPODetailShipmentNumber". After disabling Transportation Module through P99410, this error does not occur anymore but P4310 does not allow to add/update data
In finding existing BOM through P3002 it issues "Error: Y not found in User Defined Code 40 FL" though F4101.IMIFLA (ItemFlashMessage) is blank
In reviewing existing Routing through P3003 it issues error "Invalid Input Parameter"
Additional errors are occurring as well.
Cause
This issue is caused by the change of the standard EnterpriseOne string Data Dictionary item UOM1 from the shipped size of '2' to a size of '3' digits. This type of size change is NOT supported and results in widespread errors throughout the system.
Check OCM to determine whether there are more then 2 data sources for table F9210 - Data Field Specifications (OneWorld) for all the environments
Go to UTB and filter data through F9210.FRUPMJ (for example greater than last full package date)
Look for column F9210.FRDTAS - DataItemSize (Data Item Size)
And/Or Capture jdedebug.log (call object kernel log) and determine whether data structure item for output has odd value
For this example, jdedebug.log may read as below:
Calling Business function VerifyAndGetItemMaster
from Level 1 for UserID. Application Name [P3002], Version [ZJDE0001] (BSFNLevel = 1)
IN->[ 1] szPrimaryItemNumber [4418-0031-000]
IN->[ 2] szBranchPlant []
IN->[ 3] szDescription [ ]
IN->[ 4] szDescription2 [ ]
IN->[ 5] cSymbolidentifier [ ]
IN->[ 6] idF4101LongRowPtr [0]
IN->[ 7] mnShortItemNumber [0]
IN->[ 8] cErrorcode [ ]
IN->[ 9] szLanguagepreference [ ]
IN->[ 10] mnAddressnumber [0]
IN->[ 11] szSystemcode [ ]
IN->[ 12] szLongItemNumber [ ]
IN->[ 13] szThirdItemNumber [ ]
IN->[ 14] szItemFlashMsg [ ]
IN->[ 15] cReturnPtr [1]
...
Entering JDB_FetchKeyed
SELECT * FROM PRODDTA.F4101 WHERE ( IMLITM = '4418-0031-000' )
Fetched the record
OUT->[ 1] szPrimaryItemNumber [4418-0031-000 ]
OUT->[ 2] szBranchPlant []
OUT->[ 3] szDescription [D1 - FRAME ]
OUT->[ 4] szDescription2 [ ]
OUT->[ 5] cSymbolidentifier [2]
OUT->[ 6] idF4101LongRowPtr [1001]
OUT->[ 7] mnShortItemNumber [1517]
OUT->[ 8] cErrorcode [ ]
OUT->[ 9] szLanguagepreference [ ]
OUT->[ 10] mnAddressnumber [0]
OUT->[ 11] szSystemcode [ ]
OUT->[ 12] szLongItemNumber [4418-0031-000 ]
OUT->[ 13] szThirdItemNumber [AFC-FR-D1-001~999 ]
OUT->[ 14] szItemFlashMsg [Y 10 ]
OUT->[ 15] cReturnPtr [1]
...
Return value is 0 for VerifyAndGetItemMaster. (BSFNLevel = 1)
Actual Data is written from F4101 as below,
imlitm
...
imuom1
...
imback
imifla
imtfla
4418-0031-000
EA
Y
10
szItemFlashMsg is defined for 2 digits character but from jdedebug.log which appears 6 in length. This is typical corruption of lpds of X4101 - VerifyAndGetItemMaster
Business Function VerifyAndGetItemMaster is returning pointer after reading F4101
Since imuom1 is 3 in size, column value 'Y' for imback is shifted to right (in array it only has index to identify start of string (or character array) and it has assigned value 6 following column value 10 is combined
As result, it shows 'Y 10 ' then Codes 'FL' is defined with Code Length 2 so DD validation for column F4101.IFLA tries to validate the 1st two characters 'Y ' which 40/FL does not have this value
To resolve this issue:
Restore the change made to the standard EnterpriseOne data dictionary item (change the size of string DD Alias 'UOM1' from 3 back to the shipped value of 2).
Verify that the value of F9210.FRDTAS appears as '2'. (Optional)
Delete dddict, glbltbl.xdb and *.ddb file across system (Enterprise Server, Deployment Server and where client is working).
Truncate table F989999 - Java Persistent Objects table.
Delete JDBj cache in JAS.
Build Full Package.
Full generation of serialized object (for performance reason) (Optional).
E1: DD: Impact of Changing the Size of a Standard Data Dictionary Item [ID 643221.1]
Modified 15-FEB-2012 Type BULLETIN Status PUBLISHED
In this Document
Purpose
Scope and Application
E1: DD: Impact of Changing the Size of a Standard Data Dictionary Item
Overview
Issues that Can Occur when Changing the Size of String Data Dictionary Alias DL01
Consequences of String Data Dictionary Size Change to Unit of Measure
References
Applies to:
JD Edwards EnterpriseOne Tools - Version: S23 and later [Release: S23 and later ]
JD Edwards EnterpriseOne Tools - Version: 8.93 and later [Release: 8.93 and later]
Information in this document applies to any platform.
Purpose
This document is part of an Information Center - to see other documents related to Data Dictionary, please use the links provided below:
Information Center: Using Data Dictionary in the JD Edwards EnterpriseOne Tools and Technology Product > Doc ID 643221.1
This document details the impact of changing the size on a standard EnterpriseOne Data Dictionary data item. The document includes the impact and some examples of the results when making this type of change.
Scope and Application
This document is intended for the EnterpriseOne Data Dictionary Administrator
E1: DD: Impact of Changing the Size of a Standard Data Dictionary Item
Overview
Making a change to a standard EnterpriseOne data dictionary item is not recommended or supported. Tables, business views, applications and business functions are designed with the standard size of the data item and making a change to this size can result in errors within the applications and data integrity issues. If a data item size is changed, all tables using the data item would need to be generated, any data entered would need to be manually converted, all business functions that use the data item in their data structures would need the header files updated and business functions rebuilt, all business functions that reference tables that contain this data item would need to be rebuilt, and so forth. This is a widespread change that impacts all objects across the system that use the data item. In addition, this type of change is not supported in an upgrade.
NOTE: Based on the above implications of this type of change, we do not recommend making any changes to the size of standard EnterpriseOne data dictionary items. We recommend that the additional information be contained within another field, within a custom data dictionary item in a custom table or some other logic be used to achieve the needed results. By default, changing a Data Dictionary item affects all environments as the recommended configuration is to have one Data Dictionary F9210 in the Data Source 'Data Dictionary'
For additional information on the Data Dictionary, refer to Document 1267422.1 E1: DD: Overview of EnterpriseOne Data Dictionary.
Issues that Can Occur when Changing the Size of String Data Dictionary Alias DL01
In EnterpriseOne, thousands of objects including Tables, Business Views, Business Functions, Data Structures, etc. make use of the Data Dictionary item DL01 as a member, column, or parameter.
In EnterpriseOne (or any C Programming) a string value will be handled as 'Character Array' and it determines the end of array by reading NULL Character (Termination Character '\0'). In changing the size of a data dictionary item, if it is not properly applied, the allocated size of the array is different from the assigned size of the array which results in a typical memory violation scenario.
A business function, which contains DL01 as a member of its data structure, during compilation will assign memory. For this example, DL01 is 30 in size so it will be describe as szDescription01 [31] so JDE will assign 62 bytes to hold that information.
If the change has been made after implementation, there can be multiple ODBC/OCI errors. One possible example is that EnterpriseOne recognizes F0030.DL01 as 40 characters, but the database (metadata) determines it as 30 characters (31 bytes for non-unicode encoding and 62 bytes for Unicode encoding). When an EnterpriseOne application tries to insert or update 40 characters, the Database will only accept 30 characters. To overcome this, the standard requirement is to generate/truncate table(s) through Object Management Workbench (OMW) with a drop/create table. Alternatively we can alter the table (column size), but this will be risky and very tedious. Therefore, the generation of Tables and Business Views would be required.
The following are some discrepancies that can occur as a result of a size change of this standard DD item.
Synchronization of DD items between RDB and TAMSpec
Currently the change made through P92001 - Data Dictionary application will update RDB File F9210 and F92* series tables.
In running application it will read TAMSPEC (binary format file) which are dddict.xdb and ddb files.
In case synchronization was not done properly it will issue an error.
Synchronization between DD and Table Columns definition in Central Objects
Check individual tables whether the size of column DL01 is changed properly through xxx.h files in include folder.
During runtime glbltbl.xdb and ddb will be read to resolve the size. So if any of table information is not corrected/synchronized then error will come from ODBC.
Synchronization within a Business Function
EnterpriseOne holds cache data using a Data Structure.
A String value is handled through Character Array.
The end of string is recognized by NULL Character '\0'.
If the size of the individual character array is not updated, then it will cause overlapping in memory resulting in a Memory Violation.
Synchronization between two Business Functions
When Business Function A is calling Business Function B and DL01 is a member of the Data Structure of Business Function B and the size has not been changed properly, an error will occur and the process may fail to return to the calling Business Function A.
Synchronization between Application and Business Function
If the size of input or returned value of a Business Function are different from each other it will cause a memory error.
The specifications of the application (both Interactive Application and Batch Application) has to be synchronized with the change made.
Synchronization between E1 Logic and Database
Table Columns and Business View Columns must be synchronized.
The action has to be taken either through MANUAL alternation of the database or through Generation from JDE Object Management Workbench (OMW).
Based on the above implications of this type of change, we do not recommend making any changes to the size of standard EnterpriseOne data dictionary items. We recommend that the additional information be contained within another field, within a custom data dictionary item in a custom table or some other logic be used to achieve the needed results. In case the existing size does not meet your legal requirement, then inquire with Oracle Global Support for further clarification
Consequences of String Data Dictionary Size Change to Unit of Measure
The following example shows the results of a string data dictionary size change. In this example, the size of the standard EnterpriseOne Data Dictionary item with DD Alias 'UOM1' UnitOfMeasurePrimary (Unit of Measure - Primary) was changed by a developer at the customer's site from a size of 2 to a size of 3.
Symptoms
After building a full package, multiple errors across EnterpriseOne are occurring.
Some examples of the errors are:
In clicking Find button 4310, it throws an error message "There was a problem with the server while running the business function GetPODetailShipmentNumber". After disabling Transportation Module through P99410, this error does not occur anymore but P4310 does not allow to add/update data
In finding existing BOM through P3002 it issues "Error: Y not found in User Defined Code 40 FL" though F4101.IMIFLA (ItemFlashMessage) is blank
In reviewing existing Routing through P3003 it issues error "Invalid Input Parameter"
Additional errors are occurring as well.
Cause
This issue is caused by the change of the standard EnterpriseOne string Data Dictionary item UOM1 from the shipped size of '2' to a size of '3' digits. This type of size change is NOT supported and results in widespread errors throughout the system.
Check OCM to determine whether there are more then 2 data sources for table F9210 - Data Field Specifications (OneWorld) for all the environments
Go to UTB and filter data through F9210.FRUPMJ (for example greater than last full package date)
Look for column F9210.FRDTAS - DataItemSize (Data Item Size)
And/Or Capture jdedebug.log (call object kernel log) and determine whether data structure item for output has odd value
For this example, jdedebug.log may read as below:
Calling Business function VerifyAndGetItemMaster
from Level 1 for UserID. Application Name [P3002], Version [ZJDE0001] (BSFNLevel = 1)
IN->[ 1] szPrimaryItemNumber [4418-0031-000]
IN->[ 2] szBranchPlant []
IN->[ 3] szDescription [ ]
IN->[ 4] szDescription2 [ ]
IN->[ 5] cSymbolidentifier [ ]
IN->[ 6] idF4101LongRowPtr [0]
IN->[ 7] mnShortItemNumber [0]
IN->[ 8] cErrorcode [ ]
IN->[ 9] szLanguagepreference [ ]
IN->[ 10] mnAddressnumber [0]
IN->[ 11] szSystemcode [ ]
IN->[ 12] szLongItemNumber [ ]
IN->[ 13] szThirdItemNumber [ ]
IN->[ 14] szItemFlashMsg [ ]
IN->[ 15] cReturnPtr [1]
...
Entering JDB_FetchKeyed
SELECT * FROM PRODDTA.F4101 WHERE ( IMLITM = '4418-0031-000' )
Fetched the record
OUT->[ 1] szPrimaryItemNumber [4418-0031-000 ]
OUT->[ 2] szBranchPlant []
OUT->[ 3] szDescription [D1 - FRAME ]
OUT->[ 4] szDescription2 [ ]
OUT->[ 5] cSymbolidentifier [2]
OUT->[ 6] idF4101LongRowPtr [1001]
OUT->[ 7] mnShortItemNumber [1517]
OUT->[ 8] cErrorcode [ ]
OUT->[ 9] szLanguagepreference [ ]
OUT->[ 10] mnAddressnumber [0]
OUT->[ 11] szSystemcode [ ]
OUT->[ 12] szLongItemNumber [4418-0031-000 ]
OUT->[ 13] szThirdItemNumber [AFC-FR-D1-001~999 ]
OUT->[ 14] szItemFlashMsg [Y 10 ]
OUT->[ 15] cReturnPtr [1]
...
Return value is 0 for VerifyAndGetItemMaster. (BSFNLevel = 1)
Actual Data is written from F4101 as below,
imlitm
...
imuom1
...
imback
imifla
imtfla
4418-0031-000
EA
Y
10
szItemFlashMsg is defined for 2 digits character but from jdedebug.log which appears 6 in length. This is typical corruption of lpds of X4101 - VerifyAndGetItemMaster
Business Function VerifyAndGetItemMaster is returning pointer after reading F4101
Since imuom1 is 3 in size, column value 'Y' for imback is shifted to right (in array it only has index to identify start of string (or character array) and it has assigned value 6 following column value 10 is combined
As result, it shows 'Y 10 ' then Codes 'FL' is defined with Code Length 2 so DD validation for column F4101.IFLA tries to validate the 1st two characters 'Y ' which 40/FL does not have this value
To resolve this issue:
Restore the change made to the standard EnterpriseOne data dictionary item (change the size of string DD Alias 'UOM1' from 3 back to the shipped value of 2).
Verify that the value of F9210.FRDTAS appears as '2'. (Optional)
Delete dddict, glbltbl.xdb and *.ddb file across system (Enterprise Server, Deployment Server and where client is working).
Truncate table F989999 - Java Persistent Objects table.
Delete JDBj cache in JAS.
Build Full Package.
Full generation of serialized object (for performance reason) (Optional).