====== 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. [[http://sapport.blogspot.fr/2013/11/how-to-read-others-program-data.html|Source]] FIELD-SYMBOLS TYPE ANY. * Pour une variable quelconque ASSIGN ('(PROG)VAR') TO . * Pour un contenu de table ASSIGN ('(PROG)TABLE[]') TO . * 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 . ===== 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 ===== [[http://zevolving.com/2013/04/read-call-stack-to-check-on-called-program/|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'' ).