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.

  • 🧩 Principe de base : Une unité de modularisation est générée comme si son code source était physiquement présent dans le programme appelant, ce qui améliore la structure sans coût d'exécution.
  • | Macro: Définie avec DEFINE et END-OF-DEFINITION, utilisable uniquement à l'intérieur du programme qui la définit, et uniquement après la ligne de définition.
  • 📄 Inclure le programme : Elle ne comporte aucune interface de paramètres et existe uniquement pour partager du code source, comme de longues déclarations de données, entre plusieurs programmes.
  • (I.e. Sous-programme : Déclarée avec FORM et ENDFORM, appelée avec PERFORM, et adaptée à une logique réutilisée localement au sein d'un même programme.
  • 🧱 Module de fonction : Une routine système avec une interface typée pour l'importation, l'exportation, la modification des paramètres de table et les exceptions.
  • 📦 Groupe fonctionnel : Un conteneur dont les données globales sont partagées par chaque module fonctionnel qu'il contient, généré automatiquement avec ses inclusions TOP et UXX.
  • 🧭 Règle de sélection : Choisissez une macro pour les raccourcis locaux, une sous-routine pour la logique locale et un module de fonction lorsque la routine doit être réutilisable dans tout le système.

Modularisation en ABAP

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

  1. 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.
  2. 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

  1. Accédez à la transaction SE80.
  2. Sélectionnez Programme dans la liste déroulante.
  3. É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.
  4. 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

  1. Créez un groupe de fonctions (dites « ZCAL »).
  2. Créez un module de fonction, définissez les attributs tels que (Groupe de fonctions, Application, Texte court et Type de processus) et enregistrez.
  3. Le fichier d'inclusion « LZCALU01 » aura le code source du premier module fonction.
  4. Inclure le fichier « LZCALTOP » contiendra des données globales.
  5. 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.. »
  6. Définir les paramètres d'interface et les exceptions
  7. Écrivez le code source
  8. Activer le module de fonction
  9. Test du module de fonction – Test unique et débogage
  10. 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.

FAQ

Une macro est développée lors de sa génération et ne fonctionne qu'à l'intérieur du programme qui la définit. Une sous-routine est une véritable procédure dotée d'une interface de paramètres typés, qui peut également être appelée depuis un autre programme avec l'instruction PERFORM.

Un module fonctionnel dont le type de traitement est défini sur Module activé à distance peut être appelé depuis un autre SAP système ou provenant d'une application externe. Ses paramètres doivent être passés par valeur, et les exceptions sont traitées comme des défaillances système.

Il est impossible d'exécuter une macro pas à pas dans le débogueur, car elle est développée avant sa génération. Pour un débogage ligne par ligne, déplacez la logique dans une sous-routine ou une méthode et limitez les macros à des instructions courtes.

Les assistants de code IA intégrés aux outils de développement ABAP peuvent générer la structure d'un module fonction, son interface de paramètres et ses exceptions à partir d'une simple description. Un développeur vérifie ensuite la logique, active le module et le teste avant le transport.

Les outils d'IA analysent un programme, détectent les blocs répétés et suggèrent où une sous-routine, une méthode ou un module de fonction devrait être inséré.tracCette suggestion accélère la refactorisation, bien que les tests unitaires restent nécessaires pour confirmer un comportement identique.

Résumez cet article avec :