Kbase P48594: OE10: Progress version comparison in the ADM's attribut.i include file gives the wrong result.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  4/13/2007 |
|
Status: Verified
FACT(s) (Environment):
OpenEdge and ADM1 Problem With Versioning
OpenEdge 10.0A
SYMPTOM(s):
Running ADM1 code with Progress OpenEdge.
Entry 2 outside the range of list adm/objects/broker.p.
Using customized ADM1
CAUSE:
Bug# OE00096218
CAUSE:
The Progress version comparison in attribut.i compares characters:
&IF PROVERSION GE "8.1":U &THEN
So, the character "1" in the value ("10.0A1B") returned by the PROVERSION function for OpenEdge will never be greater than the character "8" in the literal string "8.1", which incorrectly sets the value of the &ADM-DATA preprocessor to be PRIVATE-DATA.
FIX:
The ADM1 source code as shipped with OpenEdge 10 contain the fix for this issue. However, if a customized ADM1 is used this may need to be applied in the customized code.
The changes involved are:
In adm/attribute.i :
Replace the code
&IF PROVERSION GE "8.1":U &THEN
&GLOB adm-data ADM-DATA
&GLOB unless-hidden UNLESS-HIDDEN
&ELSE
&GLOB adm-data PRIVATE-DATA
&GLOB unless-hidden
&ENDIF
with
&SCOPED-DEFINE MinVersion "8.1 "
&IF INTEGER(SUBSTRING(PROVERSION,1,INDEX(PROVERSION,".":U) - 1)) >~
INTEGER(SUBSTRING({&MinVersion},1,INDEX({&MinVersion},".":U) - 1))~
OR~
(INTEGER(SUBSTRING(PROVERSION,1,INDEX(PROVERSION,".":U) - 1)) =~
INTEGER(SUBSTRING({&MinVersion},1,INDEX({&MinVersion},".":U) - 1))~
AND~
(INTEGER(SUBSTRING(PROVERSION,INDEX(PROVERSION,".":U) + 1,1)) >~
INTEGER(SUBSTRING({&MinVersion},INDEX({&MinVersion},".":U) + 1,1))~
OR~
(INTEGER(SUBSTRING(PROVERSION,INDEX(PROVERSION,".":U) + 1,1)) =~
INTEGER(SUBSTRING({&MinVersion},INDEX({&MinVersion},".":U) + 1,1))~
AND~
SUBSTRING(PROVERSION,INDEX(PROVERSION,".":U) + 1,2) >=~
SUBSTRING({&MinVersion},INDEX({&MinVersion},".":U) + 1,2))))
&THEN
&GLOB adm-data ADM-DATA
&GLOB unless-hidden UNLESS-HIDDEN
&ELSE
&GLOB adm-data PRIVATE-DATA
&GLOB unless-hidden
&ENDIF
&UNDEFINE MinVersion
In adm/tableio.i :
replace the code
&IF DEFINED(adm-browser) NE 0 AND PROVERSION >= "9":U &THEN
IF adm-create-on-add THEN
BROWSE {&BROWSE-NAME}:CREATE-ON-ADD = yes.
&ENDIF
with
&IF DEFINED(adm-browser) NE 0 AND INTEGER(SUBSTRING(PROVERSION,1,INDEX(PROVERSION,".":U) - 1)) >= 9 &THEN
IF adm-create-on-add THEN
BROWSE {&BROWSE-NAME}:CREATE-ON-ADD = yes.
&ENDIF