Você está na página 1de 2

Descobrindo e implementando BADIs

January 5th, 2009 · 1 Comment

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!