Entendendo a estrutura try...catch em TLPP.

Hugo Guilherme Lutz Nascimento Gomes
TOTVS Developers
Published in
2 min readJul 11, 2023
Try…catch

A estrutura try…catch é um importante recurso disponível para lidar com “exceptions”, ou seja, exceções durante a execução de um programa em qualquer linguagem de programação.

O que é a estrutura try…catch?

A estrutura try…catch é uma construção que permite que um trecho de código seja executado dentro de um bloco try.

Se ocorrer algum erro ou exceção durante a execução desse bloco, o controle é transferido para um bloco catch, que contém o código para lidar com o erro ou exceção.

Em outras palavras, o bloco try é o trecho de código que pode gerar uma exceção ou erro, enquanto o bloco catch é o trecho de código que será executado caso ocorra uma exceção ou erro no bloco try.

A utilização da estrutura try…catch é muito importante para garantir a integridade do seu programa, evitando que ele seja interrompido abruptamente por um erro ou exceção.

Vamos imaginar que você está desenvolvendo um programa em TLPP para validar se uma função existe.

Importante lembrar que o try…catch não está disponível no ADVPL, porém é possível realizar um THROW a partir de uma chamada para uma função em ADVPL.

User Function exemplo()

//A exceção deve ser uma instância da classe ErrorClass
Local oError := ErrorClass():New()
TRY
chamadanaoexiste() //estou chamando uma função que não existe.
CATCH oError
//Mensagem do Appserver, chamada de função interna não encontrada na lista de RPOs.
if oError:description == "InterFunctionCall: cannot find function CHAMADANAOEXISTE in AppMap"
conout("erro não encontrei esta função CHAMADANAOEXISTE")
endif
ENDTRY
Return

Nesse código, o bloco try contém a chamada da função “chamadanaoexiste()”.

Um erro é esperado durante a execução dessa operação, a exceção será gerada e o controle será transferido para o bloco catch, que exibirá a mensagem de erro.

Neste exemplo fazemos um throw de varError, onde varError não foi definido.

User Function exemplo2()

TRY
throw varError
CATCH varError
ConOut( varError:description )
ENDTRY

Return

Poderíamos chamar uma função ADVPL e executar este throw varError, de outro programa por exemplo.

Veja abaixo um exemplo de quando o retorno de um campo é válido ou inexistente, solução que pode ser utilizada no dia a dia.

main function exemplo3()
Local oError
Local varError := ErrorClass():New()
Local cTexto := "If(XPTO->CAMPO$'N')"

TRY
xResult := &cTexto //Macroexecução
CATCH varError
conout("error na macroexecução")
ENDTRY
return

Utilizando a estrutura do TRY e CATCH, o programa não será interrompido abruptamente e o usuário poderá visualizar uma mensagem de erro.

Lembre-se que sua utilização requer diversas linhas de código, então é bom usar com cuidado.

Espero ter esclarecido o básico sobre Try Catch.

Para maiores informações acesse:

Abraços
Hugo Guilherme Gomes

--

--

Hugo Guilherme Lutz Nascimento Gomes
TOTVS Developers

Dev na TOTVS - Departamento de Tecnologia. "Não confie, verifique..."