Descobrindo e implementando BADIs
Com as versões mais novas de WAS, a SAP vem utilizando cada vez mais novas técnicas de enhancements e modifications. Uma delas é a BADI.
BADI significa Business Add-Ins. O conceito é parecido com o do plug-ins do Firefox, ou seja, a BADI é uma maneira de extender a funcionalidade original do sistema, sem afetar o funcionamento do mesmo.
Comparando com as user-exits, as BADIs têm uma série de vantagens, como por exemplo:
- Reutilização;
- Implementações independêntes;
- Possibilidade de ativação de desativação;
- Fácil localização;
- Maior “oferta” comparado com as user-exits;
Meu objetivo nesse post é focar no método mais fácil de localização de BADIs.
Um Pouco de Teoria
As BADIs são baseadas nas Interfaces. Sabemos que as classes em ABAP são formadas necessariamente por duas partes, DEFINITION e IMPLEMENTATION, onde na definition fazemos a declaração (definição) dos atributos e dos métodos (nomes e assinaturas). E na implementation, implementamos (ou codificamos) os métodos descritos na definition.
As interfaces são como classes que possuem somente a definition, ou seja, ela define como serão as chamadas dos métodos, mas não os implementa. Não é possivel instanciar (ou criar um objeto) de uma interface.
Para implementar uma interface, temos necessariamente que criar uma classe que a implementa.
Aplicando a Teoria
Voltando para as BADIs, estas são formadas por duas partes, a BADI Definition e a BADI Implementation. Na transação SE18, temos a definição da BADI, ou seja, como os métodos da BADI serão chamados. Esta definição nada mais é do que uma interface global, com a nomenclatura IF_<BADI_NAME>.
Já na transação SE19, temos a implementação da BADI. Ou seja, nada mais é do que uma classe global que implementa a interface IF_<BADI_NAME>.
Então, num determinado ponto do código, no nosso caso um código standard, o programador da SAP coloca uma chamada para um método dessa BADI. Aí o runtime vai executar TODAS as implementações ativas para aquela BADI.
Pulo do Gato!
A dica vem agora. Vamos supor que você precise implementar alguma regra de negócio na transação MIGO e você precisa localizar a BADI que melhor atenda a sua necessidade, como fazer isso de uma maneira rápida e direta?
Simples. TODAS, eu disse TODAS as chamadas de BADI, são precedidas pela chamada do seguinte método:
CL_EXITHANDLER=>GET_INSTANCE
Esse método estático (veja a forma da chamada usando “=>”) irá retornar uma referência a um objeto que representa a BADI em questão.
No programa da MIGO, você pede para procurar por “CL_EXITHANDLER=>GET_INSTANCE” e aí você terá todas as chamadas de BADI da MIGO.
Dando o duplo clique nessa variável de referência, você irá para a declaração da mesma, algo como
DATA: r_ref TYPE REF TO IF_<BADI_NAME>.
Sacaram? O nome da BADI que você precisa implementar é a que está em vermelho! Simples, rápido e indolor!
Leia também
Comments
Comment from Frank Castro
Time April 9, 2010 at 6:29 pm
Pulo do Gato II!
A partir da versão 2004s deve-se procurar também por “GET BADI”
Comment from furlan
Time April 9, 2010 at 7:16 pm
Frank, exato! Essas são as chamadas New BADIs implementation.
Comment from Anderson
Time April 5, 2011 at 2:05 pm
Grande pulo do gato!
guardarei

Comment from Sidnei MV
Time February 27, 2009 at 8:12 pm
Essas RB são indispensáveis! Já vou dar o CTRL C + CTRL V e jogar no memory card