User Tools

Site Tools


abap:coding_tips

ABAP tips & tricks

Récupérer une variable d'un autre programme

NB : A priori cette méthode ne fonctionne que pour les variables globales.

Astuce de l'astuce : Pour déterminer le programme d'origine de la donnée et son accessibilité, il est pratique d'utiliser le debugger : vérifier que la variable contient le contenu désiré en remontant dans la stack d'appel puis vérifier que la variable liée au programme ((PROG)VAR) est disponible dans le programme désiré.

Astuce de l'astuce 2 : Appeler un FORM bidon pour provoquer l'exécution du programme principal et pouvoir ainsi récupérer des variables.

Source

FIELD-SYMBOLS <fs> TYPE ANY.
* Pour une variable quelconque
ASSIGN ('(PROG)VAR') TO <fs>.
* Pour un contenu de table
ASSIGN ('(PROG)TABLE[]') TO <fs>.
* Il est évidemment possible de variabiliser :
DATA : var_name TYPE (30)C.
IF cond1.
  var_name = '(PROGX)VAR1'.
ELSE.
  var_name = '(PROGY)VAR2'.
ENDIF.
ASSIGN (var_name) TO <fs>.

Attraper un message d'erreur dans un call function

Il arrive que des modules fonction génère des erreurs directement via des MESSAGE EXXX(foo) plutôt que des RAISE EXCEPTION. Dans ce cas, pour ne pas que tout le process soit interrompu (y compris le programme appelant, quand bien même il serait exécuté par un user technique en background), il faut attraper le message. Par chance le moteur ABAP génère une exception ERROR_MESSAGE à l'appel toute l'instruction MESSAGE EXXX(foo). Il s'agit donc simplement d'ajouter EXCEPTIONS error_message = 1. à l'appel du FM récalcitrant ! (ça marche à tous les coups, même si la signature du FM ne contient aucune exception.)

Attraper un message d'erreur dans un call method

C'est tout simplement pas possible MDR !! Bon y'a tout de même une astuce qui fonctionne : encapsuler l'appel de la méthode dans un MF et catcher l'exception ERROR_MESSAGE… Ninja Style

Lire la stack d'appel en cours d'exécution

Sauce

Le FM SYSTEM_CALLSTACK permet d'accéder à la callstack au runtime. Très intéressant pour savoir qui a appelé votre prog/FM/method, etc.

Afficher un indicateur de progression

Utiliser le FM SAPGUI_PROGRESS_INDICATOR.

Sy-tabix VS Sy-index

Sy-tabix est seté lors d'une lecture de table interne “indexée” (READ TABLE, LOOP AT, APPEND, COLLECT, SEARCH). Ne fonctionne pas sur des tables interne HASHED !

Sy-index est un compteur d'itération (DO, WHILE ).

abap/coding_tips.txt · Last modified: 2018/05/30 10:55 by ginko