Modularisation ABAP : modules de macro, de sous-programme et de fonction
⚡ Résumé intelligent
La modularisation en ABAP consiste à organiser une séquence d'instructions en une unité réutilisable que le programme principal appelle simplement. Cette page explique les macros, les programmes d'inclusion, les sous-programmes, les modules de fonction et les groupes de fonctions, en présentant la syntaxe, des exemples et les critères de sélection de chaque technique.

Qu'est-ce que la modularisation en ABAP ?
Lorsque vous modularisez du code source, vous placez une séquence d'instructions ABAP dans un module. Ensuite, au lieu d'inclure toutes ces instructions dans votre programme principal, vous appelez simplement le module. Lors de la génération du programme, le code source contenu dans l'unité de modularisation est traité comme s'il était physiquement présent dans le programme principal.
Besoin de modularisation
- Améliorer la structure du programme.
- Facile à lire le code
- Facile à maintenir le code
- Évite la redondance et favorise la réutilisation du code
Diverses techniques de modularisation
- Utilisation de macros
- Utilisation de fichiers d'inclusion
- Sous-programmes
- Modules fonctionnels
Examinons chacun d'eux en détail :
SAP-Macro ABAP
Si vous souhaitez réutiliser le même ensemble d'instructions plusieurs fois dans un programme, vous pouvez les inclure dans une macro.
Vous ne pouvez utiliser une macro que dans le programme où elle est définie, et elle ne peut être appelée que dans les lignes du programme qui suivent sa définition.
Les macros peuvent être utiles pour les calculs longs ou les instructions WRITE complexes.
Syntaxe
DEFINE <macro_name> 'Macro Statements END-OF-DEFINITION
Les macros peuvent utiliser des paramètres &N où N = 1,2,3…
Exemple:-
DATA: number1 TYPE I VALUE 1. DEFINE increment. ADD 1 to &1. WRITE &1. END-OF-DEFINITION. Increment number1. WRITE number1.
Sortie: 2
Une macro est développée à la compilation au sein d'un seul programme. Lorsqu'un même code doit être partagé entre plusieurs programmes, on utilise un fichier d'inclusion.
Inclure des programmes
Les programmes d'inclusion sont uniquement destinés à la modularisation du code source et n'ont pas d'interface de paramètres.
Les programmes d'inclusion permettent d'utiliser le même code source dans différents programmes. Ils peuvent s'avérer utiles si vous avez de longues déclarations de données que vous souhaitez utiliser dans différents programmes.
Syntaxe
Include <include program Name>
Note à noter
- Les programmes d'inclusion ne peuvent pas s'appeler eux-mêmes.
- Les programmes à inclure doivent contenir des instructions complètes.
Exemple :
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
Les programmes inclus partagent du code mais ne peuvent pas recevoir de paramètres. Les sous-programmes ajoutent cette interface de paramètres manquante.
Sous-programmes
Les sous-programmes sont des procédures que vous pouvez définir dans n'importe quel Programme ABAP et également appeler depuis n'importe quel programme. Les sous-programmes sont normalement appelés en interne, c'est-à-dire qu'ils contiennent des sections de code ou des algorithmes fréquemment utilisés localement. Si vous souhaitez qu'une fonction soit réutilisable dans tout le système, utilisez un module fonction.
Syntaxe-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= Nom du sous-programme
= Paramètres transmis
Types de sous-programmes
- Interne
- Sous-programme défini dans le même programme appelé.
- Peut accéder à tous les objets de données déclarés dans le programme principal ABAP/4.
- Externe
- Sous-programme défini en dehors du programme appelé.
- Il faut utiliser le option ou déclarer des objets de données dans les parties communes de la mémoire.
Appel d'un sous-programme
Sous-programmes internes
PERFORM <subroutine> [<pass>]
= Nom du sous-programme
= Paramètres transmis
Les données déclarées dans le programme principal sont automatiquement disponibles.
Sous-programmes externes
PERFORM <subroutine>(<Program>) [<pass>]. PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND]. PERFORM (<subroutine>) IN PROGRAM (<Program>) [<pass>] [IF FOUND]. PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].
Note à noter
- Les appels imbriqués sont autorisés dans les sous-programmes (c'est-à-dire PERFORM dans un FORM … ENDFORM ).
- Des appels récursifs sont également possibles.
- Pour définir des données locales, utilisez l'instruction DATA après FORM . Chaque fois que vous entrez dans le sous-programme, les données sont recréées (avec une valeur initiale) et libérées à la fin (de la pile).
- Pour définir les données globales utilisées dans un sous-programme, utilisez l'instruction LOCAL après FORM . Les valeurs sont enregistrées lorsque vous entrez dans le sous-programme puis relâchées à la fin (depuis la pile)
Astuce : Les sous-routines sont considérées comme obsolètes dans ABAP Objects. Les nouveaux développements doivent placer la logique réutilisable dans les méthodes d'une classe et utiliser des modules de fonction lorsqu'une interface distante ou système est requise.
Modules fonctionnels
Les modules de fonction sont des routines ABAP/4 à usage général que tout le monde peut utiliser. En fait, il existe un grand nombre de modules de fonctions standards disponibles.
Les modules de fonctions sont organisés en groupes de fonctions : collections de fonctions logiquement liées. Un module fonction appartient toujours à un groupe de fonctions.
Syntaxe-
FUNCTION <function module> <Statements> ENDFUNCTION.
Informations importantes associées au module de fonction
- Administration
- Paramètres d'importation/modification/exportation.
- Paramètres/exceptions du tableau.
- Documentation
- Code source – L U01. est le groupe de fonctions
- Données globales – L TOP .Données globales pour le groupe de fonctions - Accessibles à travers les modules de fonction du groupe de fonctions.
- Programme principal – SAPL . Contient la liste de tous les fichiers d'inclusion pour ce groupe de fonctions
Appeler un module fonction
Pour appeler un module fonction, utilisez l'instruction CALL FUNCTION :
CALL FUNCTION <module> [EXPORTING f1 = a 1.... f n = a n] [IMPORTING f1 = a 1.... f n = a n] [CHANGING f1 = a 1.... f n = a n] [TABLES f1 = a 1.... f n = a n] [EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E] [OTHERS = ro]].
Chaque module de fonction réside à l'intérieur d'un groupe de fonctions ; la section suivante explique donc comment fonctionne ce conteneur.
Groupes de fonctions
Les groupes de fonctions sont des conteneurs pour les modules de fonctions. En fait, il existe un grand nombre de groupes de fonctions standards.
Tous les modules fonction d'un groupe de fonctions peuvent accéder aux données globales du groupe.
Comme les programmes exécutables (type 1) et pools de modules (type M), les groupes de fonctions peuvent contenir des écrans, des écrans de sélection et des listes.
Note à noter
- Les groupes de fonctions ne peuvent pas être exécutés.
- Le nom d'un groupe de fonctions peut comporter jusqu'à 26 caractères.
- Lorsque vous créez un groupe de fonctions ou un module fonction, le programme principal et les programmes d'inclusion sont générés automatiquement.
- Les groupes de fonctions encapsulent les données.
Comment créer un groupe de fonctions
- Accédez à la transaction SE80.
- Sélectionnez Programme dans la liste déroulante.
- Écrivez le nom du groupe de fonctions que vous souhaitez créer. Généralement, les groupes de fonctions créés par l'utilisateur commencent par « Z ». par exemple - . Appuyez sur la touche Entrée.
- Notez que l'inclusion TOP est créée par défaut si l'utilisateur coche l'option de création d'une inclusion TOP.
Comment créer un module fonction
- Créez un groupe de fonctions (dites « ZCAL »).
- Créez un module de fonction, définissez les attributs tels que (Groupe de fonctions, Application, Texte court et Type de processus) et enregistrez.
- Le fichier d'inclusion « LZCALU01 » aura le code source du premier module fonction.
- Inclure le fichier « LZCALTOP » contiendra des données globales.
- Programme principal "SAPLZCAL » contient
- Données globales Inclure le fichier « LZCALTOP »
- Les modules fonctionnels incluent le fichier « LZCALUXX »
- Fichiers d'inclusion définis par l'utilisateur « LZCALF.. », « LZCALO.. » et « LZCALI.. »
- Définir les paramètres d'interface et les exceptions
- Écrivez le code source
- Activer le module de fonction
- Test du module de fonction – Test unique et débogage
- Documenter et publier un module fonction
Comment choisir la bonne technique de modularisation
Les quatre techniques se chevauchent, la décision dépend donc de l'étendue de la réutilisation et de la nécessité d'une interface de paramètres.
| Technique | Portée de la réutilisation | Interface de paramètres | Meilleur utilisé pour |
|---|---|---|---|
| Macro | Un programme, après la ligne de définition | Espaces réservés positionnels &1 à &9 | Instructions courtes et répétées, calculs longs, sortie WRITE complexe |
| Inclure le programme | Tout programme qui nomme l'inclusion | Aucun | Déclarations de données partagées et code source partagé |
| Sous-programme (FORM) | Local ou externe avec PERFORM… IN PROGRAMME | UTILISATION, MODIFICATION, TABLEAUX | Logique fréquemment réutilisée au sein d'un même programme |
| Module fonctionnel | Système complet, y compris les appels à distance | IMPORTATION, EXPORTATION, MODIFICATION, TABLES, EXCEPTIONS | Routines partagées entre les applications et encapsulées dans un groupe de fonctions |
Une règle simple permet de couvrir la plupart des cas : utiliser une macro pour les raccourcis au sein d’un même programme, une inclusion pour les déclarations partagées, une sous-routine pour la logique locale et un module fonction lorsque la routine doit être appelable depuis n’importe quel point du système. Voilà pour la modularité en ABAP.
