Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/327912/newLayout.css

...

Função: ErrorBlock

Recupera e/ou define um bloco de código para ser avaliado quando ocorrer um erro em tempo de execução.

ErrorBlock ( [ bErrorHandler] ) --> bRet

...

    bRet(codeblock)
  • Retorna o bloco de código de tratamento de erro corrente.

...

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

...

User function TestError()// Salva bloco de código do tratamento de erroLocal oError := ErrorBlock({|e|;      MsgAlert("Mensagem de Erro: " +chr(10)+ e:Description)})               cExpr := "aaa"If !Empty(cExpr)  Begin Sequence    // Força erro, enviando caracter onde deveria ser numérico    cNum := StrZero(cExpr,5)    MsgAlert( cNum )     Return .T.  End SequenceEndIfErrorBlock(oError)Return .F.

...

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