Kbase P24151: ADM2 duplicates a child SmartDataObject's foreign key inform
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  29/04/2003 |
|
Status: Unverified
FACT(s) (Environment):
Progress 9.x
SYMPTOM(s):
Applying filters to a child SmartDataObject's query by running setQueryWhere in the child SmartDataObject's handle.
Passing the existent foreign key information to setQueryWhere. For instance:
vcForField = ENTRY(1,DYNAMIC-FUNCTION('getForeignFields':U IN h_dorder)).
vcForFldVal = DYNAMIC-FUNCTION('getForeignValues':U IN h_dorder).
vcWhere = vcForField + " = " + vcForFldVal + " AND OrderDate = " + vdStartDate:SCREEN-VALUE.
DYNAMIC-FUNCTION('setQueryWhere':U IN h_dorder, INPUT vcWhere).
DYNAMIC-FUNCTION('openQuery':U IN h_dorder).
The ADM2 code messes up the child SmartDataObject's filtering criteria by duplicating the foreign key information.
CAUSE:
This is a known issue within the ADM2 code for the setQueryWhere function.
FIX:
Instead of calling the openQuery ADM2 function in order to reopen the child SmartDataObject's query, run the dataAvailable ADM2 procedure in the child SmartDataObject's handle and pass "DIFFERENT" as an input parameter to its code. For instance:
DEFINE VARIABLE vcWhere AS CHARACTER NO-UNDO.
ASSIGN vcWhere = ''.
IF tg1:CHECKED THEN
ASSIGN vcWhere = 'family.relation = ' + quoter('Daughter') + ' or '.
IF tg2:CHECKED THEN
ASSIGN vcWhere = vcWhere + 'family.relation = ' + quoter('spouse') + ' or '.
IF tg3:CHECKED THEN
ASSIGN vcWhere = vcWhere + 'family.relation = ' + quoter('son').
ASSIGN vcWhere = TRIM( RIGHT-TRIM ( TRIM(vcWhere), 'or' ) ).
DYNAMIC-FUNCTION('setQueryWhere' IN h_dfamily, INPUT vcWhere).
/* Do not call openQuery in child SDO */
/* DYNAMIC-FUNCTION('openQuery' IN h_dfamily ). */
/* Run dataAvailable instead */
RUN dataAvailable IN h_dfamily ("DIFFERENT").