Solutions de Sécurité & ServicesAtelier ABAP pour débutants 03/06/2010 L. Arzur 2 Solutions de Sécurité & Services Plan Présentation générale ~ 5 min Objets ABAP de base ~ 20 min Instructions ABAP de base ~ 30 min Fonctionnalités ABAP ~ 30 min Navigation ABAP ~ 30 min Le DEBUG ~ 30 min Utile ~ 10 min Pratique ~ 40 min Questions ~ 5 min TOTAL ~ 3 h 20 3 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 4 Solutions de Sécurité & Services Présentation La formation est destinée aux débutants sur le code ABAP et en particulier aux fonctionnels désirant comprendre et analyser ce merveilleux code. Certains passages pourront sembler évidents à certains mais permettent de fixer certaines règles et connaissances nécessaires. Buts de cette formation : Comprendre les bases du code ABAP Maîtriser les éléments essentiels du DEBUG ABAP Savoir utiliser de manière opérationnelle le DEBUG ABAP La formation ne s’attardera pas sur les aspects trop techniques, l’approche étant de donner un vernis ABAP aux non-ABAPeurs. Le contenu de cette formation n’est bien sûr pas exhaustif et invite les personnes intéressés - nombreuses je l’espère! - à approfondir le sujet via des formations plus poussées. 5 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 6 Solutions de Sécurité & Services Objets ABAP de base - Dictionnaire Transaction SE11 Le dictionnaire ABAP concerne les objets élémentaires utilisés par SAP pour stocker et véhiculer les données Table standard : Objet dans lequel sont stockées les données (MARA) Vue : Combinaison de plusieurs tables (VIQMEL) Structure : Même type d’objet que les tables mais ne peut contenir de données Une table est composée de zones liées à un élément de donnée, lui lié à un domaine. 7 Solutions de Sécurité & Services Objets ABAP de base - Dictionnaire Une table SE11 possède toujours des zones clés. Il ne peut pas y avoir plusieurs lignes avec la même combinaison de clés. Les zones clés se situent dans les premières zones de la table et ont la case ‘Clé’ cochée. Il est possible d’enrichir les tables standards avec des éléments spécifiques via l’utilisation d’un APPEND. Les zones de l’APPEND apparaissent en bleu. 8 Solutions de Sécurité & Services Objets ABAP de base - Dictionnaire Exemple table VBAP (Postes de commandes de vente) 9 Solutions de Sécurité & Services Objets ABAP de base - Programmes Transactions SE38/SE80 Standard ou spécifique, le programme manipule les objets du dictionnaire et les fonctionnalités SAP pour modifier ou récupérer des données dans SAP. Un programme peut utiliser tous les objets du dictionnaire ainsi que les modules fonctions, les Includes et les autres objets développés dans SAP. Un Include est un programme qui est forcément appelé par un autre programme : le programme appelant peut alors utiliser les variables et fonctionnalités développées dans l’Include. Un programme, même s’il ne s’agit pas d’un Include, peut être également appelé par d’autres objets SAP. L’organisation du programme en tant que telle sera abordée dans les chapitres suivants. 10 Solutions de Sécurité & Services Objets ABAP de base – Fonctions Transactions SE37/SE80 Fonction ou Module Fonction (MF) : Objets pouvant être appelés et utilisés dans d’autre programmes ABAP. Il est utile de développer une fonction appelée par un programme chapeau plutôt qu’un seul programme dans le cas où la fonctionnalité peut servir à d’autres programmes (exemple : MF de recherche de code article) Le MF contient des paramètres d’Entrées / Sorties permettant de transporter les valeurs de variables d’un programme appelant vers le MF et vice-versa. La programmation est la même que pour les programmes classiques. Il est possible de tester le fonctionnement d’un MF directement et indépendamment d’un programme via la transaction SE37 en renseignant les paramètres appropriés. 11 Solutions de Sécurité & Services Objets ABAP de base – Formulaire Transaction SE71 Un formulaire sert à extraire, visualiser et imprimer des informations de SAP sous une forme facilement compréhensible par un utilisateur final ou un client. Il est lié à un programme d’impression Le programme récupère les données dans SAP et les envoie au formulaire appelé Le formulaire met en forme les données Dans le standard SAP, le formulaire est en général associé à une correspondance (exemple : pour éditer des factures) Il est possible de rajouter une couche Streamserve après la génération du formulaire pour une mise en forme des données hors SAP. 2 principales technologies de développement des formulaires : SAPScript : ancienne techno, peu pratique mais la plus courante SMARTFORMS : techno plus récente, plus robuste 12 Solutions de Sécurité & Services Objets ABAP de base – Exit Transactions CMOD/SMOD Un Exit (ou User-Exit) est un emplacement réservé à du codage spécifique dans un programme standard. Il permet d’éviter en général de modifier le programme standard (très déconseillé) ou de copier le standard. Les Exits sont en nombre limité et mis à disposition à des endroits bien précis dans le standard par SAP : il est donc parfois compliqué de trouver l’Exit se déclenchant au bon moment et mettant à disposition les données dont on a besoin. En général un Exit se présente sous la forme d’un MF appelant un programme Include. Depuis SAP ECC6, il existe des Enhancement Points qui permettent de coder l’équivalent des Exits à des endroits non prévus par SAP. Un Exit doit être lié à un projet SAP et activé via les transactions CMOD/SMOD. 13 Solutions de Sécurité & Services Objets ABAP de base – Autres objets Il existe de nombreux autres objets dans SAP. Ils ne seront pas abordés dans la présentation car destinés à des développeurs confirmés, ci-dessous quelques exemples : BADI (Business Add-In) : Technologie permettant d’ajouter du code dans les programmes standards, même but que les User-Exits transaction SE19). BAPI : Technologie permettant d’intégrer des données dans SAP, fonctionne de la même façon qu’un MF (transaction BAPI). Classe / Méthode : Concerne la programmation par objets, de plus en plus utilisée sur les nouvelles versions SAP (transaction SE24). 14 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 15 Solutions de Sécurité & Services Instructions ABAP de base Le langage ABAP est un langage assez simple : quelques instructions permettent de couvrir la majorité des besoins en programmation. Les instructions les plus utilisées peuvent être décomposées de la façon suivante : Déclarations Sélection des données Traitement des données Écriture des données Aiguillage dans le programme Le langage des instructions est l’anglais. En général une instruction contient 2 balises : Une balise de début Une balise de fin 16 Solutions de Sécurité & Services Instructions ABAP de base Les commentaires sont précédés du caractère * ou " et apparaissent en bleu. Une instruction ABAP finit toujours par un point. Il est possible d’avoir une aide sur une instruction ABAP en positionnant la souris sur l’instruction et en tapant F1 à partir de la transaction SE38. En plus des instructions décrites dans ce document, il est bien sûr possible d’utiliser un grand nombre d’instructions classiques de codage (opérations arithmétiques, comparaisons, …). 17 Solutions de Sécurité & Services Instructions ABAP de base - Déclarations Il existe de nombreux objets utilisés dans les programmes ABAP. Les principaux sont les suivants : Table standard : déclarer une table standard dans le programme permet d’utiliser la structure de cette table interne pour stocker des informations Table interne : objet contenant plusieurs lignes de structure identique Structure : objet structuré ne contenant qu’une ligne Variable globale : zone à une dimension du type élément de donnée pouvant être utilisée dans tout le programme Variable locale : zone à une dimension du type élément de donnée pouvant être utilisée dans une partie du programme uniquement Paramètres / Select-Options : variables de l’écran de sélection Attention : il existe des règles de nommage pour toutes ces variables (cf. règles de nommage du client concerné) 18 Solutions de Sécurité & Services Instructions ABAP de base - Déclarations Exemple pour déclarations 19 Solutions de Sécurité & Services Instructions ABAP de base - Déclarations Point sur table interne La table interne est décomposée en 2 parties : La Working Area (WA) : structure de travail permettant de stocker des informations de manière temporaire Les lignes : elles correspondent aux lignes réellement stockées dans la table interne L’instruction APPEND permet de transférer les valeurs de la Working Area vers les lignes et donc de stocker ces valeurs. Si l’APPEND n’est pas fait, les données de la WA ne seront pas mémorisées. L’instruction CLEAR appliquée à une table interne permet de vider la WA. L’instruction REFRESH permet de vider la totalité des lignes de la table interne. 20 Solutions de Sécurité & Services Instructions ABAP de base - Déclarations Écran de sélection Résultat après exécution 21 Solutions de Sécurité & Services Instructions ABAP de base – SELECT SELECT : permet de sélectionner des données SAP contenues dans une table standard / spécifique ou une vue. SELECT P1 INTO P2 FROM P3 WHERE P4 P1 : zones à récupérer dans la table standard / spécifique ou vue * signifie qu’il faut récupérer toutes les zones P2 : variable où stocker les données récupérées INTO TABLE XXXX signifie qu’il faut les stocker dans la table interne XXXX Il est possible de les stocker dans une variable simple également P3 : nom de la table standard / spécifique ou vue P4 : condition de sélection Restriction de la sélection par rapport aux critères de sélection (P, S/O) Il existe d’autres options pour cette instruction mais celles mentionnées ci- dessus sont les principales. 22 Solutions de Sécurité & Services Instructions ABAP de base – READ READ : permet de lire une ligne de table interne suivant certaines conditions. La ligne retournée se trouve dans la working area de la table interne. READ TABLE P1 WITH KEY P2 = P3 P1 : table interne à lire P2 : zone de la table interne à tester P3 : valeur de la zone de table interne à tester READ TABLE P1 INDEX P2 P1 : table interne à lire P2 : numéro de ligne de la table interne à lire Il existe d’autres options pour cette instruction mais celles mentionnées ci- dessus sont les principales. 23 Solutions de Sécurité & Services Instructions ABAP de base – LOOP LOOP : permet de boucler sur les lignes d’une table interne. La ligne lue se trouve dans la working area de la table interne. LOOP AT P1. … ENDLOOP. P1 : table interne sur laquelle boucler Entre le LOOP et le ENDLOOP, les instructions portent sur la ligne en cours de lecture. Il existe d’autres options pour cette instruction mais celles mentionnées ci- dessus sont les principales. 24 Solutions de Sécurité & Services Instructions ABAP de base – MOVE / WRITE MOVE / WRITE : permet de transférer une valeur ou la valeur d’une variable vers une autre variable. MOVE transfère la valeur en brut alors que WRITE transfère la valeur avec son format. WRITE / MOVE P1 TO P2. P1 : paramètre source à transférer P2 : paramètre cible vers lequel transférer la valeur Il existe d’autres options pour cette instruction mais celles mentionnées ci- dessus sont les principales. 25 Solutions de Sécurité & Services Instructions ABAP de base – CLEAR / REFRESH CLEAR : permet de vider la valeur d’une zone variable. Dans le cas d’une table interne, cela permet de vider la working area. REFRESH : permet de vider la totalité d’une table interne. CLEAR P1. P1 : variable à vider REFRESH P1. P1 : table interne à vider 26 Solutions de Sécurité & Services Instructions ABAP de base – APPEND APPEND : permet dans le cas d’une table interne de transférer la working area vers les entrées de la table interne. Si un APPEND n’est pas fait après avoir alimenté la working area, les données ne seront pas stockées dans la table internes car écrasées par la prochaine alimentation de la working area. APPEND P1. P1 : table interne à alimenter Il existe d’autres options pour cette instruction mais celles mentionnées ci- dessus sont les principales. 27 Solutions de Sécurité & Services Instructions ABAP de base – MAJ TABLE Les commandes suivantes concernent les mises à jour de table de données standards ou spécifiques accessibles via SE11. UPDATE : modifie une entrée de table si la clé demandée existe MODIFY : modifie ou insère une entrée de table INSERT : insère une entrée dans la table. Il ne doit pas exister d’entrée avec la même clé dans la table. DELETE : supprime une entrée dans la table MODIFY P1. P1 : table SE11 à modifier Il existe d’autres options pour ces instructions mais celles mentionnées ci- dessus sont les principales. 28 Solutions de Sécurité & Services Instructions ABAP de base – CALL FUNCTION CALL FUNCTION : permet d’appeler un module fonction dans un programme ou dans un autre module fonction. Un module fonction possède plusieurs paramètres d’échange avec le programme appelant. CALL FUNCTION P1 EXPORTING P2 = P3 IMPORTING P4 = P5 TABLES P6 = P7. P1 : nom de la module fonction tel qu’il est défini dans le transaction SE37 P2/P3 : noms de zones et valeurs à transférer en entrée du MF P4/P5 : noms de zones et valeurs à récupérer en sortie du MF P6/P7 : noms de tables et tables à échanger avec le MF 29 Solutions de Sécurité & Services Instructions ABAP de base – CALL FUNCTION ATTENTION : Les paramètres en EXPORTING correspondent aux paramètres d’entrée du MF et qui sont exportés depuis le programme appelant vers le MF Les paramètres en IMPORTING correspondent aux paramètres de sortie du MF et qui sont importés vers le programme appelant vers le MF Si le programme appelant n’utilise pas tous les paramètres obligatoires du MF, un DUMP se produit. Il est possible d’utiliser la fonction ‘Modèles’ dans l’éditeur ABAP pour récupérer les paramètres du MF : Après validation, l’appel du MF est intégré dans le code du programme appelant avec les paramètres facultatif en commentaires. 30 Solutions de Sécurité & Services Instructions ABAP de base – PERFORM PERFORM : permet d’appeler une routine dans un programme. Cette routine est forcément définie dans le programme appelant ou dans un Include appartenant au programme appelant. Elle est définie par l’instruction suivante : FORM P1. … ENDFORM. et appelée par l’instruction PERFORM P1. P1 : nom de la routine. Il est conseillé de donner un nom explicite à la routine. Il est également conseillé d’utiliser de nombreuses routines dans un programme pour modulariser le programme par fonctionnalités et améliorer la lisibilité du code. 31 Solutions de Sécurité & Services Instructions ABAP de base – AUTHORITY-CHECK AUTHORITY-CHECK : permet d’effectuer un contrôle d’autorisation dans un programme. AUTHORITY-CHECK OBJECT P1 ID P2 FIELD P3. P1 : nom de l’objet d’autorisation P2 : nom du paramètre de l’authority-check P3 : valeur à tester pour le paramètre L’instruction renvoie un code retour via la zone SY-SUBRC en fonction de l’objet testé, des paramètres renseignés et des autorisations définies pour le user de connexion. Si le SY-SUBRC = 0, le user est autorisé, sinon il n’est pas autorisé. Il est ensuite possible de continuer ou arrêter le traitement. 32 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 33 Solutions de Sécurité & Services Fonctionnalités ABAP Les programmes ABAP peuvent être utilisés pour remplir plusieurs types de fonctionnalités, dont voici les principales : Reporting Intégration Extraction Modification de fonctionnement standard 34 Solutions de Sécurité & Services Fonctionnalités ABAP - Reporting Un report est un affichage des données issues de SAP. Il s’appuie en général sur les tables standards et spécifiques. Il peut avoir 2 formes principales : Classique (instruction WRITE) et surtout destinée à des compte-rendus d’exécution simples ALV (Abap List Viewer / utilisation de MFs standards) pour affichage du type EXCEL (avec tris, filtres,…), à conseiller pour du reporting complexe destinée à des utilisateurs finaux. 35 Solutions de Sécurité & Services Fonctionnalités ABAP - Intégration Un programme d’intégration sert à mettre à jour des données dans SAP. Les données peuvent être issues de SAP ou d’un autre système (SAP ou non) via un échange de fichiers. Le programme peut être utilisé dans le cas d’une interface entrante ou d’une reprise de données. Il est important de prévoir pour ce type de programme la possibilité d’être exécuté en avant-plan ou en arrière-plan via une variante de sélection. Il faut également prévoir un compte-rendu d’exécution avec entre autres les objets standards SAP intégrés ou modifiés. 36 Solutions de Sécurité & Services Fonctionnalités ABAP - Intégration Il existe plusieurs techniques d’intégration de données, dont les principales sont : Le CATT : il ne s’agit pas d’un programme ABAP mais d’un scénario de test reproductible. Une fois défini pour une intégration via la transaction SCAT, il est possible de l’utiliser pour un fichier comportant plusieurs intégrations. Le DIRECT INPUT : cela consiste à mettre à jour directement les tables standards SAP (via UPDATE). C’est très déconseillé voire interdit car cela contourne les contrôles standards de zones SAP et peut corrompre les bases de données… Le BATCH INPUT : ancienne méthode d’intégration toujours utilisée. Il s’agit d’un programme ABAP mais qui simule un enchaînement d’écrans tel que le ferait l’utilisateur (comme dans un CATT). Les dossiers de BATCH INPUT créés sont soit exécutés en direct lors de l’exécution du programme, soit de manière désynchronisée via la transaction SM35. Cette technique n’est pas pérenne sur les transactions de type ENJOY et peut poser des problèmes en arrière-plan. 37 Solutions de Sécurité & Services Fonctionnalités ABAP - Intégration La BAPI : il s’agit d’un objet SAP semblable aux MF. En paramètres on renseigne les différentes structures nécessaires à la création ou modification de l’objet SAP à intégrer et la BAPI s’occupe de créer ou modifier l’objet. Technique robuste et conseillée. L’IDOC : il s’agit d’un échange de données informatisées (EDI). L’IDoc peut être utilisé au sein d’un même système ou avec un autre système. Un IDoc correspond à un objet à créer ou modifier. La transaction principale de gestion des IDocs est la WEDI. Technique de plus en plus utilisée et imposée par certains échanges entre entreprises pour ses avantages de traçabilité des informations. Cette technique est robuste et offre la possibilité de suivre toutes les intégrations de manière assez directe même si cela peut s’avérer assez technique. 38 Solutions de Sécurité & Services Fonctionnalités ABAP - Extraction Une extraction ressemble à un reporting mais permet d’envoyer les données récupérées à l’extérieur de SAP, via la création d’un fichier de sortie par exemple. Le format du fichier de sortie peut être dicté par le système qui utilisera par la suite le fichier mais est en général le format EXCEL ou .CSV. Le fichier de sortie peut être déposé par le programme sur un serveur local (ex : disque C du PC physique) ou sur le serveur SAP (répertoires via transaction AL11). Remarque importante : Si le programme est exécuté en arrière-plan, il est impossible de déposer le fichier sur un serveur local. 39 Solutions de Sécurité & Services Fonctionnalités ABAP – USER EXIT Les USER EXIT permettent d’intégrer du code spécifique dans le code standard SAP. Ils doivent être activés via les transactions CMOD/SMOD. D’autres techniques permettent d’effectuer ce type d’adaptations du standard (BADI, ENHANCEMENT POINTS sur ECC6…). Les EXITs permettent d’éviter les modifications de programmes standards (très déconseillées!). Il nécessitent une bonne connaissance de l’ABAP et des flux sur lesquels intervenir car il peuvent perturber fortement le fonctionnement standard prévu par SAP. Une attention particulière devra être portée au passage en Production de USER-EXITS. 40 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 41 Solutions de Sécurité & Services Navigation ABAP Il existe plusieurs transactions permettant de visualiser le code ABAP (SE38/SE37) mais la principale et la plus complète est la SE80. Elle permet de visualiser facilement tous les objets utilisés par le programme. Il existe dans l’éditeur ABAP de nombreuses options très utiles pour naviguer dans le programme ainsi que certaines fonctions essentielles au développement. Remarque : pour ne pas avoir l’air ridicule devant un développeur, n’utilisez pas la transaction SA38 : il s’agit d’une SE38 très allégée!! 42 Solutions de Sécurité & Services Navigation ABAP Transaction SE80 43 Solutions de Sécurité & Services Navigation ABAP : Contrôle du programme. Permet de vérifier si le programme respecte les règles de syntaxe du langage ABAP. En cas d’erreur de syntaxe un message apparaît en bas de l’écran. Un double-clic sur le message renvoie sur la ligne de code en erreur. : Activation du programme. Cette action contrôle dans un premier temps le programme puis l’active si aucune erreur n’est détectée. Un programme non actif ne peut être utilisé. Le statut d’activation apparaît à côté du nom du programme. 44 Solutions de Sécurité & Services Navigation ABAP : Break-point. Permet de mettre un point d’arrêt dans le programme, i.e lors d’une exécution du programme le traitement s’arrêtera sur ce point d’arrêt en mode debugger (voir chapitre DEBUG). Le point d’arrêt est propre à l’utilisateur Pour mettre le point d’arrêt, il suffit de positionner le curseur sur la ligne de code concernée puis de cliquer sur le bouton. La ligne apparaît alors surlignée à l’écran. : Pretty Printer. Permet de changer la mise en forme du code ABAP du programme pour le rendre plus facile à comprendre en fonction des règles syntaxiques de l’ABAP. Cette fonction ne change en rien le fonctionnement du programme mais en change l’aspect visuel. 45 Solutions de Sécurité & Services Navigation ABAP : Exécution. Permet de lancer le programme en avant-plan. Fonction également accessible par la touche F8. En renseignant une partie du nom du programme par le caractère * et en cliquant sur la flèche, SAP nous renvoie tous les programmes ayant la partie demandée dans leur nom. 46 Solutions de Sécurité & Services Navigation ABAP : Recherche. Attention il faut utiliser l’icône située tout en haut de l’écran et pas juste au dessus du nom du programme. L’icône ouvre un POP-UP qui permet de rechercher une chaîne de caractères dans le programme. Possibilité de remplacer cette chaîne par une autre Possibilité de rechercher la chaîne dans le programme en cours ou dans le programme principal (conseillé) Le résultat est un affichage de toutes les occurrences de la chaîne recherchée, possibilité de cliquer sur la chaîne bleutée pour accéder au code. 47 Solutions de Sécurité & Services Navigation ABAP En double-cliquant sur les routines, modules fonctions, Include appelés dans le programme principal, SAP renvoie le curseur sur l’objet appelé. : Un clic sur les flèches bleus permet de revenir sur le positionnement précédent du curseur. : Un clic sur ces flèches permet de revenir en arrière sur la dernière action effectuée ou de la ré-itérer. 48 Solutions de Sécurité & Services Navigation ABAP Ci-dessous quelques objets liés au programme Macros : Permettent d’effectuer quelques opérations de code simples et répétitives. Attention, ne peut être debuggé. Dynpro : Ecran ABAP Modules PBO / PAI : Définissent les actions précédant l’apparition de l’écran (Process Before Output) ou consécutives à son apparition (Process After Input) Statut GUI : Définition des actions liées à l’écran (boutons SAVE/BACK/…) Titres GUI : Titre de l’écran 49 Solutions de Sécurité & Services Navigation ABAP Penser à modulariser le programme lors de la phase de développement. Cela consiste à organiser le programme en Includes et routines pour le rendre plus lisible et simple à comprendre. Exemple : Include pour les déclarations Include pour les routines 1 routine par fonctionnalité Lorsque l’on arrive sur un programme via l’éditeur, il doit être possible de comprendre immédiatement ce qu’il fait et si possible de visualiser l’algorithme sur une page d’éditeur. Il faut également commenter le programme : commentaires courts et explicites. Modularisation + commentaires = facilité de compréhension pour la TMA = Indicateurs au vert!! 50 Solutions de Sécurité & Services Navigation ABAP Exemple de programme modularisé et commenté : 51 Solutions de Sécurité & Services Navigation ABAP Il faut décomposer le programme en blocs à l’aide des instruction : INITIALIZATION : bloc d’initialisation des variables du programme START-OF-SELECTION : Début des sélection END-OF-SELECTION : Fin des sélections 52 Solutions de Sécurité & Services Navigation ABAP Pour identifier une table ou une zone à utiliser dans un programme, il suffit de positionner le curseur sur la zone en question dans le document SAP de cliquer sur F1 puis F9 ou F1 puis ‘Info technique’ L’écran suivant apparaît et donne les informations concernant le programme et la zone en question 53 Solutions de Sécurité & Services Navigation ABAP - Versions Une version de programme correspond à la génération d’un ordre de transport (OT) contenant des créations ou modifications liées à l’objet. Après chaque libération d’un OT sur le système de recette, SAP demande de créer un nouvel OT. Les versions sont visualisables via les menus de la transaction. 54 Solutions de Sécurité & Services Navigation ABAP - Versions La version dans la BD de développement correspond à la version en cours de modification et non libérée Les autres versions correspondent à l’historisation des anciennes versions libérées. Par double-clic sur un OT puis sur l’icône , on accède au journal des transports avec tous les transports sur les machines SAP ainsi que les statuts de ces transports. 55 Solutions de Sécurité & Services Navigation ABAP - Versions : Comparaison de versions. En cochant 2 versions et cliquant sur ce bouton, SAP compare les versions et affiche les différences. 56 Solutions de Sécurité & Services Navigation ABAP - Versions : Permet de comparer la version en cours avec un autre environnement SAP (ex : Recette, Production). Un POP-UP permet de choisir le système auquel comparer puis lance la comparaison. Utile pour identifier un écart entre environnements et détecter un oubli d’OT lors d’un transport. : Récupération de version. Permet de revenir sur une version antérieure de l’objet. Cette fonction remet l’objet dans l’état dans lequel il était lors de l’OT récupéré et écrase toutes les modifications des OTs suivants. 57 Solutions de Sécurité & Services Navigation ABAP - SAPScript Un formulaire SAPScript est accessible et modifiable via SE71. Un formulaire est composé de pages, permettant de définir la succession des pages lors de l’impression. Chaque page contient des fenêtres (exemple : une fenêtre pour le titre, une autre pour l’adresse du destinataire,…). Les fenêtres peuvent contenir des éléments. La fenêtre appelée MAIN contient des données sous forme de liste de longueur variable. Par exemple la liste des postes pour une facture. Si le nombre de postes dépasse la taille de la page, SAP déclenche une nouvelle page. Le code à l’intérieur du formulaire est sensiblement différent de l’ABAP s’il s’agit d’un formulaire SAPScript : il est situé à l’intérieur des fenêtres. Pour information la séquence /* indique un commentaire. 58 Solutions de Sécurité & Services Navigation ABAP - SAPScript Exemple de formulaire SAPScript: 59 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 60 Solutions de Sécurité & Services Le DEBUG Le debugger SAP est l’outil indispensable du développeur ABAP. Il peut également permettre à un fonctionnel de résoudre un certain nombre d’anomalies et de compléter l’analyse fonctionnelle. Ce chapitre sera uniquement axé sur le debugger des versions antérieures à ECC6. Le debugger ECC6 est relativement différent en termes d’ergonomie mais les fonctionnalités principales sont les mêmes. Pour information, il est possible dans ECC6 de revenir sur le debugger classique. La seule façon de bien maîtriser le debuggage SAP est de pratiquer. 61 Solutions de Sécurité & Services Le DEBUG – Accès au DEBUG L’accès au DEBUG peut se faire de différentes manières. La plus simple est d’écrire le code /h à la place de code transaction avant d’effectuer l’action à debugger. Il est possible de positionner un point d’arrêt dans le programme lui- même via SE38/SE37/SE80 (cf. Navigation ABAP). Le traitement s’arrêtera alors sur le point d’arrêt et laissera à l’utilisateur la possibilité de debugger le programme partir de ce point d’arrêt. Le bouton point d’arrêt est le suivant : Glisser-déposer le fichier DEBUG suivant sur la fenêtre à debugger. Très utile dans le cas d’un debugging de POP-UP pour lequel il n’est pas possible d’utiliser la commande /h. DEBUG 62 Solutions de Sécurité & Services Le DEBUG – Accès au DEBUG Certains programmes standards sont des programmes dits ‘Système’. Pour identifier si un programme est ‘Système’, il suffit de vérifier les propriétés via SE38 Pour ce type de programmes, il est nécessaire d’activer le Debugging système pour rendre possible le debug et les points d’arrêts. 63 Solutions de Sécurité & Services Le DEBUG – Ecran DEBUG Ecran DEBUG Navigation Code ABAP Valeurs zones Structure SYST 64 Solutions de Sécurité & Services Le DEBUG – Ecran DEBUG Navigation (F5) : Mode pas à pas. Permet d’exécuter le code ligne par ligne. (F6) : Permet d’exécuter le code ligne par ligne sans rentrer dans les portions de code appelées via MF / routine / autres programmes. (F7) : Retour. Permet de revenir dans le programme appelant lorsque l’on se trouve dans le programme appelé (routine / MF/…). (F8) : Continuer. Permet d’exécuter le code d’une seule traite jusqu’au prochain point d’arrêt ou la fin du programme le cas échéant. 65 Solutions de Sécurité & Services Le DEBUG – Ecran DEBUG Navigation : Un point de surveillance est un point d’arrêt particulier qui permet de n’arrêter l’exécution du programme que lorsqu’une variable a pris une valeur particulière. Cette fonction est très utile pour détecter une occurrence particulière dans une boucle sans pour autant exécuter toutes les occurrences en pas à pas. Arrêt lorsque la variable WT_TAB1-VBELN a pour valeur 0195002610 66 Solutions de Sécurité & Services Le DEBUG – Ecran DEBUG Navigation La barre de navigation permet de changer les zones à afficher dans l’écran du bas. Il est en particulier possible de visualiser et éventuellement supprimer les points d’arrêts / surveillance. L’affichage le plus utile reste l’affichage par défaut : Zones. 67 Solutions de Sécurité & Services Le DEBUG – Ecran DEBUG Code ABAP Cet écran affiche le code ABAP en cours de DEBUG. Les points d’arrêts sont visibles par une icône Il est possible de supprimer ou rajouter un point d’arrêt en double-cliquant sur la ligne de code. Les flèches permettent de naviguer dans le code ABAP pour éventuellement positionner de nouveaux points d’arrêt. Il est également possible d’utiliser les touches PGUP et PGDWN du clavier. 68 Solutions de Sécurité & Services Le DEBUG – Ecran DEBUG Valeurs zones Cet écran permet d’afficher les valeurs des variables du code ABAP. Pour le faire il suffit de renseigner le nom de la zone dans la première colonne ou de double-cliquer sur la zone concernée dans le code ABAP. Dans cette version du debugger, il est possible de visualiser jusqu’à 8 zones. : disponible pour les tables internes, permet de visualiser toutes les entrées de la table interne. : Permet de modifier la valeur d’une variable pendant le DEBUG (cf. rubriques suivantes) 69 Solutions de Sécurité & Services Le DEBUG – Ecran DEBUG Structure SYST La structure SYST (ou SY) est une structure standard SAP. Structure alimentée et mise à jour tout au long du traitement. Elle contient des zones systèmes permettant d’avoir des informations sur le traitement et son déroulement. Exemple de zones : SY-SUBRC : code retour d’instruction. Si elle vaut 0, le traitement est OK et a fonctionné tel que demandé. Ce code est souvent testé dans les programme pour identifier par exemple si une sélection a renvoyé un résultat. SY-TABIX : renvoie le numéro de ligne en cours dans une boucle de traitement. SY-UNAME : renvoie le user qui exécute le traitement SY-DATUM : renvoie la date système SY-REPID : renvoie le nom du programme en cours d’exécution Il est très important de tester cette structure dans le programme (en particulier le SY-SUBRC) et de suivre son évolution lors d’un DEBUG car elle contient de nombreuses informations utiles. 70 Solutions de Sécurité & Services Le DEBUG – Modif DEBUG Il est possible de modifier la valeur de variables pendant un DEBUG. Cette option est configurable (ADMIN SAP) et est en général désactivée dans les environnements productifs. Cette fonctionnalité peut se révéler très utile car elle permet de changer des données issues de SAP dans le DEBUG pour aiguiller le traitement da la manière souhaitée. Il suffit de changer la valeur de la zone dans le DEBUG puis cliquer sur le crayon de modification : Par exemple : contournement autorisations Dans un programme, un authority-check est mis en place pour empêcher la suite d’un traitement si l’on n’y est pas autorisé. Le traitement s’arrête si le code retour SY-SUBRC renvoyé par l’authority- check est différent de 0. Il suffit de positionner un point d’arrêt sur le test du SY-SUBRC et de forcer la valeur à 0. Le traitement continuera alors comme si le contrôle avait été OK. 71 Solutions de Sécurité & Services Le DEBUG – Export tables internes Lorsqu’une table interne comporte de nombreuses lignes, il est difficile de l’analyser dans l’écran DEBUG. Il est alors utile de l’exporter sous EXCEL pour identifier les lignes et valeurs qui nous intéressent. Cette fonction permet de visualiser et analyser facilement les données d’une table interne en dehors du debugger. Cela permet éventuellement de stocker les valeurs pour les comparer à d’autres par la suite. 72 Solutions de Sécurité & Services Le DEBUG – Export tables internes Il faut dans ce cas double-cliquer sur la table interne en question. Dans l’écran DEBUG, éditer la structure Dans le nouvel écran, éditer toute la liste Enfin, sauvegarder la liste dans un fichier local, exploitable par un utilitaire type EXCEL. 73 Solutions de Sécurité & Services Le DEBUG – DEBUG Formulaires Un formulaire SAPScript ne se debug pas de la même manière. Il faut activer le DEBUG formulaire via SE71. Ensuite, lorsque le formulaire est appelé, le DEBUG formulaire apparaît. Ce debugger est relativement complexe et peu intuitif, donc réservé à des initiés… 74 Solutions de Sécurité & Services Le DEBUG – Conseils Il est nécessaire, avant de se lancer dans un DEBUG, de visualiser le code du programme afin d’en identifier les grandes fonctionnalités et éviter d’être perdu lors du DEBUG. Il est conseillé de positionner les points d’arrêts sur des lignes de code stratégiques avant de se lancer dans un DEBUG : cela permettra de gagner du temps. Un debug peut être relativement long et nécessiter de nombreux passages afin de déterminer le bout de code à analyser. Lorsque l’on rajoute un point d’arrêt dans le code via l’écran de DEBUG, il faut penser à cliquer sur la disquette de sauvegarde pour que le point d’arrêt soit conservé pour la prochaine exécution. Dans cette version du DEBUG, un point d’arrêt est lié au user qui l’a activé. Lorsque l’on se déconnecte, les points d’arrêt sont perdus. Pour qu’un point d’arrêt soit pris en compte, il faut quitter et relancer le programme ou la transaction à debugger. 75 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 76 Solutions de Sécurité & Services Utile – Lexique ABAP : Allgemeiner BerichtsAufbereitungsProzessor / Advanced Business Application Programming ALV : Abap List Viewer, techno ABAP pour créer un report de type EXCEL BADI : Business Add-In, adaptation du standard BAPI : Business Application Programming Interface, fonction d’intégration Batch : arrière-plan, par extension job en arrière-plan Break Point : Point d’arrêt BTCI : Batch-Input CATT : Computer Aided Test Tool CSV : Comma Separated Values, format de fichier avec séparateur virgule (point virgule pour les versions françaises) EDI : Echange de Données Informatisées IDoc : Intermediate DOCument MF : Module Fonction ou Fonction 77 Solutions de Sécurité & Services Utile – Lexique OT : Ordre de Transport PAI : Process After Input, pour dynpro ABAP PBO : Process Before Output, pour dynpro ABAP SAP : Systeme, Anwendungen und Produkte in der Datenverarbeitung / Systems, Applications, and Products for data processing 78 Solutions de Sécurité & Services Utile – Programmes utiles RGUGBR00 : Activation des règles de validations et substitutions FI RPR_ABAP_SOURCE_SCAN : Recherche dans programmes RSTRANSP : Transports variantes de programmes RSTXSCRP : Import / Export de formulaires RSTXTRAN : Transport textes standards RSTXPDFT4 : Conversion spool en PDF RV80HGEN : Activation des routines et dispositions de type VOFM Z_DOWN_PROG : Export programmes en HTML sur TAV WW (VD3) 79 Solutions de Sécurité & Services Utile – Transactions utiles ABAPDOCU : Documentation ABAP ABAPHELP : Aide ABAP AL11 : Gestion des répertoires SAP CG3Z / CG3Y : Import / Export de fichiers entre PC local et serveur SBWP : Sap Business WorkPlace, contient l’historique des objets SCMP : Comparaison de tables (utile pour les comparaisons de tables de CUSTO ente environnements SAP) SE03 : Recherche d’OTs par objets, description,… SE11 : Dictionnaire ABAP SE15 : Recherche d’objets SE16N : Utilitaire de modification de tables (dangereux…) SE30 : Analyse du temps d’exécution SE37 : Editeur de modules fonctions 80 Solutions de Sécurité & Services Utile – Transactions utiles SE38 : Editeur ABAP SE71 : Editeur SAPScript SE80 : Editeur ABAP complet SE91 : Recherche de messages SE93 : Recherche de transactions SEARCH_SAP_MENU : Recherche de menu SAP SM13 : Entrées de blocage SM37 : Suivi des jobs d’exploitation SM51 : Journal système ST05 : Trace système ST22 : DUMPs SU01 / SU01D : Gestion des users SU53 : Dernier contrôle d’autorisation effectué sur le user de connexion WEDI : Transaction chapeau de la gestion des IDocs 81 Solutions de Sécurité & Services Utile – SE30 SE30 sert à analyser les performances d’un programme ou transaction. Cela peut être très utile pour effectuer une première analyse d’optimisation. Rentrer le nom du programme à tester puis exécuter Exécuter le programme comme en réel. Revenir en arrière avec la flèche verte jusqu’à l’écran initial de la SE30. 82 Solutions de Sécurité & Services Utile – SE30 Cliquer sur ‘Analyser’ L’analyse montre la répartition du temps de traitement. ABAP concerne le code en lui-même Base de donnée concerne les sélections de données Système R/3 concerne le temps de traitement SAP Un clic sur le bouton liste dans l’ordre les opérations les plus coûteuses en temps de traitement. Il est ensuite plus facile de faire une optimisation efficace. 83 Solutions de Sécurité & Services Utile – SE93 Utile pour connaître le programme standard ou spécifique utilisé par une transaction. Cette transaction peut s’avérer utile pour contourner les autorisations dans certains cas. En effet de nombreux contrôles d’autorisations sont rattachés à la transaction et pas au programme appelé, il suffit donc parfois d’exécuter directement le programme et non la transaction. Exemple SM51 84 Solutions de Sécurité & Services Utile – SE16N Transaction d’affichage et modification de tables SE11, y compris les tables standards. Renseigner le nom de la table et le code &sap_edit ( + éventuellement des critères de sélection), valider pour faire apparaître un message en bas de l’écran puis exécuter. Vous pouvez alors modifier les données de la table. 85 Solutions de Sécurité & Services Utile – SE16N Toutes les modifications sont listées dans la table SE16N_CD_KEY. En cas de problèmes d’autorisations sur la SE16N, il est possible d’utiliser le MF SE16N_INTERFACE. Attention : à manipuler avec une très grande précaution. 86 Solutions de Sécurité & Services Utile – IDocs La transaction générale des IDocs est la WEDI, qui permet d’accéder à toutes les transactions liées au IDocs. Les transactions les plus utiles sont les WE02 (sélection et visualisation des IDocs) et WE19 (permet de rejouer un IDoc). Dans le cas où un document SAP est généré ou a généré un IDocs, il est possible de visualiser l’IDoc en question directement à partir de l’objet SAP. 87 Solutions de Sécurité & Services Utile – Liens utiles Merry\Affaires\AMS_SAP_RUN\Z 99 - Capitalisation https://www.sdn.sap.com http://sap.ittoolbox.com 88 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions 89 Solutions de Sécurité & Services Pratique – Mon premier programme ABAP Cahier des charges Extraction des commandes de ventes ABAP (VA03) Possibilité de sélectionner uniquement certaines commandes Exemple : commandes de 195002610 à 196003610 Restriction de la sélection sur les commandes créées depuis le début de l’année 2010 Reporting en sortie avec 4 colonnes : Numéro de commande SAP Numéro de commande client Numéro de poste SAP FLAG Si la quantité d’ordre au niveau du poste de commande est supérieur à 2, FLAG = SUP, sinon FLAG = NO 90 Solutions de Sécurité & Services Pratique – DEBUG1 JIRA : TAV-10001 Programme : ZFORM_ABAP1 Variante : ZVAR01 Problème : Pour la commande 195004233, la quantité totale dans le report n’est pas bonne : le report affiche une quantité de 11 alors qu’elle devrait être de 21. ZPL 195002610 à 196003610 91 Solutions de Sécurité & Services Pratique – DEBUG2 JIRA : TAV-10002 Programme : ZFORM_ABAP2 Variante : ZVAR02 Problème : Le programme ne fonctionne pas. Job arrière-plan exécuté par user BTCADMIN Tout est OK sauf commande 195003564 manquante en sortie 92 Solutions de Sécurité & Services Pratique – DEBUG3 JIRA : TAV-10003 Programme : ZFORM_ABAP3 Variante : ZVAR03 Problème : Le programme dure trop longtemps, il faudrait l’optimiser. 93 Solutions de Sécurité & Services Pratique – Programmes Vous trouverez ci-joint les programmes utilisés pour la pratique du DEBUG : Le fichier ci-dessous est une solution proposée pour le programme du chapitre ‘Mon premier programme ABAP’ : Fichier WinZip Fichier WinZip 94 Solutions de Sécurité & Services Plan Présentation Objets ABAP de base Instructions ABAP de base Fonctionnalités ABAP Navigation ABAP Le DEBUG Utile Pratique Questions