versión 3
ON ERR CALL (metodoError)
Parámetro | Tipo | Descripción | |
metodoError | Alfa | Método de error a invocarse, o | |
vacio para no atrapar errores |
Descripción
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. Este método de proyecto es llamado por error-handling method or error-catching
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 son listados en el tema Códigos de error. 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.
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 motor de base de datos de 4D; por ejemplo, cuando guarda un registro trata de duplicar una llave de índice único.
El entorno de 4D; por ejemplo, cuando no tienen suficiente memoria parar llenar un array.
El sistema operativo en el cual se ejecuta la base; por ejemplo, disco lleno o errores de entrada/salida.
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.
Cuando un método ON ERR CALL se instala, no es posible trazar un método utilizando Alt+Clic (en Windows) u Opción-Clic (en Macintosh) generan un error (código de error 1006) que activa inmediatamente el método ON ERR CALL. Sin embargo, puede probar este código de error y llamar al comando TRACE.
Ejemplos
1. 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 MANEJADOR DE ERRORES es el siguiente:
` Método de proyecto IO ERROR HANDLER
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
2. Ver el ejemplo de la sección Arrays y memoria.
3. 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 ` ...
4. 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
Ver también
ABORT, Method called on error.