BAPI
Una BAPI (Business Application Programming Interface) es una interfaz SAP estandarizada, definida como método de un tipo de business object en el Business Object Repository e implementada como módulo de funciones ABAP habilitado para RFC. Las BAPI dan a programas y sistemas externos acceso a los procesos y datos de negocio de SAP, y siguen siendo habituales en integraciones de SAP ERP y SAP S/4HANA.
Datos clave
- Tipo
- Interfaz ABAP clásica (módulo de funciones habilitado para RFC)
- Capa
- Lógica de negocio y modelo de datos, consumida como servicio
- Se define en
- Business Object Repository (BOR), como métodos de business objects
- Se explora con
- BAPI Explorer (transacción BAPI)
- Estado en ABAP Cloud
- API clásica: no se puede llamar directamente desde código ABAP Cloud
- Quién trabaja con ello
- Desarrolladores ABAP, desarrolladores de integración, equipos de migración
- Se aplica a
- SAP ERP (ECC), SAP S/4HANA on-premise y Private Edition
Capa: Lógica de negocio y modelo de datosDónde se ubica ▾
Capa: Lógica de negocio y modelo de datos
También abarca: Servicios y API
Abrir el mapa de arquitectura →¿Cómo funciona una BAPI?
Una BAPI conecta una definición orientada a objetos con una implementación clásica:
- En el Business Object Repository, un tipo de business object, como un pedido de compra, declara métodos como crear, modificar u obtener detalle. Cada uno de estos métodos de API es una BAPI.
- Detrás de cada método hay un módulo de funciones habilitado para RFC, de modo que la BAPI puede llamarse dentro del sistema o de forma remota mediante RFC.
- Quien llama pasa parámetros de importación y tablas; la BAPI informa del éxito o de los errores en un parámetro de retorno tipado con la estructura BAPIRET2, en lugar de lanzar excepciones.
- Las BAPI de modificación siguen un modelo transaccional en el que la propia BAPI no hace commit. Quien llama decide cuándo guardar, normalmente llamando a BAPI_TRANSACTION_COMMIT después de una o varias llamadas a BAPI, o a su contraparte de rollback tras un error.
El BAPI Explorer, que se inicia con la transacción BAPI, permite navegar por los tipos de business object y sus BAPI por componente de aplicación, y muestra los parámetros y la documentación. Una BAPI es, por tanto, un contrato de nivel de negocio sobre un módulo de funciones, con el commit a cargo de quien llama.
¿Dónde se siguen usando las BAPI?
Las BAPI son anteriores a SAP Fiori y a OData, pero siguen formando parte de muchos entornos:
- Integraciones punto a punto y de middleware que llaman a SAP ERP o SAP S/4HANA mediante RFC, por ejemplo para crear pedidos de cliente desde una tienda web.
- Programas de migración de datos y de procesamiento masivo que contabilizan documentos con las mismas comprobaciones que las transacciones de diálogo.
- Servicios OData construidos sobre BAPI. En on-premise, los proyectos de SAP Gateway suelen asignar las operaciones de una entidad a BAPI existentes mediante la importación RFC/BOR del Service Builder, y SAP documenta un patrón RAP que llama a una BAPI dentro de un business object RAP a través de una clase wrapper.
En Alder Manufacturing, un portal de proveedores que crea pedidos de compra para Cedar Office Supply puede seguir contabilizando mediante una BAPI de pedidos de compra envuelta en una API más reciente. Las BAPI sobreviven a menudo como el motor bajo una interfaz moderna, más que como la interfaz misma.
¿Cuál es el estado de las BAPI con clean core y ABAP Cloud?
SAP clasifica las BAPI como API clásicas. No son API liberadas en el sentido de ABAP Cloud, por lo que el código escrito en la versión de lenguaje ABAP for Cloud Development no puede llamarlas directamente.
| Implementación | Qué significa |
|---|---|
| SAP S/4HANA Cloud Public Edition | El código del cliente usa solo ABAP Cloud, por lo que el ABAP personalizado no puede llamar a BAPI; para la integración con otros sistemas, SAP documenta las BAPI que pueden llamarse de forma remota |
| Private Edition y on-premise | El ABAP clásico todavía puede llamar a BAPI; para el código ABAP Cloud, SAP recomienda un wrapper personalizado escrito en ABAP clásico y liberado con el contrato C1 |
| SAP ERP (ECC) | Las BAPI siguen siendo una interfaz de integración estándar |
SAP publica una lista de API clásicas para Private Edition y remite a los desarrolladores al BAPI Explorer para estudiarlas. Los informes de clean core contabilizan las referencias a API clásicas de la lista por separado de las API liberadas. Una BAPI se tolera, por tanto, como puente en un entorno clean core, pero no se trata como la interfaz de destino.
¿Cuáles son los errores comunes con las BAPI?
- Olvidar el commit. La llamada termina sin errores pero no se guarda nada, porque quien llama nunca ejecutó BAPI_TRANSACTION_COMMIT.
- Ignorar la tabla de retorno. Las BAPI informan de los errores como mensajes en el parámetro de retorno; un programa que solo comprueba excepciones no contabiliza nada e informa de éxito.
- Confundir las etiquetas de "liberado". El BAPI Explorer muestra las BAPI liberadas en el Business Object Repository, lo que no equivale a una API liberada bajo un contrato de liberación de ABAP Cloud.
- Envolver sin un responsable. Un wrapper C1 alrededor de una BAPI necesita un responsable que lo sustituya cuando SAP libere una API sucesora.
La mayoría de los defectos de las BAPI provienen del modelo transaccional y del tratamiento de mensajes, no de la lógica de negocio que contiene la BAPI.
BAPI frente a OData: ¿cuál es la diferencia?
| BAPI | OData | |
|---|---|---|
| Qué es | Una interfaz ABAP clásica sobre un método de business object | Un protocolo abierto basado en REST sobre HTTP |
| Transporte | RFC (o una llamada ABAP local) | HTTP con JSON o XML |
| Consumidor típico | Programas ABAP, middleware basado en RFC, herramientas de migración | Aplicaciones SAP Fiori, aplicaciones SAP BTP, clientes web |
| Estado con clean core | API clásica; utilizable desde ABAP Cloud solo mediante un wrapper liberado | Estable ante actualizaciones solo cuando el servicio es una API liberada |
Una BAPI es una interfaz RFC clásica hacia la lógica de negocio, mientras que OData es un protocolo web; muchos servicios OData de SAP S/4HANA siguen delegando en BAPI por debajo.
Preguntas frecuentes
¿Las BAPI están obsoletas en SAP S/4HANA?
No en su conjunto. Las BAPI siguen existiendo y funcionando en SAP S/4HANA on-premise y Private Edition, y SAP incluye muchas como API clásicas para su uso mediante wrappers. No están liberadas para ABAP Cloud, y SAP recomienda API liberadas para los desarrollos nuevos siempre que existan.
¿Por qué una llamada a una BAPI tiene éxito pero no se guarda ningún documento?
Las BAPI de modificación no hacen commit de su propio trabajo. Quien llama debe ejecutar BAPI_TRANSACTION_COMMIT tras una llamada correcta, y antes debe leer el parámetro de retorno, porque los errores se informan allí como mensajes y no como excepciones.
¿Puedo llamar a una BAPI desde código ABAP Cloud?
No directamente. En Private Edition y on-premise, el patrón recomendado por SAP es una clase wrapper escrita en ABAP clásico que llama a la BAPI y se libera con el contrato C1, para que el código ABAP Cloud pueda usar el wrapper en lugar de la BAPI.
¿Cómo encuentro la BAPI adecuada para un business object?
Inicie el BAPI Explorer con la transacción BAPI, navegue por la jerarquía de componentes de aplicación hasta el tipo de business object y lea la documentación del método, que describe los parámetros y los objetos de autorización. Para nuevas integraciones, compruebe primero si una API liberada cubre la misma operación.
Fuentes
- SAP Help Portal: BAPI terminology — BOR, business object types and RFC-enabled function modules (SAP ERP)
- SAP Help Portal: Finding information in the BAPI Explorer (SAP ERP)
- SAP Help Portal: Finding and exploring classic APIs for clean core development (ABAP Cloud)
- SAP Help Portal: Developing in ABAP Cloud and consuming classic APIs (BAPI wrappers)
- SAP Help Portal: BAPIs/IDocs in SAP S/4HANA Cloud Public Edition
- Se aplica a
- SAP ERP (ECC) · SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition
- Última revisión