BAPI
Une BAPI (Business Application Programming Interface) est une interface SAP standardisée, définie comme méthode d'un type de business object dans le Business Object Repository et implémentée sous forme de module fonction ABAP appelable par RFC. Les BAPI donnent aux programmes et aux systèmes externes l'accès aux processus et aux données métier SAP, et restent courantes dans les intégrations SAP ERP et SAP S/4HANA.
L'essentiel
- Type
- Interface ABAP classique (module fonction appelable par RFC)
- Couche
- Logique métier et modèle de données, consommée comme service
- Défini dans
- Business Object Repository (BOR), comme méthodes de business objects
- Explorer avec
- BAPI Explorer (transaction BAPI)
- Statut en ABAP Cloud
- API classique : non appelable directement depuis du code ABAP Cloud
- Qui l'utilise
- Développeurs ABAP, développeurs d'intégration, équipes de migration
- S'applique à
- SAP ERP (ECC), SAP S/4HANA on-premise et Private Edition
Couche : Logique métier et modèle de donnéesOù se situe-t-il ? ▾
Couche : Logique métier et modèle de données
Concerne aussi : Services et API
Ouvrir la carte d'architecture →Comment fonctionne une BAPI ?
Une BAPI relie une définition orientée objet à une implémentation classique :
- Dans le Business Object Repository, un type de business object tel qu'une commande d'achat déclare des méthodes comme create, change ou get detail. Chacune de ces méthodes d'API est une BAPI.
- Derrière chaque méthode se trouve un module fonction appelable par RFC, de sorte que la BAPI peut être appelée au sein du système ou à distance via RFC.
- L'appelant transmet des paramètres d'import et des tables ; la BAPI signale la réussite ou les erreurs dans un paramètre de retour typé avec la structure BAPIRET2, au lieu de lever des exceptions.
- Les BAPI de modification suivent un modèle transactionnel dans lequel la BAPI elle-même n'effectue pas de commit. L'appelant décide quand enregistrer, en général en appelant BAPI_TRANSACTION_COMMIT après un ou plusieurs appels de BAPI, ou son équivalent de rollback après une erreur.
Le BAPI Explorer, lancé avec la transaction BAPI, parcourt les types de business objects et leurs BAPI par composant d'application et affiche les paramètres et la documentation. Une BAPI est donc un contrat de niveau métier posé sur un module fonction, le commit étant laissé à l'appelant.
Où les BAPI sont-elles encore utilisées ?
Les BAPI sont antérieures à SAP Fiori et à OData, mais elles restent présentes dans de nombreux environnements :
- Les intégrations point à point et via middleware qui appellent SAP ERP ou SAP S/4HANA par RFC, par exemple pour créer des commandes clients depuis une boutique en ligne.
- Les programmes de migration de données et de traitement de masse qui comptabilisent des documents en passant par les mêmes contrôles que les transactions de dialogue.
- Les services OData construits sur des BAPI. En on-premise, les projets SAP Gateway associent souvent les opérations d'une entité à des BAPI existantes via l'import RFC/BOR du Service Builder, et SAP documente un modèle RAP qui appelle une BAPI au sein d'un business object RAP au travers d'une classe wrapper.
Chez Alder Manufacturing, un portail fournisseurs qui crée des commandes d'achat pour Cedar Office Supply peut encore comptabiliser via une BAPI de commande d'achat encapsulée dans une API plus récente. Les BAPI survivent souvent comme moteur sous une interface moderne plutôt que comme interface elle-même.
Quel est le statut des BAPI face au clean core et à ABAP Cloud ?
SAP classe les BAPI parmi les API classiques. Ce ne sont pas des API libérées au sens d'ABAP Cloud : le code écrit dans la version de langage ABAP for Cloud Development ne peut donc pas les appeler directement.
| Déploiement | Ce que cela signifie |
|---|---|
| SAP S/4HANA Cloud Public Edition | Le code client utilise uniquement ABAP Cloud, si bien que le code ABAP spécifique ne peut pas appeler de BAPI ; pour l'intégration avec d'autres systèmes, SAP documente des BAPI appelables à distance |
| Private Edition et on-premise | L'ABAP classique peut encore appeler des BAPI ; pour le code ABAP Cloud, SAP recommande un wrapper spécifique écrit en ABAP classique et libéré avec le contrat C1 |
| SAP ERP (ECC) | Les BAPI restent une interface d'intégration standard |
SAP publie une liste d'API classiques pour la Private Edition et renvoie les développeurs vers le BAPI Explorer pour les étudier. Le reporting clean core comptabilise les références aux API classiques répertoriées séparément des API libérées. Une BAPI est donc tolérée comme passerelle dans un environnement clean core, mais n'est pas considérée comme l'interface cible.
Quelles sont les erreurs fréquentes avec les BAPI ?
- Oublier le commit. L'appel se termine sans erreur mais rien n'est enregistré, car l'appelant n'a jamais déclenché BAPI_TRANSACTION_COMMIT.
- Ignorer la table de retour. Les BAPI signalent les erreurs sous forme de messages dans le paramètre de retour ; un programme qui ne vérifie que les exceptions ne comptabilise rien et signale une réussite.
- Confondre les mentions « libéré ». Le BAPI Explorer affiche les BAPI libérées dans le Business Object Repository, ce qui n'est pas la même chose qu'une API libérée au titre d'un contrat de libération ABAP Cloud.
- Encapsuler sans responsable. Un wrapper C1 autour d'une BAPI nécessite un responsable qui le remplace lorsque SAP libère une API qui lui succède.
La plupart des anomalies liées aux BAPI proviennent du modèle transactionnel et de la gestion des messages, et non de la logique métier contenue dans la BAPI.
BAPI ou OData : quelle différence ?
| BAPI | OData | |
|---|---|---|
| De quoi s'agit-il | Une interface ABAP classique sur une méthode de business object | Un protocole ouvert fondé sur REST, via HTTP |
| Transport | RFC (ou appel ABAP local) | HTTP avec JSON ou XML |
| Consommateur type | Programmes ABAP, middleware basé sur RFC, outils de migration | Applications SAP Fiori, applications SAP BTP, clients web |
| Statut clean core | API classique ; utilisable depuis ABAP Cloud uniquement via un wrapper libéré | Stable lors des mises à niveau uniquement si le service est une API libérée |
Une BAPI est une interface RFC classique vers la logique métier, tandis qu'OData est un protocole web ; de nombreux services OData de SAP S/4HANA délèguent encore à des BAPI en dessous.
Questions fréquentes
Les BAPI sont-elles dépréciées dans SAP S/4HANA ?
Pas dans leur ensemble. Les BAPI existent toujours et fonctionnent dans SAP S/4HANA on-premise et Private Edition, et SAP en répertorie un grand nombre comme API classiques à utiliser via des wrappers. Elles ne sont pas libérées pour ABAP Cloud, et SAP recommande les API libérées pour les nouveaux développements partout où elles existent.
Pourquoi un appel de BAPI réussit-il sans qu'aucun document ne soit enregistré ?
Les BAPI de modification n'effectuent pas elles-mêmes le commit de leur travail. L'appelant doit déclencher BAPI_TRANSACTION_COMMIT après un appel réussi, et doit d'abord lire le paramètre de retour, car les erreurs y sont signalées sous forme de messages plutôt que d'exceptions.
Puis-je appeler une BAPI depuis du code ABAP Cloud ?
Pas directement. En Private Edition et en on-premise, le modèle recommandé par SAP est une classe wrapper écrite en ABAP classique qui appelle la BAPI et qui est libérée avec le contrat C1, afin que le code ABAP Cloud puisse utiliser le wrapper au lieu de la BAPI.
Comment trouver la bonne BAPI pour un business object ?
Lancez le BAPI Explorer avec la transaction BAPI, parcourez la hiérarchie des composants d'application jusqu'au type de business object et lisez la documentation de la méthode, qui décrit les paramètres et les objets d'autorisation. Pour les nouvelles intégrations, vérifiez d'abord si une API libérée couvre la même opération.
Sources
- 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
- S'applique à
- SAP ERP (ECC) · SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition
- Dernière relecture