Introduction à l’ABAP Objet

Historique des langages de programmation
abapoo-1

Programmation analytique
abapoo-2

Les fonctions sont définies indépendamment des structures de données

  • Accès direct aux données
  • Toute modification rend nécessaire de tester à nouveau tous les traitements
  • Les systèmes d’information étaient généralement définies par leurs fonctions : les données et les fonctions étaient stockées séparément et reliées à l’aide de relations entrée–sortie

Utilisation des groupes de fonction
abapoo-3

Lors de l’utilisation d’un groupe de fonction, il y a chargement en mémoire de tout le groupe de fonction avec les modules et les données.

Limite de la programmation analytique
abapoo-4

Si l’on définit un pool de fonction avec 3 fonctions pour définir les comportement d’un compteur : initialisation, incrémentation, récupération.

On peut alors utiliser ces fonctions pour créer et faire vivre un compteur :
abapoo-5

Dans le cas précédent, le résultat donne 7.
Essayons maintenant de créer plusieurs compteurs :
abapoo-6

Dans ce cas, le résultat donne 10.

On se rend compte qu’il est alors impossible d’utiliser des groupes de fonctions si l’on souhaite faire plusieurs appels et créer plusieurs compteurs.

Il faudrait donc pouvoir créer plusieurs instances, plusieurs objets du type compteur.

Programmation orientée objet
abapoo-7

L’orientation objet est basée sur des objets représentatnt des éléments abstraits ou concrets dans le monde réel. Ces objets sont représentés en premier lieu par leurs caractéristiques qui sont mises en correspondances avec la structure interne de l’objet et les attributs (données). Le comportement d’un objet est décrit à l’aide de méthodes et d’évènements (fonctionnalité).

Exemple pratique du compteur
abapoo-8
abapoo-9

Dans ce cas, le premier compteur contient la valeur 7 et le deuxième 10.

Exemples de graphiques SAP

Programme principal : GRDEMO_D
GRBUSG_1 Graph. de présentation, 2D
GRBUSG_2 Graph. de présentation, 3D
GRBUSG_3 Graph. de présentation, matrice 2, 3, 4D
GRBUSG_4 Graph. de présentation, ttes options
GRSTAT_1 Graphique de stat., fonctions trigonométriques
GRSTAT_2 Graphique de stat., repésentation fonctions
GRHIER_1 Graphique en arbre avec menu et dialogue
GRHIER_2 Graphique en arbre avec différents dialogues
GRBMAT_1 Graph.boutons cde av. graph. de présentat
GRBMAT_2 Graph.boutons cde avec menu et dialogue
GRGANT_2 Diagramme de GANTT, planif. interactive
GRHPGL_1 Affichage HPGL
GRPORT_0 Diagramme portfolio

EnjoySAP Demo Center

L’environnement Enjoy Demo Center (Transaction DWDM) vous propose de nombreux programmes et transactions de démonstration, écrits en ABAP et basés sur des techniques de contrôles utilisées depuis la version 4.6.

De nombreuses interfaces utilisateur ont été reconçues pour la version EnjoySAP, notamment l’atelier de développement ABAP Workbench lui-même. Les exemples de démonstration vous montrent comment partager un écran à l’aide des « docking controls » et « splitter controls », comment utiliser les « tree controls » dans les représentations sous forme d’arbre, et ainsi de suite.

En sélectionnant une ligne quelconque de la hiérarchie proposée, vous lancez directement la démonstration. Vous obtenez l’affichage du code source en double cliquant sur les noms des programmes correspondants. Pour demander la documentation relative aux démonstrations, cliquez sur le bouton de commande « i ». Remarque : la hiérarchie de démonstration est gérée par SAP, mais ne peut pas être modifiée.

BADIs : Méthode de recherche

Avant de commencer, lisez l’article BADIs : Introduction.

Il y a différentes façons de rechercher des business add-ins.

  • Recherchez la chaîne de caractères ‘CL_EXITHANDLER’ dans le programme applicatif pertinent.
    Si vous appelez un business add-in à partir du programme, vous devez également appeler la méthode ‘GET_INSTANCE’ de cette classe.
  • Double-cliquez sur la variable de référence et relevez le nom de l’interface utilisée.
  • En utilisant le class Builder (SE24), listez les cas d’emploi de l’interface afin de retrouver la classe de définition du business add-in (CL_EX_BADI).
  • La définition du BADI contient une documentation et un guide pour la mise en oeuvre du business add-in.
  • Vous pouvez également utiliser des outils de recherche.
  • Cependant, vous pouvez aussi utiliser la hiérarchie des applicatons pour limiter la recherche à certaines composantes.
    Lancez le système d’information du Repository, puis sélectionnez Environnement -> Techniques EXIT -> Business Add-Ins pour lancer le programme de recherche pertinent.
  • Vous pouvez également utiliser les entrées pertinentes du guide d’implémentation.

badis_rech-01

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.

badis_intro-01

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
badis_intro-02

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 :

  • Interface
  • Classe générée (adaptateur add-in)

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
badis_intro-03

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.

badis_intro-04

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
badis_intro-05

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

Attributs
badis_intro-06

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
badis_intro-08

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.

badis_intro-08

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
badis_intro-09

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
badis_intro-10

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
badis_intro-11

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
badis_intro-12

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
badis_intro-13

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
badis_intro-14

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.

BADIS : Exercice

Cet exercice va vous permettre d’avoir une vision complète sur l’utilisation des BADIs.

Avant de commencer, lisez les articles suivants :
ABAP Objects
BADIs : Introduction

L’exercice couvre volontairement les deux étapes de définition et d’implémentation du BADI sachant que l’étape de définition est réalisée par SAP.

1-Définition d’un BADI
1.1-Ecran initial
Pour créer un BAdI, utilisez le BAdI Builder (Outils -> ABAP Workbench -> Utilitaires -> Business add-ins -> Définition) (Transaction SE18).
badis_exo-01

1.2-Propriétés
Le nom de la classe d’adaptation du BADI « ZCL_EX_BADI » est généré automatiquement et ne peut être modifié.
badis_exo-02

1.3-Interface
Le nom de l’interface du BADI « ZIF_EX_BADI » est proposé automatiquement. Il peut être modifié mais il est toutefois préférable de garder la logique d’appellation proposée par SAP. Le nom proposé est construit de la façon suivante :

Préfixe de l’espace nom, Y ou Z
IF_ (pour interface)
EX_ (pour exit)
Nom du business add-in
badis_exo-03

-> Pour définir l’interface, double-cliquez sur son nom ou utilisez le Class Builder (SE24).
badis_exo-04

-> Création de la méthode d’interface « USER_EXIT »
badis_exo-05

-> Affectation des paramètres de la méthode « USER_EXIT »
badis_exo-06

1.4-Activation
badis_exo-07

2-Implémentation d’un BADI
2.1-Ecran 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.

badis_exo-08

2.2-Classe d’implémentation

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

Dans le cas de l ‘exemple, le nom proposé pour la classe d’implémentation est « ZCL_IM_BADI »
badis_exo-09

2.3-Méthode d’interface
-> Pour mettre en oeuvre la méthode, double-cliquez sur son nom. Le système lance alors l’éditeur Class Builder (SE24). Lorsque vous avez terminé, vous devez activer vos objets.
badis_exo-10

-> Implémentation de la méthode USER_EXIT de l’interface ZIF_EX_BADI
badis_exo-11

-> Implémentation du code source de la méthode
badis_intro-12

2.4-Activation
-> Une fois l’interface implémentée, vous devez activer tous vos objets.

3-Deuxième implémentation du BADI
-> Le principal avantage des BADIs est la possibilité de réutilisation. Un business add-in peut en effet avoir plusieurs implémentations dans le même système. Dans l’exemple qui suit, nous allons implémenter une deuxième fois le business add-in ZBADI.

-> Implémentation (SE19)
badis_exo-13

-> Implémentation de la méthode USER_EXIT de l’interface ZIF_EX_BADI

4-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, ‘ZIF’).
  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 ‘ZIF’ 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.

Pour tester les implémentations, il suffit d’exécuter le programme ci-dessus et de double-cliquer sur une des lignes affichées.

La première implémentaion affichera le détail du vol sélectionné et la deuxième fera appraître un message d’information.