Otro detalle corregido:
en el método New_, en el bucle que determina las variables de instancia (DATAS), si las datas no son públicas el programa falla y no se recupera del error.
Modifiqué el bucle encerrando la llamada al oSend() en un Begin/Secuence
- Code: Select all Expand view RUN
/* Enclose in a custom ErrorBlock to catch OOP Errors */
// bError:= ERRORBLOCK( {|oError| ::Error( oError )} )
bError:= ERRORBLOCK( {|oError| Break( oError )} ) // cambio el manejador.
BEGIN SEQUENCE
FOR cx = 1 TO nLen
/* ignore strings with a leading Underscore */
IF !( StrChar( aDict[cx], 1) == '_')
/* Method */
IF ASCAN( aDict, LEFT( "_" + aDict[cx], 10 ) ) == 0
AADD( aMeth, { aDict[cx] } )
/* Var */
ELSE
BEGIN SEQUENCE // <--- desde acá
uData = OSend( oClient, aDict[cx] )
RECOVER USING oError
uData = NIL
END SEQUENCE // <--- hasta acá
AADD ( aIvar, { VALTYPE( uData ), aDict[cx], ::Val2Char( uData )})
ENDIF
ENDIF
NEXT
RECOVER USING oError
eval( bError, oError )
END SEQUENCE
ERRORBLOCK( bError )
Si bien al producirse un error pone como valor de la DATA en NIL y no es muy elegante, al menos permite acceder y ver el resto de los componentes.