Dicas ABAP

Published on August 11th, 2011 | by Mauro Laranjeira

5

Tratamento de erro com classe de exceção

Erros?! Dump?! NNNãããooooooooo…

“Aquele à qual o programa nunca deu dump, que durrube o primeiro processo pela SM50” :S

Alguns dumps mostram uma tal de “Exceção”, essa exceção tem um motivo para aparecer, há quem diga que é apenas enfeite. =o

No exemplo abaixo de dump aparece a classe de exceção CX_SY_CONVERSION_NO_NUMBER.

Dump

Dump

Este Dump ocorreu pelo seguinte código:

Ou seja, por colocar texto em uma variável do tipo de inteiro.

No Help de cada comando, mostra todas as exceções que o comando pode disparar. Exemplo do Help para o comando MOVE:

Help do comando MOVE

Help do comando MOVE

 

Mas vale lembrar que nem todos os comandos possuem classe de exceção.

Para tratar este erro, a galera iria desenvolver uma lógica ou if para verificar se a variável tem alguma coisa diferente de números.

Para este caso podemos utilizar a classe de exceção CX_SY_CONVERSION_NO_NUMBER para o tratamento deste erro:

Podemos utilizar mais de uma classe de exceção para os tratamentos de erros:

Para um tratamento de erro genérico com classe de exceção, podemos usar a classe mãe de todas as classes de exceções, a classe CX_ROOT.

Agora o “ABAP Espertinho” pode fazer reports sem dumps:

Abraços a todos os Zombies!!!

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePrint this page

Tags: , , ,


About the Author

Motoqueiro fantasma... curandeiro do SAP desde 2006... trago o go-live perdido em um fim de semana... junto 9 mulheres para fazer um filho em um mês... acreditador em histórias de Basis... garimpeiro de dados de teste...



5 Responses to Tratamento de erro com classe de exceção

  1. Thiago Losilla says:

    Ae Maurao!! Mto bom esse post. Classe de exceção é o futuro! OO é o Futuro!
    Quando possivel, pode mostrar como funciona a exceção em funçoes?

    Valeu Bro!!

    Abrax!

    • Grande Losilla FireFox =D

      Cara vc me deu uma ideia de post, rs.

      Vou te mostrar como fazer isso com tratamentos em classes o/

      Abs,

      Mauro Laranjeira

    • Matheus Tristão says:

      Thiago. Você faz com Raise. Primeiro você cria a exceção nas exceptions do function module. Na lógica da função, coloca um raise quando for pra disparar. Daí quando vc estiver no seu report e chamar a função você coloca depois do import e export uma seção EXCEPTIONS e iguala um número a cada exceção. Esse vai ser um sy-subrc. Exemplo:

      CALL FUNCTION ‘ZBC400_MOS_POWER’
      EXPORTING
      iv_base = pa_int1
      iv_power = pa_int2
      IMPORTING
      ev_result = gv_result
      EXCEPTIONS
      power_value_too_high = 1
      result_value_too_high = 2
      OTHERS = 3.
      CASE sy-subrc.
      WHEN 0.
      WHEN 1.
      WRITE ‘Max Value Power is 4’.
      WHEN 2.
      WRITE ‘Result value too high’.
      WHEN 3.
      WRITE ‘Unknown error’.
      ENDCASE.

  2. Mario Eiji Morishita says:

    Ajuda olá a todos, estou começando minha vida profissional no ABAP agora e gostaria e uma ajudar não sei se aqui seria melhor opção desculpe-me.

    Estou tentando usar o comando MOVE de um campo x para um outro campo de uma outra tabela como poderia fazer isto.

    • Matheus Tristão says:

      Mario, crie um field symbol com o mesmo tipo da tabela. Faça um loop na tabela assigning no field symbol. iguale o fieldsymbol-nome_do_campo1 ao fieldsymbol-nome_do_campo2 dentro desse loop.

      Jeito mais fácil de mover =)

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top ↑