STechno

BADIS : Introduction

Avant de commencer, lisez l’article ABAP Objects.

Avantages des BADIs

Les business add-ins sont une extension naturelle des techniques d’extension conventionnelles. Ils reprennent la couche d’administration des exits client, associée à la disponibilité des diverses composantes d’extension.

L’implémentation orientée-objet fournit des opportunités nouvelles. Il est par exemple possible d’effectuer une extension de l’objet ‘Document’. Il est également possible de fournir une nouvelle instance de l’extension pour chaque document individuel.

Le principal avantage de ce concept est la possibilité de réutilisation. Une fois mis en oeuvre, un business add-in peut faire l’objet d’une nouvelle implémentation.
Par ailleurs, une implémentation peut également fournir ses propres add-ins.

Composantes

Un business add-in contient toutes les composantes d’une extension. Actuellement, chaque business add-in peut contenir les éléments suivants :

Dans les futures versions, les autres composantes comprises dans les exits client sont également disponibles comme composantes add-ins.

Lorsque vous définissez un business add-in, vous pouvez créer plusieurs composantes :

La classe générée effectue les tâches suivantes :

Processus

Ce graphique illustre le processus suivi par un programme contenant un appel de business add-in. Non affiché : vous devez déclarer une variable de référence à l’endroit approprié.

Dans la première étape, une classe de service existante, CL_EXITHANDLER, crée une référence d’objet. La syntaxe utilisée est étudiée plus loin. Une fois cette étape effectuée, l’extension de programme peut être utilisée.

Lorsque vous définissez un business add-in, le système crée une classe d’adaptation qui met en oeuvre l’interface. Lors de l’appel (2), la méthode d’interface de la classe d’adaptation est appelée. Cette classe recherche toutes les implémentations des business add-ins et appelle les méthodes mises en oeuvre.

Ce graphique montre la syntaxe que vous utilisez pour appeler un business add-in. Les numéros encerclés correspondent aux appels de la page précédente.

Vous devez tout d’abord définir une variable de référence en référence à l’interface du business add-in. Le nom de la variable de référence ne contient pas nécessairement le nom du business add-in.

Lors de la première étape (1), une référence d’objet est créée. Ceci crée une instance de la classe d’adaptation générée, limitée aux méthodes des interfaces (distribution étroite).

Vous pouvez utiliser cette référence d’objet pour appeler les méthodes requises (2).

Définition d’un business add-in

Pour créer un BADI, utilisez le BAdI Builder (Outils -> ABAP Workbench -> Utilitaires -> Business add-ins -> Définition) (Transaction SE18).

Attributs

Vous devez définir deux attributs importants pour les business add-ins :

Si vous souhaitez que le business add-in prenne en charge plusieurs implémentations parallèles, sélectionnez Réutilisable. La séquence de traitement des implémentations n’est pas définie. Même si le business add-in ne prend pas en charge plusieurs utilisations, vous pouvez toujours lui affecter plusieurs implémentations.

Si vous définissez l’attribut dépendant du filtre pour un business add-in, vous faites dépendre les appels vers ce business add-in de certaines conditions. Vous devez spécifier le type de filtre sous forme d’un élément de données. La table des valeurs du domaine utilisé par l’élément de données contient les valeurs valides pour l’implémentation.

Lorsque la méthode d’extension est appelée, une valeur de filtre doit être transmise à l’interface.

Méthodes d’interface

Le système propose un nom pour l’interface et la classe générée. Vous pouvez, en principe, modifier le nom de l’interface comme vous l’entendez. Cependant, votre business add-in sera plus facile à gérer si vous retenez le nom proposé.

Le nom de la classe générée est construit de la façon suivante :

Préfixe de l’espace nom Z ou Y
CL_ (pour indiquer une classe en général)
EX_ (pour ‘exit’)
Nom du business add-in

Si vous double-cliquez sur le nom de l’interface, le système passe au Class Builder (SE24), dans lequel vous pouvez définir des méthodes d’interface.
Une interface BADI peut avoir plusieurs méthodes d’interface.

Vous pouvez utiliser toutes les fonctions standard du Class Builder. Vous pouvez par exemple :

Si le business add-in est dépendant du filtre, vous devez définir un paramètre d’import FLT_VAL pour chaque méthode. Sinon, vous définissez les paramètres d’interface dont vous avez besoin pour l’extension.

Activation de l’interface

Lorsque vous avez terminé de travailler sur votre interface, vous devez l’activer. Vous générez ainsi la classe d’adaptation du business add-in. Cette classe est automatiquement régénérée à chaque modification de l’interface.

Vous pouvez également générer explicitement la classe d’adaptation à tout moment, en sélectionnant Utilitaires -> Régénérer dans l’écran initial de la transaction de gestion du business add-in.

Programme d’appel

Pour appeler une méthode de business add-in dans un programme applicatif, vous devez inclure trois instructions dans le programme :

  1. Déclarez une variable de référence en référence à l’interface du business add-in (dans notre exemple, exit_ref).
  2. Appelez la méthode statique GET_INSTANCE de la classe de service CL_EXITHANDLER. Le système vous renvoie une instance de l’objet requis. Ceci implique une distribution étroite implicite, de façon à ce que seules les méthodes d’interface de l’objet ayant la variable de référence exit_ref soient accessibles.
  3. Vous pouvez maintenant appeler toutes les méthodes du business add-in. Assurez-vous de spécifier correctement les paramètres des méthodes. Si le business add-in est dépendant d’un filtre, vous devez transmettre une valeur appropriée pour le paramètre FLT_VAL. Si le business add-in possède plusieurs implémentations actives, ces dernières seront appelées dans l’ordre alphabétique.

Implémentation d’un business add-in

Convention d’appellation

BADI : ‘BADI’
Interface : IF_EX_’BADI’
Méthodes : Choix libre
Classe générée du BADI (non modifiable) : CL_EX_’BADI’
Nom d’implémentation : Z’libre’
Classe d’implémentation : ZCL_IM_’libre’

Implémentation : écran initial

Pour l’implémentation de business add-ins, utilisez la transaction SE19 (Outils -> ABAP Workbench -> Utilitaires -> Business Add-Ins -> Implémentation).

Entrez le nom de l’implémentation et sélectionnez Créer. Une boîte de dialogue s’affiche. Entrez le nom du business add-in. L’écran de gestion correspondant s’affiche.

Vous pouvez également utiliser la transaction de définition de business add-ins pour accéder à ses implémentations. Le menu contient une entrée Implémentation, que vous pouvez utiliser pour avoir une vue d’ensemble des implémentations existantes. Vous pouvez également créer de nouvelles implémentations à ce niveau.

Méthodes

Vous pouvez affecter le nom de votre choix à la classe d’implémentation. Cependant, il est conseillé de respecter la convention d’appellation proposée. Le nom proposé est construit de la façon suivante :

Préfixe de l’espace nom, Y ou Z
CL_ (pour classe)
IM_ (pour implémentation)
Nom de l’implémentation

Pour mettre en oeuvre la méthode, double-cliquez sur son nom. Le système lance alors l’éditeur Class Builder.
Lorsque vous avez terminé, vous devez activer vos objets.

Méthodes privées

La classe d’implémentation vous permet de créer vos propres méthodes, que vous appelez à partir de la méthode de l’interface.

Activation

Utilisez l’icône Activer pour activer l’implémentation d’un business add-in. Désormais, les méthodes de l’implémentation seront exécutées en même temps que le programme appelant.

Si vous désactivez l’implémentation, les méthodes ne seront plus appelées. Toutefois, les appels correspondants dans le programme applicatif sont toujours traités. La différence réside dans le fait que l’instance de la classe d’adaptation ne trouvera plus d’implémentations actives. Contrairement à l’appel CALL CUSTOMER-FUNCTION, l’appel CALL METHOD CL_EXITHANDLER=>GET_INSTANCE est toujours exécuté même s’il n’y a plus d’implémentations.

Ce principe est également valable pour l’instruction appelant la méthode de la classe d’adaptation.
Vous pouvez uniquement activer ou désactiver une implémentation dans son système d’origine. Tout changement autre que dans le système d’origine constitue une modification. L’activation ou la désactivation doit être transmise aux systèmes ultérieurs.

Un business add-in ne peut avoir qu’une seule définition, mais plusieurs implémentations peuvent exister dans le même système.