Datos y servicios

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 ▾
Dónde se ubica: L5 · Lógica de negocio y modelo de datosCapa: Lógica de negocio y modelo de datos. También abarca: Servicios y API.L1L2L3L4L5L6BTP

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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ónQué significa
SAP S/4HANA Cloud Public EditionEl 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-premiseEl 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?

  1. Olvidar el commit. La llamada termina sin errores pero no se guarda nada, porque quien llama nunca ejecutó BAPI_TRANSACTION_COMMIT.
  2. 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.
  3. 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.
  4. 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?

BAPIOData
Qué esUna interfaz ABAP clásica sobre un método de business objectUn protocolo abierto basado en REST sobre HTTP
TransporteRFC (o una llamada ABAP local)HTTP con JSON o XML
Consumidor típicoProgramas ABAP, middleware basado en RFC, herramientas de migraciónAplicaciones SAP Fiori, aplicaciones SAP BTP, clientes web
Estado con clean coreAPI clásica; utilizable desde ABAP Cloud solo mediante un wrapper liberadoEstable 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

Se aplica a
SAP ERP (ECC) · SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition
Última revisión

SAP, SAP Fiori, SAPUI5, SAP S/4HANA, SAP BTP y los demás productos y servicios de SAP mencionados son marcas comerciales o marcas registradas de SAP SE (o de una empresa afiliada de SAP) en Alemania y otros países. Esta guía es independiente y no está afiliada, patrocinada ni respaldada por SAP SE.