≡ Menu

USANDO TRATAMENTO DE ERRO EM OPENEDGE ABL

img

Fazer o tratamento de erro em Progress – OpenEdge ABL, não é algo comum entre os programadores, mas, por exemplo, caso seja necessário manipular um numero que esteja dentro de uma string, então, será necessário converter aquela string em inteiro ou decimal, e, para isso, usa-se as funções INTEGER() ou DECIMAL(). Ocorre que, se aquela string não for um numero, ao fazer o ASSIGN, retornará o erro em tela:

“** Caracter invalido em entrada numérica (76)”.

Até aqui tudo bem, basta pegar o stack trace do erro e descobrir a linha do erro, mas, e se a aplicação estiver rodando em background? Por exemplo, um AppServer? Neste caso, a conexão será abortada e descobrir em que ponto gerou esse erro 76, certamente será difícil.

USANDO TRATAMENTO DE ERRO EM OPENEDGE ABL

Então como resolver este problema? Usando o tratamento de erro! Mas, antes, deve-se colocar um NO-ERROR no comando. Ai sim, para tratar o erro basta usar a função ERROR-STATUS que retorna verdadeiro caso tenha ocorrido algum problema.

Abaixo segue um exemplo de um programa que converte string para inteiro e string para lógico (boolean). Se retornar erro na conversão é feito um DISP “ERRO” mostrando o numero do erro, e, caso a conversão ocorra com sucesso, é feito um DISP “YES”:

Na lógica que verifica se uma string contem um valor lógico (YES ou NO), qualquer string passada para a função LOGICAL(), retornará YES, porem, quando a string não for YES ou NO, será gravado na variável o valor interroga (?). Assim, se for “?”, significa que a conversão falhou.

INDO ALÉM: CRIANDO UMA FUNÇÃO

Caso queira criar uma função para encapsular esse código, poderia ser feito algo parecido com isso:

FUNCTION ISNUMBER RETURN LOGICAL (INPUT text AS CHAR):
    DEFINE VAR v-dec AS DECIMAL NO-UNDO.
    ASSIGN v-dec = DECIMAL(text) NO-ERROR.
    IF ERROR-STATUS:ERROR THEN RETURN NO.
    RETURN YES.
END.

Essa função serve tanto para números inteiros quanto para decimal.

CONCLUSÃO

Cada caso é um caso, é preciso avaliar se é necessário fazer o tratamento de erro. Por ser uma exceção técnica, normalmente não se trata. Porem, como vimos, existe situações, por exemplo, se o programa estiver rodando em AppServer, é difícil identificar onde o erro 76 ocorreu. Assim, por mais que a decisão seja em abortar a aplicação, deve-se criar uma mensagem tratada do erro, para que desta forma seja ágil identificar o ponto do problema. Outros exemplo que podemos citar é quando vamos tentar conectar em um banco de dados, caso o banco esteja desconectado, será retornado o erro para o usuário:

** Could not connect to server for database BANCO, errno 0. (1432)

Veja que a mensagem apresentada não é nada amigável, seria muito melhor se fosse exibido algo do tipo:

Não será possível continuar, o banco de dados encontra-se em manutenção no momento!

Para maiores informações consulte: knowledgebase.progress.com

Obs.: A partir da versão 101.C é possível utilizar os blocos estruturados CATCH / FINALLY para tratamento de erro.

NEWSLETTER

Receba por e-mail nossos últimos posts.

{ 0 comments… add one }

Leave a Comment