Exception – Try … Catch – Raise – Abap

Publicado: 26 de fevereiro de 2014 em Abap

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 TryCatch 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.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s