Pular para o conteúdo
Início » O que é SAP BADI

O que é SAP BADI

SAP-BADI

O que é SAP BADI

BADI (Business Add-Ins) é nova técnica de enhancement para programas ABAP que surgiu junto com o ABAP Objects. E assim como as customer-exits são pontos de saída em programas ABAP para a inserção de regras de negócio específicas do cliente.
As BADI’s são baseadas na implementação de “Interfaces”, que no mundo orientado a objetos funcionam como “padrões” e ou uma especificação de regras pré-definidas. Então quando a SAP define uma “Interface” para uma BADI, está definindo quais serão as operações permitidas através de seus métodos e parâmetros, mas não está definindo o seu comportamento, nenhum método é codificado, isto fica para ser feito posteriormente.
Isto permite que fornecedores e ou parceiros da indústria de software em geral também possam criar soluções especícificas para a SAP. Foi com esta intenção que a SAP introduziu esta forma de enhancement no R/3 a partir da versão 4.6C, ou seja, permitir que não só o cliente SAP possa adicionar regras de negócio específicas como acontece na maioria dos casos com as customer-exits, mas também que os fornecedores e ou parceiros também possam criar soluções baseadas em uma especificação pré-definida
Utilizando desta técnica a SAP passou a disponibilizar e permitir a criação de BADI’s, que em resumo é que a criação de “Interfaces” que serão implementadas (codificadas) posteriormente.

Orientação a Objetos (Uma visão geral)

Classe: Classes descrevem objetos, ou seja, seus atributos e comportamento. Os atributos são as variáveis e o seu comportamento são os métodos (também conhecido como operações ou funções).
Objeto: De um ponto de vista técnico, objetos são instancias em tempo de execução de uma classe.
Instância: Resumidamente é o ato de carregar a classe na memória para que seus métodos possam ser executados. É o objeto em si, ou seja, a classe em memória.
Método: É uma operação e ou procedimento de uma classe que pode ser executado. É onde codificamos as funcionalidades da classe, para cada método é possível definir quais serão os parâmetros de importação e exportação.
Interface: É o esqueleto, um padrão, especificação para uma classe. Isso significa que na interface podemos definir os métodos da classe sem codifica-los, ou seja, é um modelo de implementação.

Arquitetura

Muito semelhante as customer-exits, porém com algums vantagens já descritas, como o uso de orientação à objetos e a possibilidade de reutilização. Seu comportamento conciste em:
A SAP define em seu programa standard um ponto que seria útil um enchencement;
Após isto cria sua definição bem como a Interface que será utilizada.
No programa standard é criado também as chamadas para cada método da Interface. A partir disto é possível criar uma ou mais implementações para a BADI em questão e a partir do momento que a Interface for implementada, seus métodos codificados e ativada, o programa standard passará a executar estes métodos.

Técnicas para encontrar uma BADI

Existem algumas técnicas para se encontar BADI’s:
Buscar via transação SPRO, pesquisando pelas Business Add-Ins desejadas. Navegando nas configurações de acordo com cada módulo e processo de negócio é possível identificar a definição da BADI a ser utilizada.
Buscar via transação SE18 (definições de BADI’s), onde é possível fazer buscas por palavras-chaves, como nome, descrição e etc, encontrando assim a definição da BADI a ser utilizada
Acessar via transação SE16 a tabela SXS_INTER, onde estão cadastradas as BADI’s, filtrando pelo nome e ou possível nome da definição ou interface, para encontrar a BADI a ser utilizada. O campo INTER_NAME contém o nome da interface, e o campo EXIT_NAME contém o nome da DEFINIÇÃO.
Buscar diretamente no programa em que se deseja encontar uma BADI é uma das opções mais eficientes, para isso pesquisar no programa em questão por “cl_exithandler=>get_instance”, onde “cl_exithandler” é a classe standard responsável por instanciar a classe que implementa a BADI, e “get_instance” é o método que executa esta operação.

Implementando e Analisando a BADI

Com o nome da Interface é possível identificar a definição da BADI das seguintes formas:
A partir do nome da interface, retire o literal “IF_EX_”, assim é possível descobrir o nome da definição da BADI, exemplo: IF_EX_DOCUMENT_MAIN01 = DOCUMENT_MAIN01.
Uma outra opção é acessar a tabela SXS_INTER via transação SE16 e utilizar como filtro de pesquisa o campo INTER_NAME, nele informar nome da interface e após executar a pesquisa o campo EXIT_NAME conterá o nome da definição.
Para maiores detalhes referentes a BADI deve-se utilizar a transação SE18 (BADI Builder), onde estão as definições, ela é o equivalente a SMOD para customer-exit’s. Informando o nome da definição é possível verificar detalhes referentes a BADI como métodos que podem ser utilizados, documentação e outros atributos.

Construindo uma BADI

Assim como as customer-exit’s, também é possível criar uma BADI “Z” para um programa “Z”, um exemplo para este tipo de uso seria para uma solução “Z” a ser comercializada, onde o fornecedor da solução é responsável pela manutenção porém poderia disponibilizar “pontos de saídas” em forma de BADI’s para tornar possível o cliente também desenvolver regras de negócio específicas de acordo com suas necessidades.

Utilizando Filtros:

Algumas BADI’s podem ser definidas como dependentes de filtros. Isso permite, por exemplo, filtrar a execução de uma implementação por país, empresa e ou qualquer outro filtro que seja necessário, sempre verificar esta possibilidade no momento da implementação (SE19) na secção “Características, Categoria”.

Para fazer uso do filtro, utilizar o elemento de dados permitido para a BADI em questão referente ao que se quer filtrar (ex.: LAND1, BUKRS, WERKS_D, etc) e informar a lista de valores válidos para o filtro utilizado (ex.: BR, EMP1, C001, etc). Toda BADI que possui opção de filtro tem como parâmetro obrigatório em seus métodos o parâmetro FLT_VAL onde seu tipo é igual ao elemento de dados permitido.

O próprio mecanismo standard verifica antes de instanciar uma implementação de BADI se ela deve ou não ser executada caso uma condição do filtro seja atendida.

Caso a BADI seja executada, o mecanismo standard de chamada do método também enviará o valor do parâmetro FLT_VAL para o método em questão e este parâmetro pode ser utilizado na lógica implementada. Para maiores detalhes verificar a BADI “ADDRESS_CHECK”, qual possibilita filtro por país.

Utilização múltipla:

Para algumas BADI’s também são permitidas as utilizações múltiplas, ou seja, podem ter mais de uma implementação ativa o que permite que a mesma BADI possa ser implementada mais de uma vez e todas as implementações serão executadas, porém a sequência não deve ser relevante, pois esta a sequência de execução não pode ser definida anteriormente (nota da própria SAP). Um exemplo deste tipo de BADI é a “INVOICE_UPDATE” utilizada no processo de entrada de faturas no SAP, para maiores detalhes referente a esta BADI verifique a documentação existente via transação SE18.

Sobreposição:

Algumas BADI’s tem como característica sobrepor parte e ou todo o processamento standard de alguma rotina em específico, ou seja, se ela for implementada e ativada as rotinas standards são ignoradas e a lógica a ser executada naquela parte do processo torna-se de respossabilidade exclusiva do cliente. Por este motivo é recomendado que sempre antes de implementar uma BADI deve-se verificar em sua documentação sua finalidade e comportamento

Faça a inscrição para a prova de certificação. Estude com os simulados Bynem
Veja também em Web Store: SAP BADI

Veja também: