A Classe Exception, representa os erros que ocorrem durante a execução de aplicativos. Todas as classes de exceção devem herdar da superclasse CX_ROOT e uma de suas classes subclasses:
- CX_STATIC_CHECK
- CX_DYNAMIC_CHECK
- CX_NO_CHECK
Todas as classes de exceção devem começar com o prefixo CX_. Elas são geralmente definidas globalmente no Class Builder do ABAP Workbench. Classes de exceção locais podem, no entanto, também ser definidas.
Execptions
Um erro de aplicativo é um erro de tempo de execução que não pode necessariamente ser evitado escrevendo um código livre de erros.
Erros de tempo de execução podem ocorrer por uma variedade de razões. No entanto, nem todos os erros devem ser tratados como exceções em seu código.
Em alguns casos, um erro de programa pode refletir uma condição de erro esperada ou de rotina. Neste caso, você pode querer evitar o uso de tratamento de exceção para lidar com o erro do programa.
Em outros casos, um erro de programa reflete uma condição de erro inesperado que pode ser manipulado em seu código. Por exemplo, mesmo que você tenha verificado para garantir que existe um arquivo, ele pode ser excluído antes que você possa abri-lo, ou ele pode estar corrompido.
A falha do sistema é um erro de tempo de execução que não podem ser tratada por meio de programação de uma maneira significativa. Por exemplo, qualquer método pode lançar uma exceção OutOfMemory se o Runtime é incapaz de alocar memória adicional
TRY … CATCH
Um modelo de tratamento de exceção que se baseia na representação de exceções como objetos, e a separação de código de programa e o código de tratamento de exceções em blocos TRY e blocos CATCH. Pode haver um ou mais blocos catch, cada um projetado para lidar com um determinado tipo de exceção, ou um bloco projetado para capturar uma exceção mais específica que outro bloco.
Exemplo:
Neste exemplo criamos uma classe para nosso erro herdada da classe CX_DYNAMIC_CHECK e usamos o comando Try…Catch para manipular o erro e exibir uma mensagem mais amigável para o usuário.
Abap
*&---------------------------------------------------------------------* *& Report ZEXCECAO *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Exceções *&---------------------------------------------------------------------* REPORT ZEXCECAO. CLASS CX_MinhaExcecao DEFINITION INHERITING FROM CX_DYNAMIC_CHECK. PUBLIC SECTION. METHODS : CONSTRUCTOR IMPORTING pvalor TYPE p. DATA VALOR TYPE p DECIMALS 2. ENDCLASS. CLASS CX_MinhaExcecao IMPLEMENTATION. METHOD CONSTRUCTOR. CALL METHOD SUPER->CONSTRUCTOR( ) . VALOR = pvalor. ENDMETHOD. ENDCLASS. start-of-selection. DATA ERRO TYPE REF TO CX_MinhaExcecao. DATA saldo TYPE p DECIMALS 2. DATA saque TYPE p DECIMALS 2. DATA insuficiente TYPE p DECIMALS 2. * Efetua Um deposito na conta WRITE : / 'Deposito de: R$ 500,00'. saldo = 500. * Tenta efetuar um saque PERFORM SAQUE. FORM SAQUE. try. " Efetua um saque na conta WRITE : / 'saque de: R$ 1000,00'. saque = 1000. if ( saque LT saldo ). saldo = saldo - saque. else. insuficiente = saque - saldo. RAISE EXCEPTION TYPE CX_MinhaExcecao EXPORTING PVALOR = Insuficiente. ENDIF. catch CX_MinhaExcecao into ERRO. " Tenta efetuar um saque WRITE: / 'Desculpe mas seu pedido de saque ultrapassa o seu saldo em: ', ERRO->VALOR. ENDTRY. ENDFORM.