Dados e serviços

BAPI

Uma BAPI (Business Application Programming Interface) é uma interface padronizada da SAP, definida como método de um tipo de business object no Business Object Repository e implementada como um módulo de função ABAP habilitado para RFC. As BAPIs dão a programas e sistemas externos acesso a processos e dados de negócio SAP e continuam comuns em integrações com SAP ERP e SAP S/4HANA.

Resumo

Tipo
Interface ABAP clássica (módulo de função habilitado para RFC)
Camada
Lógica de negócio e modelo de dados, consumida como serviço
Definida em
Business Object Repository (BOR), como métodos de business objects
Explorar com
BAPI Explorer (transação BAPI)
Status no ABAP Cloud
API clássica: não pode ser chamada diretamente de código ABAP Cloud
Quem trabalha com ela
Desenvolvedores ABAP, desenvolvedores de integração, equipes de migração
Aplica-se a
SAP ERP (ECC), SAP S/4HANA on-premise e Private Edition
Camada: Lógica de negócio e modelo de dadosOnde se encaixa ▾
Onde se encaixa: L5 · Lógica de negócio e modelo de dadosCamada: Lógica de negócio e modelo de dados. Também envolve: Serviços e APIs.L1L2L3L4L5L6BTP

Camada: Lógica de negócio e modelo de dados

Também envolve: Serviços e APIs

Abrir o mapa de arquitetura →

Como funciona uma BAPI?

Uma BAPI liga uma definição orientada a objetos a uma implementação clássica:

  1. No Business Object Repository, um tipo de business object, como um pedido de compra, declara métodos como criar, alterar ou obter detalhes. Cada um desses métodos de API é uma BAPI.
  2. Por trás de cada método há um módulo de função habilitado para RFC, de modo que a BAPI pode ser chamada dentro do sistema ou remotamente via RFC.
  3. O chamador passa parâmetros de importação e tabelas; a BAPI informa sucesso ou erros em um parâmetro de retorno tipado com a estrutura BAPIRET2, em vez de levantar exceções.
  4. As BAPIs de alteração seguem um modelo transacional em que a própria BAPI não faz commit. O chamador decide quando gravar, normalmente chamando BAPI_TRANSACTION_COMMIT após uma ou mais chamadas de BAPI, ou a contraparte de rollback após um erro.

O BAPI Explorer, iniciado com a transação BAPI, navega pelos tipos de business object e suas BAPIs por componente de aplicação e mostra parâmetros e documentação. Uma BAPI é, portanto, um contrato no nível de negócio sobre um módulo de função, com o commit deixado a cargo do chamador.

Onde as BAPIs ainda são usadas?

As BAPIs são anteriores ao SAP Fiori e ao OData, mas continuam fazendo parte de muitos landscapes:

  • Integrações ponto a ponto e via middleware que chamam o SAP ERP ou o SAP S/4HANA via RFC, por exemplo para criar ordens de venda a partir de uma loja virtual.
  • Programas de migração de dados e processamento em massa que lançam documentos passando pelas mesmas verificações das transações de diálogo.
  • Serviços OData construídos sobre BAPIs. On-premise, projetos SAP Gateway costumam mapear as operações de uma entidade para BAPIs existentes por meio da importação RFC/BOR do Service Builder, e a SAP documenta um padrão RAP que chama uma BAPI dentro de um RAP business object por meio de uma classe wrapper.

Na Alder Manufacturing, um portal de fornecedores que cria pedidos de compra para a Cedar Office Supply pode ainda lançar por meio de uma BAPI de pedido de compra encapsulada em uma API mais nova. As BAPIs muitas vezes sobrevivem como o motor sob uma interface moderna, e não como a própria interface.

Qual é o status das BAPIs no clean core e no ABAP Cloud?

A SAP classifica as BAPIs como APIs clássicas. Elas não são APIs liberadas no sentido do ABAP Cloud, portanto código escrito na versão de linguagem ABAP for Cloud Development não pode chamá-las diretamente.

ImplantaçãoO que isso significa
SAP S/4HANA Cloud Public EditionO código do cliente usa apenas ABAP Cloud, então ABAP customizado não pode chamar BAPIs; para integração com outros sistemas, a SAP documenta BAPIs que podem ser chamadas remotamente
Private Edition e on-premiseABAP clássico ainda pode chamar BAPIs; para código ABAP Cloud, a SAP recomenda um wrapper customizado escrito em ABAP clássico e liberado com o contrato C1
SAP ERP (ECC)As BAPIs continuam sendo uma interface de integração padrão

A SAP publica uma lista de APIs clássicas para a Private Edition e orienta os desenvolvedores a estudá-las no BAPI Explorer. Os relatórios de clean core contam as referências a APIs clássicas listadas separadamente das APIs liberadas. Em um landscape clean core, a BAPI é, portanto, tolerada como ponte, e não tratada como a interface-alvo.

Quais são os erros comuns com BAPIs?

  1. Esquecer o commit. A chamada retorna sem erros, mas nada é gravado, porque o chamador nunca acionou BAPI_TRANSACTION_COMMIT.
  2. Ignorar a tabela de retorno. As BAPIs informam erros como mensagens no parâmetro de retorno; um programa que só verifica exceções não lança nada e informa sucesso.
  3. Confundir os rótulos de "liberada". O BAPI Explorer mostra BAPIs liberadas no Business Object Repository, o que não é o mesmo que uma API liberada sob um contrato de liberação do ABAP Cloud.
  4. Encapsular sem um responsável. Um wrapper C1 em torno de uma BAPI precisa de um responsável que o substitua quando a SAP liberar uma API sucessora.

A maioria dos defeitos com BAPIs vem do modelo transacional e do tratamento de mensagens, não da lógica de negócio dentro da BAPI.

BAPI vs. OData: qual é a diferença?

BAPIOData
O que éUma interface ABAP clássica sobre um método de business objectUm protocolo aberto baseado em REST sobre HTTP
TransporteRFC (ou uma chamada ABAP local)HTTP com JSON ou XML
Consumidor típicoProgramas ABAP, middleware baseado em RFC, ferramentas de migraçãoApps SAP Fiori, apps no SAP BTP, clientes web
Status no clean coreAPI clássica; utilizável a partir do ABAP Cloud apenas por meio de um wrapper liberadoEstável em upgrades apenas quando o serviço é uma API liberada

Uma BAPI é uma interface RFC clássica para a lógica de negócio, enquanto OData é um protocolo web; muitos serviços OData no SAP S/4HANA ainda delegam para BAPIs por baixo.

Perguntas frequentes

As BAPIs estão obsoletas no SAP S/4HANA?

Não como um todo. As BAPIs ainda existem e funcionam no SAP S/4HANA on-premise e na Private Edition, e a SAP lista muitas delas como APIs clássicas para uso via wrapper. Elas não são liberadas para o ABAP Cloud, e a SAP recomenda APIs liberadas para novos desenvolvimentos sempre que existirem.

Por que a chamada da BAPI tem sucesso, mas nenhum documento é gravado?

BAPIs de alteração não fazem commit do próprio trabalho. O chamador precisa acionar BAPI_TRANSACTION_COMMIT após uma chamada bem-sucedida e deve antes ler o parâmetro de retorno, porque os erros são informados ali como mensagens, e não como exceções.

Dá para chamar uma BAPI a partir de código ABAP Cloud?

Não diretamente. Na Private Edition e on-premise, o padrão recomendado pela SAP é uma classe wrapper escrita em ABAP clássico que chama a BAPI e é liberada com o contrato C1, para que o código ABAP Cloud use o wrapper em vez da BAPI.

Como encontrar a BAPI certa para um business object?

Inicie o BAPI Explorer com a transação BAPI, navegue pela hierarquia de componentes de aplicação até o tipo de business object e leia a documentação do método, que descreve parâmetros e objetos de autorização. Para novas integrações, verifique primeiro se uma API liberada cobre a mesma operação.

Fontes

Aplica-se a
SAP ERP (ECC) · SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition
Última revisão

SAP, SAP Fiori, SAPUI5, SAP S/4HANA, SAP BTP e os demais produtos e serviços SAP mencionados são marcas comerciais ou marcas registradas da SAP SE (ou de uma empresa afiliada da SAP) na Alemanha e em outros países. Este guia é independente e não é afiliado, patrocinado nem endossado pela SAP SE.