Dans le précédent article nous avions vu les méthodes pour définir des variables de type 'statics' et pour utiliser les import/export en mémoire.

Nous allons maintenant voir comment assigner une zone mémoire et comment utiliser des variables locales dans une classe d'implémentation.

Assigner une zone mémoire :

Quand on est en mode debug dans un programme ABAP, on peut voir toutes les étapes d'exécution de ce programme en cliquant sur 'Appels' ou sur 'Synthèse'. On peut ainsi accéder au code d'un autre module ou d'une autre sous-routine pour connaître les tables internes utilisées et leur contenu.

Lors de l'appel du user-exit qui nous intéresse, on peut assigner à un field-symbol le contenu d'une table interne appelée dans une étape précédente si elle est toujours en mémoire au moment où l'on passe dans le user-exit.

 

Par exemple on a besoin du contenu de la table w_table dans notre user-exit, et cette table n'y est pas utilisée, mais elle est utilisée dans une autre routine du programme SAPLMM06E qui est appelée en amont du user-exit :

NB : les signes "inférieur" et "supérieur" étant considérés comme des balises en HTML mais faisant partie de la définition d'un field-symbol en ABAP, on est obligé de les remplacer par des " " dans cet article, mais dans un programme ABAP on utilisera les signes adéquats.

FIELD-SYMBOLS : "fs" TYPE  ANY.
DATA : w_table_new LIKE ztable OCCURS 0.

ASSIGN ('(SAPMM06E)w_table[]') TO "fs".

IF "fs" IS ASSIGNED.
w_table_new[] = "fs".
ENDIF.

 

Définir des variables dans une classe d'implémentation :

Cette méthode revient au même que la définition de variable de type 'statics' mais s'applique uniquement dans des classes et des méthodes alors que les variables de type 'statics' sont réservées aux user-exit et au routine ou sous-routine classiques.

Il suffit de modifier la classe voulue en lui ajoutant :

- soit un type local via le menu : Saut\Types locaux de classe\Définition locales de classes/types puis en utilisant ce type pour définir une ou plusieurs variables dans la méthode

- soit une variable d'un type prédéfini via le menu : Saut\Section privée.

L'utilisation est ensuite la même que des variables ou des types définis dans le code de la méthode.

L'avantage de la définition locale est que le type ou la variable définis sont valables pour toutes les méthodes de la classe et n'auront pas à être défini dans chaque méthode. De plus, la variable définie en section privée garde sa valeur en fin de méthode si elle n'est pas vidée (comme une variable de type 'statics').