4D v13.4

ON ERR CALL

Inicio

 
4D v13.4
ON ERR CALL

ON ERR CALL 


 

ON ERR CALL ( metodoError ) 
Parámetro Tipo   Descripción
metodoError  Cadena in 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 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.

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

 
PROPIEDADES 

Producto: 4D
Tema: Interrupciones
Número 155

 
INDEX

Lista alfabética de los comandos

 
HISTORIA 

Creado por: < 4D v6
Modificado: 4D v12

 
VER TAMBIÉN 

ABORT
Method called on error
Variables de sistema