Algunas veces, cuando se produce un error en ejecución, es recomendable conservar el error.log en algún sitio seguro para analizarlo posteriormente. Creo que un sitio apropiado para ello es una tabla que guarde estos errores.
Con este fin me permití agregar a errsysw.prg las siguientes líneas:
al inicio
Static bStaticOnError
Function SetOnErrorAction(bAction)
bStaticOnError:=bAction
return nil
y en la función
static function ErrorDialog( e )
:
:
BEGIN SEQUENCE
oOldError = ErrorBlock( { || DoBreak() } )
MemoWrit( "Error.log", cErrorLog ) //Si la carpeta es read-only no habrá error.log
// Agregado
IF ValType(bStaticOnError)="B"
Eval(bStaticOnError,cErrorLog)
ENDIF
// Fin agregado
END SEQUENCE
:
:
Ahora ya puedo guardar el error en una tabla, enviarlo por email, etc, todo depende de la acción que defina con SetOnErrorAction(bAction), ejemplo, poniendo al principio de mi programa
SetOnErrorAction({|cError| SaveError(cError)})
Espero sea de utilidad.
PD:
Algunas cosillas que le agregaría a cErrorLog:
FWVERSION, FWDESCRIPTION, NetName(), WNetGetUser(), fecha y hora de creación de la aplicación, fecha y hora de creación de la dll de recursos (si existe). dll's cargadas con sus respectivas versiones.