4D v13.4ON ERR CALL |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
ON ERR CALL
|
ON ERR CALL ( metodoError ) | ||||||||
Parámetro | Tipo | Descripción | ||||||
metodoError | Cadena |
![]() |
Método de error a invocarse, o vacio para no atrapar errores | |||||
El comando ON ERR CALL instala el método de proyecto, cuyo nombre se pasa en metodoError, como método de intercepción de errores o método de gestión de errores.
El alcance de este comando es el proceso actual. Sólo puede tener un método de gestión de errores por proceso, pero puede tener diferentes métodos de gestión de errores para varios procesos. Para detener un método de gestión de errores, llame de nuevo ON ERR CALL y pase una cadena vacía en metodoError.Una vez instalado un proyecto de gestión de errores, 4D llama al método cada vez que se produce un error.
Puede identificar errores leyendo la variable sistema Error, la cual contiene el número de código del error. Los códigos de errores se listan en el tema . Para mayor información, consulte la sección Errores de sintaxis o Errores de la base de datos. El valor de la variable Error es significativo sólo en el método de gestión de errores; si necesita el código del error en el método que provocó el error, copie la variable Error en su propia variable proceso. También puede acceder a las variables sistema Error method y Error line las cuales contienen respectivamente, el nombre del método y el número de línea donde ocurrió el error (ver Error, Error method, Error line).
El método de gestión de errores debe tratar los errores de manera apropiada o mostrar un mensaje de error al usuario. Los errores pueden ser generados por:
El comando ABORT puede utilizarse para terminar el proceso. Si no llama ABORT en el método instalado, 4D devuelve el método interrumpido y continúa la ejecución del método. Utilice el comando ABORT cuando la ejecución no puede recuperarse.
Si ocurre un error en el método de gestión de errores, 4D retoma el control de la gestión de errores. Por lo tanto, debe asegurarse de que el método de gestión de errores no pueda generar un error. Igualmente, no puede utilizar ON ERR CALL dentro del método de gestión de errores.
ON ERR CALL generalmente se ubica en el método base de apertura de una aplicación, para manipular los errores para esta aplicación. ON ERR CALL puede igualmente ubicarse al inicio de un método para manipular los errores específicos de este método.
El siguiente método de proyecto trata de crear un documento cuyo nombre se recibe como parámetro. Si no se puede crear el documento, el método de proyecto devuelve 0 (cero) o el código de error:
` Método de proyecto Crear doc
` Crear doc ( String ; Pointer ) -> Entero largo
` Crear doc ( DocName ; ->DocRef ) -> Código de error resultante
gError:=0
ON ERR CALL("IO MANEJADOR DE ERRORES")
$2->:=Create document($1)
ON ERR CALL("")
$0:=gError
El método de proyecto IO_GESTION_ERRORES es el siguiente:
` Método de proyecto IO_GESTION_ERRORES
gError:=Error ` Simplemente copie el código del error en la variable de proceso gError
Note la utilización de la variable proceso gError para obtener el código del error en el método de ejecución actual. Una vez estos métodos estén presentes en su base de datos, puede escribir:
` ...
C_TIME(vhDocRef)
$vlErrCode:=Crear doc($vsDocumentNombre;->vhDocRef)
If($vlErrCode=0)
`...
CLOSE DOCUMENT($vlErrCode)
Else
ALERT("El documento no pudo ser creado, error de E/S "+String($vlErrCode))
End if
Ver el ejemplo de la sección Arrays y memoria.
Mientras implementa un conjunto de operaciones complejas, puede terminar con varias subrutinas que necesiten diferentes métodos de gestión de errores. Sólo puede tener un método de gestión de errores por proceso, de manera que tiene dos opciones:
- Mantener contacto con el actual cada vez que llama a ON ERR CALL, o
- Utiliza la variable array proceso (en este caso, asMetodoError) para “apilar” los métodos de gestión de errores y un método de proyecto (en este caso, ON ERROR CALL) para instalar y desinstalar los métodos de gestión de errores.
Debe inicializar el array al comienzo de la ejecución del proceso:
` NO olvide inicializar el array al inicio
` del método de proceso (el método de proyecto que ejecuta el proceso)
ARRAY STRING(63;asMetodoError;0)
Este es el método personalizado ON ERROR CALL:
` Método de proyecto ON ERROR CALL
` ON ERROR CALL { ( Cadena) }
` ON ERROR CALL { ( Nombre del método ) }
C_STRING(63;$1;$MetodoError)
C_LONGINT($vlElem)
If(Count parameters>0)
$MetodoError:=$1
Else
$MetodoError:=""
End if
If($MetodoError#"")
C_LONGINT(gError)
gError:=0
$vlElem:=1+Size of array(asMetodoError)
INSERT IN ARRAY(asMetodoError;$vlElem)
asMetodoError{$vlElem}:=$1
ON ERR CALL($1)
Else
ON ERR CALL("")
$vlElem:=Size of array(asMetodoError)
If($vlElem>0)
DELETE FROM ARRAY(asMetodoError;$vlElem)
If($vlElem>1)
ON ERR CALL(asMetodoError{$vlElem-1})
End if
End if
End if
Luego, puede llamarlo de esta manera:
gError:=0
ON ERROR CALL("IO ERRORS") ` Instale el método de gestión de errores IO ERRORS
` ...
ON ERROR CALL("ALL ERRORS") ` Instale el método de gestión de errores ALL ERRORS
` ...
ON ERROR CALL ` Desinstale el método de gestión de errores ALL ERRORS y reinstale IO ERRORS
` ...
ON ERROR CALL ` Desinstale el método de gestión de errores IO ERRORS
` ...
El siguiente método de gestión de errores ignora las interrupciones del usuario:
` Método de proyecto MOSTRAR SOLO ERRORES
If(Error#1006)
ALERT("El error "+String(Error)+" se produjo.")
End if
Producto: 4D
Tema: Interrupciones
Número
155
Lista alfabética de los comandos
Creado por: < 4D v6
Modificado: 4D v12
ABORT
Method called on error
Variables de sistema