4D v16.3

ON ERR CALL

Inicio

 
4D v16.3
ON ERR CALL

ON ERR CALL 


 

ON ERR CALL ( metodoError ) 
Parámetro Tipo   Descripción
metodoError  Cadena in Método de gestión de error a llamar o cadena vacía para desinstalar el método

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.

Una vez que se instala un proyecto de control de errores, 4D llama al método cada vez que se produce un error durante la ejecución de un comando de lenguaje 4D.

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.

Notas:

  • en el contexto de utilización de componentes, este comando se aplica sólo a la base actual. Si se genera un error de un componente, metodoError no se llama en la base local.
  • Si ON ERR CALL se llama desde un proceso para el cual usted ha solicitado ejecución apropiativa (en modo compilado 64 bits), el compilador verifica si metodoError es hilo seguro y devuelve los errores si no es compatible con el modo apropiativo. Para más información, consulte la sección [#title id="8733"/].

Para desinstalar un método de gestión de errores, llame a ON ERR CALL de nuevo y pase la cadena vacía en metodoError.

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 Códigos de error. Para mayor información, consulte la sección Errores de sintaxis. 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, Error line y Error formula las cuales contienen respectivamente, el nombre del método, el número de línea y el texto de la fórmula donde ocurrió el error (ver Error, Error method, Error line).

Puede utilizar el comando GET LAST ERROR STACK para obtener la secuencia de errores (la "pila" de errores) en el origen de la interrupción.

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 durante los procesos efectuados por:

  • El motor de base de datos de 4D; por ejemplo, cuando guarda un registro provoca la violación de una regla de trigger.
  • 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.

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 y muestra el texto del error:

  //Método de proyecto Show_errors_only
 If(Error#1006) //esta no es una interrupción del usuario
    ALERT("The error "+String(Error)+" occurred. The code in question is: \""+Error formula+"\"")
 End if



Ver también 

ABORT
GET LAST ERROR STACK
Method called on error
Variables sistema

 
PROPIEDADES 

Producto: 4D
Tema: Interrupciones
Número 155

This command can be run in preemptive processes

 
HISTORIA 

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

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)