Dicas ABAP

Published on September 19th, 2013 | by Daiane Medeiros

10

ALVs Standard: Reutilizando o caos alemão

Queridos zumbis, alguma vez vocês já passaram pela seguinte situação: o seu programa precisa usar as informações de algum relatório ALV, porém o relatório não está escrito de uma forma que faz com que o código fosse facilmente reutilizável?
Frustrante, não é?! 🙁
Bom, dependendo do relatório, há sim uma chance de reutilizar a extração de dados e o código de processamento. Porém, meu amigo zumbi, infelizmente você vai descobrir que existem pouquíssimos relatórios standard que podem ser reutilizados com facilidade, principalmente quando começa os comentários em alemão e você tenta traduzi-los na esperança de entender alguma coisa (admita, você já fez isso!).

Então, e agora?
Se você encontrar um relatório que tem a lógica que você precisa, pode ter uma outra maneira de reutilizá-lo sem precisar clonar programas ou ficar copiando código. Você pode chamar o relatório dentro do seu programa e tratá-lo como uma rotina. Essa técnica pode te ajudar a reduzir o esforço do desenvolvimento e reutilizar objetos que já existem.

Mas como isso funciona?
Depois da extração e processamento, os relatórios ALV exportam os dados para uma área de memória global e isso permite que o seu programa possa importá-los depois.
Quando um relatório ALV é executado, as informações em tempo de execução (layout, fieldcat, tabelas e etc.) são armazenadas pelos métodos da classe CL_SALV_BS_RUNTIME_INFO. Aliás, essa classe usa o EXPORT TO MEMORY para armazenar as informações. A classe lida com tudo isso internamente e fornece métodos para acessar essas informações, ou seja, não precisamos nos preocupar como elas são armazenadas.

Exemplo:
Vou usar como exemplo o relatório IE05, informando o número do inventário e centro na tela de seleção. Essa é a saída do relatório:

saida_alv

Agora vou chamar o relatório dentro do meu programa, passando os mesmos valores para os parâmetros de seleção e importar os dados para uma tabela interna:

Resultado da tabela preenchida:

alv_final

Simples, não é? Vou explicar os métodos e os parâmetros utilizados pela classe CL_SALV_BS_RUNTIME_INFO:

SET () – método que inicializa a classe.
• DISPLAY – Defina como “abap_false” para forçar o relatório ALV ser executado em “background”, ou seja, o ALV não será exibido.
• METADATA – Defina como “abap_false” para evitar que o layout, fieldcat, etc, sejam exportados para a memória… a gente não precisa deles neste cenário.
• DATA – Defina como “abap_true” para forçar a exportação da tabela de dados para a memória.

GET_DATA_REF () – Se você não conhece qual é a estrutura da tabela, ou prefere usar uma tabela dinâmica, este método pode ser usado para acessar a referência da tabela.
• R_DATA – parâmetro de exportação da tabela.

CLEAR_ALL () – este método limpa todas as áreas de memória, redefinindo os flags que foram definidos no método SET ().

Essa técnica pode ser utilizada para acessar os dados dos relatórios que usam qualquer tipo de ALV (ALV Grid, ALV List, ALV Tree), mas, obviamente, não vai funcionar para relatórios WRITE ou qualquer coisa que não seja SAPGUI ALV.
É isso aí, espero que isso possa ajudá-los algum dia! Até mais e que a força anti-zumbi esteja com vocês!!

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

Tags: , ,


About the Author

Abapeira desde 2008, curte som underground, arte urbana, bobeiras geek, luta krav maga, fala gírias idosas e jura que é uma pessoa normal.



10 Responses to ALVs Standard: Reutilizando o caos alemão

  1. Pãtz, ótima dica Daiane!
    Valeu!

  2. Vinicius Ostan says:

    Amazing!!!

    Muito bom..
    Acabei de passar por tal situação, pena não ter lido este tópico antes… 🙁

    Na próxima vou lembrar do zombie.

    Obrigado

  3. Kazu says:

    Muito bom Daiane! valew pela informação !

  4. Show de Bola Dai… Parabéns =D

  5. Daniel jesus says:

    Sensacional!
    Parabéns Daiane!

  6. Jorge Bastos says:

    Ótima dica Lady Dai!
    Parabéns!!!

  7. Sandra says:

    Muito legal a dica . Me ajudou muito.

  8. Alex says:

    Como faço para os dados que estão armazenados lr_data tipo atribuir um campo a uma variavel local.EX:

    matnr = -MATNR

  9. Reginaldo Russo says:

    Pessoal, também é possível utilizar o CALL TRANSACTION no lugar do SUBMIT.

Leave a Reply

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

Back to Top ↑