Étendre une API via BTP, ABAP environment – PARTIE II

Traitement en cours…
Terminé ! Vous figurez dans la liste.

Cet article est le dernier de la série concernant l’API Northwind.

Prérequis : Maitrise du Framework ABAP RESTful Application Programming Model.

Pour rappel, l’objectif était le suivant :

  1. Ajouter un champs « Commentaire » au sein de l’objet RAP qu’il sera possible de modifier (Partie I)
  2. Créer une entité fille « Commandes » qui représentera les commandes associées a ces produits

Dans notre dernier article, nous avions ajouté un champs à l’entité PRODUCT.

Ici, nous allons créer une nouvelle entité, qui correspondra aux commandes liées aux produits disponible dans l’API Northwind. Nous allons ensuite lier ces 2 entités pour permettre aux utilisateurs de créer facilement des commandes associées à ces produits via une application Fiori.

Tout le code contenant la Partie I et la Partie II est disponible sur notre GitLab.

1/ Créer une table de base de données et la CDS associée

Le champs product_id permettra de faire le lien avec les données retournées de l’API.
Les champs order_id et quantity stockeront les données relatives aux commandes ( order_id sera un id généré automatiquement par le Business Object RAP )

Comme nous voulons relier les commandes aux produits associés, nous ajoutons une association to parent entre la CDS qui représente les commandes (ZTEST_CUST_NORTHWIND_ORDER) et celle qui représente les produits (ZTEST_CUST_NORTHWIND).

De plus, comme il s’agit d’une CDS entity et non d’une custom CDS entity, alors il n’y a pas besoin de gérer manuellement la récupération des données. C’est fait par le framework.

2/ Modifier la custom CDS produit

Il suffit d’ajouter la composition vers ZTEST_CUST_NORTHWIND_ORDER

3/ Modifier le behavior definition

On ajoute les informations liées à l’entité COMMANDE.

Comme on veut pouvoir, créer, modifier ou supprimer une commande, on ajoute CREATE-BY-ASSOCIATION (ici, on ne veux autoriser la création d’une commande que depuis un article – il faut accéder à l’article pour créer la commande – On aurait pu ajouter CREATE si on souhaiter donner l’autorisation de crée une commande sans partir d’un article, ici c’est juste un choix pour montrer comment on peut intéragir entre les 2 entités), UPDATE, DELETE.

Enfin, on note que le late numbering est activé, ce qui va nous permettre de gérer la génération automatique de l’id de la COMMANDE (order_id) dans la méthode « ADJUST_NUMBER ».

4/ Modifier le Behavior Implementation

Nous allons modifier le behavior implementation développé dans la classe zbp_test_cust_northwind

1 : Implémenter les méthodes UPDATE, DELETE

On vient créer des entrées dans le buffer ( Ici la variable mt_buffer_update et mt_buffer_delete ) et elles seront sauvegardées plus tard dans la phase de sauvegarde.

On vient également logger les instances modifiées dans le parameter MAPPED

2 : Implementer la méthode CREATE-BY-ASSOCITION (cba_Orders)

Ici, on vient créer des entrées dans le buffer ( mt_buffer_create ) et elles seront sauvegardées plus tard dans la phase de sauvegarde.

On vient également logger les instances crées dans le parameters MAPPED

  • %CID va permettre de retourner les données crées dans la réponse API (en faisant le lien entre les données entrées et le PID généré)
  • %PID est nécessaire car il n’y a pour le moment pas de clés transactionelles unique puisque le champs order_id va être déterminé plus tard dans la méthode ADJUST_NUMBER.
  • Plus d’infos sur les implicit parameters ici

3 : Implementer la méthode ADJUST_NUMBER

On vient lire les lignes crées et on attribut un id unique pour chaque order_id relié à un produit.

On MAPPE ensuite ce nouvel ID en le reliant au %PID précédemment créé avec le nouvel order_id dans le parameter MAPPED.

4 : On update la méthode SAVE

Dans la methode SAVE, on vient traiter les demandes de CREATE-BY-ASSOCIATION/UPDATE/DELETE de notre entité ( donc l’ajout/modification/suppression d’une commande ).

C’est a ce moment qu’on vient mettre a jour la base de données.

5/ Exposer le business object RAP via une API

Créer le Service Definition et le Service Binding

On pourra ensuite utiliser cette API dans une application Fiori dont voici le résultat :

Laisser un commentaire