Les fonctions
Type de fonction
La fonction ou plus exactement le module fonction est un outil indispensable à la programmation. En effet, il permet d’isoler un traitement spécifique (conversion, récupération d’informations, gestion de données...).
L’éditeur de gestion des fonctions se fait via la transaction SE37. Comme il a été évoqué dans le chapitre Premiers pas sur SAP - Connexion et fenêtre d’accueil, il est possible d’y accéder par ces différents moyens :
-
Depuis n’importe quel écran, en renseignant la transaction dans la zone de commande et en spécifiant si elle doit être exécutée dans une même session (/nSE37) ou dans une nouvelle (/oSE37).
-
À partir de la fenêtre d’accueil, dans le menu SAP par un double clic sur la ligne Function Builder (éditeur de fonctions) ou par un clic droit puis Exécuter : Function Builder.
Menu SAP - Outils - ABAP Workbench - Développement - SE37 Function Builder
L’écran d’accueil de la gestion du module fonction est assez sobre avec un champ pour renseigner la fonction et les trois boutons pour Afficher, Modifier ou Créer.
Module Fonction - Afficher [F7]
Module Fonction - Modifier [F6]
Module Fonction - Créer [F5]
La barre d’outils également n’a pas de grandes nouveautés avec (de gauche à droite) :
-
Contrôler
Module Fonction - Contrôler - Syntaxe [Ctrl][F2]
-
Activer
Module Fonction - Activer [Ctrl][F3]
-
Tester/Exécuter
Module Fonction - Exécuter - Dans l’environnement de test [F8]
-
Cas d’emploi
Utilitaires - Cas d’emploi [Ctrl][Shift][F3]
-
Manuel en ligne
Saut - Manuel en ligne [Ctrl][F8]
-
Supprimer
Module Fonction - Autres fonctions - Supprimer [Shift][F2]
-
Copier...
Module Fonction - Autres fonctions - Copier... [Ctrl][F5]
-
Renommer...
Module Fonction - Autres fonctions - Renommer... [Ctrl][F6]
-
Réaffecter...
Module Fonction - Autres fonctions - Réaffecter... [Ctrl][F7]
Cette dernière fonctionnalité permet d’affecter un nouveau groupe de fonctions au module. Pour comprendre cette notion, il est nécessaire d’avancer un peu dans ce chapitre.
Tout d’abord, il serait intéressant de reprendre l’exemple cité dans le chapitre Dictionnaire de données...
Paramètres et appel de la fonction
Une fonction est un outil technique permettant de traiter des informations selon des paramètres d’entrée, pour en définir de nouvelles dans des paramètres de sortie. Les quatre prochains onglets vont donc lister ces paramètres (Importation, Export, Modification et Tables), puis le cinquième (Exceptions) va gérer les messages de la fonction et enfin Source liste le code ABAP. Pour ce faire, la fonction SD_CUSTOMER_MAINTAIN_ALL (création d’un client) sera choisie, car ayant beaucoup de paramètres, elle mettra bien en évidence les différentes options possibles :
Importation
C’est ici que les paramètres d’entrée sont listés, définis par les informations suivantes :
-
Nom paramètre : libre, mais commence souvent par un I_ (pour importation) ou IV_, IS_... (Importation Variable, Importation Structure...).
-
Catégorisation : peut prendre les valeurs LIKE, TYPE et TYPE REF TO afin de faire référence à un élément de données de type élémentaire (pour le LIKE et TYPE) ou ayant un type de référence à une classe ou une interface lors de l’utilisation de l’ABAP Objet (pour le TYPE REF TO, cf. chapitre Dictionnaire de données (DDIC) - Éléments de données), ou bien à un champ d’une table ou structure, et même faire référence à une structure entière.
-
Type référence : champ d’une table ou structure, ou élément de données.
-
Valeur par défaut : comme son nom l’indique, précise si le champ doit être renseigné par une valeur prédéfinie.
-
Facultative : fixe le paramètre comme optionnel et il n’est donc pas nécessaire de lui attribuer une variable lors de l’appel de la fonction.
-
Passage par valeur : permet ici de transférer la valeur du paramètre dans le paramètre appelant ; cependant, en raison de mauvaises performances, SAP préconise de ne plus utiliser cette option sauf dans le cas d’une fonction RFC où cette case à cocher est obligatoire.
-
Désignation : renseignée automatiquement par la description du champ de la table/structure...
Création d’une fonction
Dans cette mise en pratique, un module fonction sera créé pas à pas. Il s’agira d’une fonction RFC qui créera un nouveau conducteur dans la table de base de données ZDRIVER_CAR.
Tout d’abord, il faut créer le groupe de fonctions. Pour ce faire, exécutez la transaction SE37.
Dans le menu, choisissez l’option suivante :
Saut - Gestion groupes de fonctions - Créer groupe
Entrez le nom du groupe de fonctions comme par exemple ZCARPOOLING.
Entrez une désignation comme ’Covoiturage’.
Dans la nouvelle fenêtre, définissez l’objet en local ou, si vous le souhaitez, utilisez une classe de développement, puis un ordre de transport si besoin.
Une fois le groupe de fonctions créé comme indiqué dans la barre des messages en bas de l’écran, il faudra créer le module fonction.
Dans l’écran initial de la gestion de l’éditeur, renseignez le champ avec le nom de la fonction à créer (par exemple ZDRIVER_CREATE) puis appuyez sur le bouton Créer.
Dans la fenêtre pop-up, entrez le nom du groupe de fonctions créé précédemment, puis une désignation.
Une fenêtre de warning peut apparaître, validez simplement pour passer à l’étape suivante.
Allez dans l’onglet Propriétés.
Comme il s’agit d’un module RFC et donc exécutable à distance, cochez l’option Module accessible à distance.
Dans l’onglet Importation, nous allons avoir besoin d’une structure en entrée avec les informations nécessaires du conducteur et de son véhicule. Pour faciliter, il s’agira d’une structure utilisant la structure ZDRIVER_CAR comme référence. Aussi, comme il s’agit d’une fonction RFC, l’option Passage par valeur est obligatoire.
Dans l’onglet Export, il y aura seulement le numéro d’identification...
Exercice
L’exercice suivant utilisera la table créée dans le chapitre Dictionnaire de données (DDIC), que l’on nommera ZBOOKS dans la suite du livre. Le module fonction sera de type normal, et aura pour finalité d’insérer dans la table ZBOOKS de nouveaux enregistrements définis dans une table en entrée. Une autre table en sortie sera définie afin de retourner le statut de chaque ligne.
1. |
Créez un groupe de fonctions (nom au choix). |
2. |
Créez un module fonction utilisant ce groupe de fonctions (nom au choix également). |
3. |
Paramètres : une table utilisant ZTRAVEL comme modèle de ligne et une table regroupant les messages d’erreurs. Pour ceci, on peut utiliser le type de table BAPIRET2_TT, assez souvent utilisé dans les modules fonctions. Pour simplifier la tâche, trois champs seront utilisés :
|
4. |
Les messages d’erreurs peuvent être du type :
|
5. |
Voir s’il ne serait pas possible d’utiliser des exceptions. |