SAP ECC est un ERP où cohabitent de nombreux "objets métiers" : les clients, les commandes d'achat, les commandes client, les fournisseurs, et bien, bien d'autres.
On pense à tort que les commandes clients se résument aux tables de documents commerciaux, VBAK et VBAP. Je cherche une commande, hop je sélectionne dans VBAK. Je veux créer une commande, j'ai quand même la présence d'esprit d'utiliser une BAPI. Ouf.
Ô grand dieu, SAP c'est quand même un peu plus que ça. Même s'il est à déplorer que beaucoup trop de développements ABAP sont constitués d'agglomérats de sélections diverses dans les tables SAP, le système offre bien d'autres possibilités.
Il parait évident qu'un programme n'ira jamais créer une commande client à l'aide d'insertion directe en table dans VBAK+VBAP. C'est évident ... mais pourquoi ? Parce qu'une commande est plus qu'une entrée dans une table, c'est un objet à part entière, et son entrée de table n'est qu'une forme de sérialisation dans SAP.
Les objets dans SAP sont visibles dans le BOR (Business Object Repository).
Un objet du BOR propose des méthodes pour le manipuler. Comme par exemple, une méthode de création :
Derrière cette méthode se cache un module fonction (ce qui n'est pas toujours le cas), et précisément ici un module fonction BAPI.
BAPI est l'acronyme de Business API. Les BAPIs offrent un panel de fonctions permettant de manipuler les objets en ABAP, mais pas seulement. L'avantage d'une BAPI sur une manipulation brute des données en table est qu'elle permet de respecter l'intégrité des données d'une part, mais aussi entre autres de respecter le flux de normal de création en déclenchant les évènements comme le fait SAP en standard. C'est d'ailleurs par le BOR que l'on passe pour faire du workflow.
Le BOR et les BAPIs sont donc liés: une BAPI est liée à un objet du BOR, mais l'inverse n'est pas toujours vrai.
Fort bien, mais à quoi ça me sert tout ça ?
Cela va servir à faire de meilleurs développements en ABAP tout d'abord. Vous devez utiliser au possible les BAPIs existantes et éviter les manipulations de tables. La règle est la même que pour n'importe quel autre langage de programmation: utiliser des APIs et ne jamais réinventer la roue. Si une BAPI manque, il faut réfléchir en terme d'objet, étendre le BOR s'il le faut, et créer des fonctions BAPIs complémentaires en favorisant la ré-utilisabilité.
Cela parait évident, et pourtant dans la pratique on est loin du compte. Bon nombre de développements mêlent sélections, interactions, sauvegardes sans réelle organisation, en s'affranchissant d'un modèle MVC ou 3-tiers.
Mais surtout, une bonne conception va faciliter l'exposition de nos objets SAP, notamment à travers des webservices. Toute la logique métier résidera dans la partie ABAP, et les foncitons de manipulation seront rendues publiques au monde extérieurs via des services.
Notre système SAP devient alors un fournisseur de services, et s'inscrit dans une architecture SOA (Service Oriented Architecture).
Fort bien, fort bien. Ça me parait un peu vague tout ça.
Bien, entrons dans le vif du sujet, créons notre webservice et un programme qui va utiliser ce service.
Pour aller plus loin