BAdis são melhorias para a versão padrão do sistema. Elas podem ser inseridas no sistema SAP para acomodar as necessidades específicas dos utilizadores e serem incluídas no fornecimento Standard. Algumas indústrias específicas muitas vezes exigem funções especiais, a SAP permite que você crie estas funções pré-definidas em seu software utilizando os Business Add-ins.
Para criar uma BAdi siga os seguintes passos:
- Entre na transação SE18.
- Crie um novo Enhancement Spot chamado: ZDA_BADI_SPOT.
- No ícone criar BAdi, crie uma BAdi de nome ZDA_BADI.
- Desmarque a opção Multiple Use de sua BAdi:
- Salve sua BAdi e expanda seu conteúdo.
- Clique em interface e insira uma nova interface de nome ZAD_BADI_INTERFACE.
- Na aba métodos crie um novo método de instancia chamado GET_DADOS e insira uma descrição de sua escolha:
- Crie os Parâmetros para sua Interface de acordo com a figura abaixo:
- Salve e Ative a sua BAdi.
- De volta a tela principal da transação SE18, em modo de alteração cheque a opção CALL FALLBACK IF NO IMPLEMENTATION IS EXECUTED, insira o nome da classe como ZDA_CLASSE e salve:
- Você será levado ao Class Builder e verá que sua classe herdou os métodos da interface criada logo acima, dê um duplo clique no método e preencha seu código com o método descrito logo abaixo.
- Salve e ative sua classe.
- Na transação SE38 crie um programa chamado Z_PROG_BADI e utilize o código abaixo para testar sua BAdi.
Exemplo:
Neste exemplo criamos uma BAdi e a utilizamos em um programa Abap.
Obs: BAdis não devem ser confundidas com BAPIs, existe um post de exemplo de uma BAPI neste site que possui quase a mesma funcionalidade deste exemplo, e modificando a instrução SELECT deste método podemos deixar as funcionalidades idênticas, entretanto BAdis e BAPIs são utilizadas para propósitos diferentes em um sistema SAP.
Abap
Método da classe – ZDA_CLASSE
method ZDA_BADI_INTERFACE~GET_DADOS.
Select * From SFLIGHT
INTO TABLE TFLIGHT
WHERE carrid EQ carrid AND
connid EQ connid AND
fldate EQ fldate.
endmethod.
Programa – Z_PROG_BADI
*&---------------------------------------------------------------------*
*& Report Z_PROG_BADI
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& BAdis - Business Add Ins
*&---------------------------------------------------------------------*
REPORT Z_PROG_BADI.
* Exemplo de entrada de dados na tabela SFLIGHT
* airlineid = 'LH'
* connectionid = '0401'
* flightdate = '07.03.2014'
* Cria parametros
PARAMETERS:
empresa TYPE scarr-carrid, " Airline code
conexao TYPE sflight-connid, " Connection number
data TYPE sflight-fldate. " Flight date
* Declara variaveis
DATA:
t_flight TYPE STANDARD TABLE OF sflight,
dados LIKE LINE OF t_flight,
badi_flight TYPE REF TO zda_badi.
* Incia seleção
START-OF-SELECTION.
* Acessa objeto Badi
GET BADI badi_flight.
* Chama BADI
CALL BADI badi_flight->get_dados
EXPORTING
carrid = empresa
connid = conexao
fldate = data
RECEIVING
tflight = t_flight.
* Imprime dados
LOOP AT t_flight INTO dados.
WRITE:
/ dados-carrid,
dados-connid,
dados-fldate,
dados-price,
dados-PLANETYPE,
dados-CURRENCY.
ENDLOOP.





