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.

badi se18 sap abap

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!

 

4 Resultados

  1. Sidnei MV disse:

    Essas RB são indispensáveis! Já vou dar o CTRL C + CTRL V e jogar no memory card 🙂

  2. Frank Castro disse:

    Pulo do Gato II!
    A partir da versão 2004s deve-se procurar também por “GET BADI”

  3. furlan disse:

    Frank, exato! Essas são as chamadas New BADIs implementation.

  4. Anderson disse:

    Grande pulo do gato!
    guardarei