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, é uma maneira de estender 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 independentes;
- 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 dos business add-ins.
O que é uma BADI? 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.
Transações de BADIs. 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! Como achar BADIs
A dica vem agora. Vamos supor que você precise implementar alguma regra de negócio na transação MIGO e você precisa localizar um possível add-in 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
EDITADO: posteriormente foi introduzido o comando GET BADI (que também pode ser pesquisado), que não necessita a chamada do método GET_INSTANCE
Esse método estático (veja a forma da chamada usando “=>”) irá retornar uma referência a um objeto que representa a add-in 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 business add-in que você precisa implementar é a que está em vermelho! Simples, rápido e indolor!
Essas RB são indispensáveis! Já vou dar o CTRL C + CTRL V e jogar no memory card 🙂
Pulo do Gato II!
A partir da versão 2004s deve-se procurar também por “GET BADI”
Frank, exato! Essas são as chamadas New BADIs implementation.
Grande pulo do gato!
guardarei