Patrocinado por
Patrocinado por Inetum

É tão simples converter uma MESSAGE numa EXCEPTION

images/thumbnail.jpg - Thumbnail

Há alguns anos atrás mostrei como se podia converter uma MESSAGE normal numa excepção tipificada. Entretanto o ABAP evoluiu um bocadinho e agora, na versão 7.40, aquela solução complexa já não é necessária.

Agora o comando EXCEPTION permite criar uma excepção a partir de uma MESSAGE.

Cenário mais óbvio: depois de, num método, chamar um módulo de função standard esta devolve uma mensagem mas o método devolve uma excepção e por isso há que converter uma na outra. Agora não podia ser mais simples.

Imaginemos a seguinte função que gera uma MESSAGE no caso de devolver um erro:

    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                = 'PDF'
      IMPORTING
        bin_file              = r_pdf
      TABLES
        otf                   = it_otf
        lines                 = t_lines
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 4
        OTHERS                = 5.
    IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

Acreditem ou não basta acrescentar uma linha para transformar a MESSAGE numa EXCEPTION:

    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                = 'PDF'
      IMPORTING
        bin_file              = r_pdf
      TABLES
        otf                   = it_otf
        lines                 = t_lines
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 4
        OTHERS                = 5.
    IF sy-subrc <> 0.
        <b>RAISE EXCEPTION TYPE zcx_proj1</b>
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

Isto funciona porque o RAISE EXCEPTION TYPE agora aceita o MESSAGE como parâmetro exactamente com sintaxe exactamente igual à do comando MESSAGE.

O Abapinho saúda-vos.