Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 2 Próxima »

Es importante el uso del errorblock cuando no es posible aceptar que un determinado procesamiento genere un error no amigable para el usuario o cuando el procesamiento se ejecuta por job o en una thread, y es necesario tratar el error, ya sea apuntando a una futura acción o conectándose a algún lugar, como, por ejemplo, en la consola del Protheus.

Esta función ErrorBlock define la actuación de un manejador (handler) de errores siempre que ocurra un error en tiempo de ejecución. Para ello, el manejador de errores se especifica con un bloque de código de la siguiente manera:
{ |<objError>| <lista de expresiones>, ...}
Se tienen:
<objError> es un error object que contiene información sobre el error. Dentro del bloque de código, es posible enviar mensajes al error object para obtener información sobre el error. Sin embargo, si el bloque de tratamiento de errores retorna verdadero (.T.), la operación que falló se repite; en caso contrario, falso (.F.), el procesamiento se iniciará nuevamente.
Si no se especifica ningún bloque de código, en el parámetro <bErrorHandler>, utilizando la función ErrorBlock(), y ocurre un error en tiempo de ejecución, se evalúa el bloque de tratamiento de errores estándar. Este manejador de errores mostrará un mensaje descriptivo en la pantalla, ajustará la función ErrorLevel a 1, y después saldrá del programa (QUIT).
Como esta función retorna el bloque de tratamiento al de errores corrientes, es posible especificar un bloque de tratamiento de errores para una operación grabando el bloque de manejo de errores corrientes y recuperándolo después al final de la operación. Además, una importante consecuencia del hecho que los bloques de tratamiento de errores se especifiquen como bloques de código es que pueden transferirse a rutinas y funciones definidas por el usuario y después retornar como valores.
Ejemplo:
// ErrorBlockExample.prw
#INCLUDE "TOTVS.CH"
Function ErrorBlockExample()
Local cError := ""
Local oLastError := ErrorBlock({|e| cError := e:Description + e:ErrorStack})
Local uTemp := Nil
uTemp := "A" + 1
ErrorBlock(oLastError)
// Anota el error en la consola.
ConOut(cError)
Return

  • Sem rótulos