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 :
-
Extensions de programme
-
Extensions de menu
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 :
-
Filtrage : lorsque vous mettez en oeuvre un business add-in dépendant d’un filtre, la classe d’adaptation vous garantit que seules les implémentations pertinentes sont appelées
-
Contrôle : la classe d’adaptation appelle les implémentations actives.
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 :
-
Réutilisable
-
Dépendant du filtre
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 :
-
définir des méthodes d’interface
-
définir des paramètres d’interface pour les méthodes
-
déclarer les attributs de l’interface
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 :
-
Déclarez une variable de référence en référence à l’interface du business add-in (dans notre exemple, exit_ref).
-
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.
-
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.