Conhecendo Módulos de Função | ABAP Warrior

Conhecendo Módulos de Função

Módulo de função
Você já deve ter visto ou ouvido falar de um módulo de função, ou simplesmente de função. Ou então, já viu em algum programa uma chamada com a linha de comando CALL FUNCTION.

Se você não conhece, não se preocupe, vou mostrar os conceitos básicos de como funcionam os módulos de função dentro de ABAP. Se você já conhece, venha conferir e compartilhar conhecimentos.






O que é um Módulo de Função ?


Um módulo de função, em ABAP, funciona como as funções em outras linguagens de programação. Basicamente, você pode colocar um processamento ou uma funcionalidade específica dentro de uma função e depois fazer uso dela em vários outros lugares de um ou mais programas.

Existem muitos módulos de funções standards que são muito úteis. Mas se houver necessidade, e sempre há, você pode criar seu próprio módulo de função.

Como funciona um Módulo de Função ?


Para explicar como funciona um módulo de função vou usar a transação SE37, que é a transação onde se trabalha com módulos de função. E vou usar uma função standard do módulo de WM, usada para criar Ordens de Transporte com base em Remessas, chamada L_TO_CREATE_DN.

Acessando a transação SE37, no único campo disponível na tela basta preencher com o nome da função "L_TO_CREATE_DN" e pressionar o botão "Exibir".

Tela inicial SM37
Informe o nome da função e pressione "Exibir"

A primeira guia que será exibida é chamada "Texto fonte", que é o próprio código-fonte da função. Se quiser pode dar uma "sapeada" no código para ver como é a codificação standard. Não fique preocupado se você não entender nada, pois a grande maioria dos códigos standards está em alemão.

Além da guia "Texto fonte" existem outras guias. Para quem vai usar função, as mais importantes são: "Importação", "Exportação", "Modificação", "Tabelas" e "Exceções".

Guias SM37
Guias da SM37


Guia "Importação"


Na guia "Importação" estão os parâmetros que a função precisa receber, ou seja, parâmetros de ida. São aqueles que você passa para a função e não podem ser alterados para tratar um possível retorno. É uma via de mão única, apenas de ida.

Um detalhe interessante em ABAP, é que os parâmetros declarados como importação serão chamados externamente como exportação. Imagine como um cenário de compra e venda internacional, se um país está importando, é porquê outro está exportando. Então depende do ponto de vista: se você estiver dentro da função estará importando parâmetros e se estiver fora da função estará exportando. Na chamada externa da função usa-se "EXPORTING".

* Aqui são aceitos tanto parâmetros com valores individuais como também estruturas.

Guia "Exportação"


Na guia "Exportação" estão os parâmetros que a função irá devolver, ou seja, parâmetros de volta. São aqueles que você espera que a função responda e não podem ter os valores passados de fora da função. É uma via de mão única, apenas de volta.

Os parâmetros de exportação são chamados externamente como importação. Ele tem o tratamento exatamente ao contrário dos parâmetros de importação, mas usando o mesmo conceito do ponto de vista de dentro ou de fora. Na chamada externa da função usa-se "IMPORTING".

* Aqui são aceitos tanto parâmetros com valores individuais como também estruturas.

Guia "Modificações"


Na guia "Modificações" estão os parâmetros que se comportam como uma mistura dos dois primeiros citados acima. Pode-se tanto passar valores como modificá-los e retorná-los. Na chamada externa da função usa-se "CHANGING".

* Aqui são aceitos tanto parâmetros com valores individuais como também estruturas.

Guia "Tabelas"


Na guia "Tabelas", diferentemente dos outros parâmetros, apenas são aceitos parâmetros com estrutura de tabelas. Também pode-se passar valores como também modificá-los e retorná-los, mas sempre dentro de uma estrutura de tabela. Na chamada externa da função usa-se "TABLES".

Guia "Exceções"


Na guia "Exceções" talvez se encontre a parte mais importante de uma chamada a uma função, que é o tratamento dos erros que podem acontecer durante o processamento. Se você não citar na chamada externa as exceções que você quer tratar, ao ocorrer um erro irá apresentar um DUMP e não será possível tratar dentro do seu programa.

Para tratar as exceções você deve numerá-las, sem repetições dos números, e verificar depois da chamada se valor da variável global SY-SUBRC está entre os números referenciados. Na chamada externa da função usa-se "EXCEPTIONS".


Exemplo de chamada

Usando ainda a função L_TO_CREATE_DN, segue abaixo exemplo de chamada:
CALL FUNCTION 'L_TO_CREATE_DN'
  EXPORTING
    i_lgnum                    = v_lgnum
    i_vbeln                    = v_vbeln
    i_squit                    = c_x
    it_delit                   = tg_delit
  IMPORTING
    e_tanum                    = v_tanum
  EXCEPTIONS
    foreign_lock               = 1
    dn_completed               = 2
    partial_delivery_forbidden = 3
    xfeld_wrong                = 4
    ldest_wrong                = 5
    drukz_wrong                = 6
    dn_wrong                   = 7
    squit_forbidden            = 8
    no_to_created              = 9
    teilk_wrong                = 10
    update_without_commit      = 11
    no_authority               = 12
    no_picking_allowed         = 13
    dn_hu_not_choosable        = 14
    input_error                = 15
    OTHERS                     = 16.


Não esta em uso a sessão de tabelas (TABLES). Mesmo que no módulo de função exista a declaração de tabelas, se lá estiver marcado que seu uso é opcional você não precisa usar na sua chamada. Óbvio, se você também não precisar. Veja que as três existentes na função estão marcadas como opcionais.

Tabelas L_TO_CREATE_DN
Tabelas do módulo de função L_TO_CREATE_DN

* Os parâmetros de importação e modificação também podem ter a marcação como opcionais.

Não está em uso a sessão de modificações (CHANGING), pois este módulo de funções não possui parâmetros de modificação.

Repare na numeração das exceções. Se ocorrer algum erro dentro do processamento do módulo de função, com as exceções citadas e numeradas, o erro poderá ser tratado para o usuário. Em toda e qualquer chamada de função você pode usar a exceção OTHERS. Ela funciona como uma exceção padrão, para caso ocorra um erro no qual não exista necessidade de tratamento especifico.

Um grande abraço e até a próxima.
2016-03-05T11:20:00-03:00 2017-04-13T00:44:49Z
Nenhum comentário:
Related Posts Plugin for WordPress, Blogger...