Pseudokommentare und Pragmas sind in der Programmiersprache ABAP im Rahmen von ATC-Prüfungen enorm wichtig. Als Programmierer verwendet man Pseudokommentare und Pragmas, wenn man ATC-Warnungen oder -Fehler bewusst akzeptiert. In diesem Artikel möchte ich gerne erläutern, was man unter einem Pseudokommentar und einem Pragma versteht und wie man sie verwendet.
Was ist eine ATC-Prüfung?
Um zu verstehen, was ein Pseudokommentar und ein Pragma sind, muss man vorerst verstehen, was ATC und eine ATC-Prüfung sind.
Die Abkürzung ATC steht für ABAP Test Cockpit. Hierbei handelt es sich um ein Programm für die Analyse von ABAP-Programmen, das mit der Transaktion ATC aufgerufen wird. Ruft man diese Transaktion auf, hat man die Möglichkeit, diverse Aktionen und Einstellungen rund um das ABAP Test Cockpit auszuführen.
In dem Knoten „Befreiungs-Browser“ kann man die Ausnahmen einer ATC-Prüfung genehmigen.
Man hat nun die Möglichkeit, ABAP-Entwicklungen einer ATC-Prüfung zu unterziehen. Dabei werden die ABAP-Objekte anhand einer Prüfvariante untersucht. Im Object Navigator (Transaktion SE80) kann man in der Objektliste die ATC-Prüfung ausführen. Hierzu wählt man mit einem Rechtsklick auf das ABAP-Objekt „Prüfen > ABAP Test Cockpit (ATC)“ oder „Prüfen > ABAP Test Cockpit (ATC) mit …“.
Bei der Funktion „ABAP Test Cockpit (ATC)“ wird das ABAP-Objekt analysiert und untersucht. Die Ergebnisse der ATC-Prüfung werden daraufhin im Anschluss angezeigt. Dabei wird jeder Verstoß der definierten ATC-Regeln in der Liste angezeigt.
Wenn man auf eine Zeile klickt, erhält man in den Details Detailinformationen über den Verstoß der ATC-Prüfung. Klickt man in der Zeile auf den Objektnamen, springt man direkt in den ABAP Editor in die Zeile, in der der Verstoß entsteht. Das ist sehr praktisch, um den ABAP-Code zu analysieren und zu verbessern.
Mit der Funktion „ABAP Test Cockpit (ATC) mit …“ kann man im Tabreiter „Optionen“ die Code-Inspector-Prüfvariante angeben.
Möchte man bspw. den ABAP-Code auf die Kompatibilität auf eine HANA-Datenbank untersuchen, verwendet man die Prüfvariante FUNCTIONAL_DB.
Bei den ATC-Prüfungen gibt es bestimmte Prioritäten. Diese reichen von 1 bis 4. Hierbei stellt die Priorität 1 den schwerwiegendsten ATC-Verstoß dar und muss behoben werden. Meistens kann das Programm nicht ausgeführt werden, wenn diese Fehler nicht behoben werden (z.B. Syntaxfehler). Oft kann man hier keine Pseudokommentare, Pragmas oder Ausnahmen anwenden. Mit aufsteigender Priorität wird die Schwere des Verstoßes geringer. So stellt die Priorität 4 lediglich Warnungen dar, die man mit einem Pseudokommentar, Pragma oder einer Ausnahme akzeptieren kann.
Was ist ein Pseudokommentar?
Ein Pseudokommentar ist ein Kommentar im ABAP-Code, der eine fehlgeschlagene ATC-Prüfung bewusst akzeptiert und umgeht. Das Transportwesen kann z.B. so eingerichtet werden, dass nur bei erfolgreichen ATC-Prüfungen ein Transport freigegeben und damit transportiert werden darf. Das macht auch durchaus Sinn und sollte eingerichtet werden, um die Qualität der ABAP-Programme zu gewährleisten.
Leider kommt es jedoch vor, dass man diese fehlgeschlagenen ABAP-Prüfungen bewusst akzeptieren möchte, da die gewählte Programmierung am besten für den Anwendungsfall ist.
Ein Pseudokommentar wird mit dem Kürzel „#EC eingeleitet. Hierbei gibt es verschiedene Pseudokommentare für verschiedene ATC-Prüfungen.
Pseudokommentare werden oft durch Pragmas ersetzt. Nur die Pseudokommentare für den Code Inspector wurden bisher nicht durch andere Sprachelemente ersetzt.
Es kann unter Umständen vorkommen, dass man eine ABAP-Anweisung mit mehreren Pseudokommentaren versehen möchte. Es ist dabei nur möglich, einen Pseudokommentar pro Zeile zu verwenden. Möchte man also mehrere Pseudokommentare verwenden, muss man die ABAP-Anweisung auf mehrere Zeilen aufteilen.
Man sollte sich immer mit den Warnungen und Fehlern der Programmprüfung auseinandersetzen und nicht willkürlich einen Pseudokommentar, Pragma oder eine Ausnahme anwenden. Vor allem sollte die Anweisung „SET EXTENDED CHECK OFF.“ niemals verwendet werden. Diese ABAP-Anweisung unterdrückt sämtliche Meldungen der erweiterten Programmprüfung für den gesamten Quelltextabschnitt.
Liste der wichtigsten Pseudokommentare
Pseudokommentar | Beschreibung |
---|---|
„EC CI_ALL_FIELDS_NEEDED | Unbenutzte Spalten bei einer SELECT-Abfrage |
„EC CI_CMPLX_WHERE | Komplexe WHERE-Bedingung bei SELECT-Abfrage |
„EC CI_SUBMIT | Ausführbares Programm ausführen |
„EC CI_SEL_NESTED | Verschachtelte Abfragen bzw. Schleifen |
„EC CI_TABL_EXCEPTN | Technische Ausnahme mit Tabelle |
„EC FM_SUBRC_OK | Undefinierter Rückgabecode nach CALL FUNCTION |
„EC CI_FLDEXT_OK | Problem mit Konvertierung von Variablen (z.B. MATNR in SAP S/4HANA) |
„EC CI_SORTED | Nicht sortierte interne Tabelle |
„EC CI_NOORDER | Kein ORDER in SQL-Abfrage |
„EC CI_USAGE_OK | Problem mit Verwendung bzw. Aufruf |
„EC CI_SUBRC | Keine Prüfung auf die Systemvariable sy-subrc |
„EC CI_VALPAR | Parameter wird als Wert und nicht Referenz übergeben |
Beispiel für einen Pseudokommentar
Es gibt verschiedene Pseudokommentare. Pseudokommentare werden nach einer ABAP-Anweisung verwendet. Wenn eine ABAP-Anweisung sich über mehrere Zeilen erstreckt, kann man einen Pseudokommentar am Ende einer Zeile in einer ABAP-Anweisung verwenden. Da es sich bei einem Pseudokommentar auch um einen Kommentar handelt, kann man einen Pseudokommentar nicht in einer ABAP-Anweisung verwenden, da die restlichen Befehle nach dem Kommentar in der Zeile auskommentiert werden.
In diesem Beispiel verwendet man den Pseudokommentar #EC CI_SUBRC. Dadurch akzeptiert man die Warnung, dass man nicht auf die Systemvariable sy-subrc reagiert, nachdem man eine Abfrage auf die Tabelle EKKO durchgeführt hat.
SELECT afnam FROM ekko INTO @lv_afnam WHERE ebeln = @ebeln. "#EC CI_SUBRC IF lv_afnam IS NOT INITIAL. "Mache etwas ENDIF. *************************************** *** Auch möglich, Pseudokommentar am Ende der Zeile, *** aber innerhalb einer Anweisung. *************************************** SELECT afnam "#EC CI_SUBRC FROM ekko INTO @lv_afnam WHERE ebeln = @ebeln. IF lv_afnam IS NOT INITIAL. "Mache etwas ENDIF.
Was ist ein Pragma?
Pseudokommentare sind weitestgehend obsolet und werden durch Pragmas ersetzt. Eine Ausnahme bilden die Pseudokommentare im Code Inspector.
Ein Pragma ist ebenfalls eine Programmdirektive, die sich nicht auf den Programmablauf, sondern auf die Laufzeitumgebung auswirkt. Dabei sollen vor allem Warnungen vor verschiedenen Prüfwerkzeugen ausgeblendet und bewusst akzeptiert werden.
Ein Pragma hat folgenden Aufbau: ##code[par][par]
Dabei ist der Pragma-Code (code) nicht case-sensitive. Das bedeutet, dass er groß- oder kleingeschrieben werden kann. Der Code legt die Wirkung fest und die Parameter (par) grenzen die Wirkung ein. Dabei gibt es obligatorische und optionale Parameter. Die obligatorischen Parameter müssen mit eckigen Klammern angegeben werden. Die optionalen Parameter dürfen angegeben werden oder mit leeren eckigen Klammern oder komplettem Weglassen nicht angewendet werden.
Ein Pragma gilt für die Anweisung, die mit dem nächsten Punkt (.) oder Komma (,) endet. Platziert man ein Pragma vor einem Doppelpunkt (:), also vor einer verketteten Anweisung, gilt das Pragma für die gesamte verkettete Anweisung. Pragmas vor einem Aufruf eines Makros gelten für alle Anweisungen des Makros.
Bei der Verwendung von Pragmas muss man folgende Voraussetzungen beachten:
- Am Anfang einer Zeile nach beliebigen Leerzeichen dürfen Pragmas platziert werden
- Am Ende einer Zeile dürfen nach einem Pragma höchstens ein Punkt (.), Komma (,) oder Doppelpunkt (:) folgen
- Ein Pragma darf nicht hinter einem Punkt (.), Komma (,) oder Doppelpunkt (:) stehen
- Mehrere Pragmas dürfen nacheinander durch Leerzeichen getrennt platziert werden
Werden diese Bedingungen nicht eingehalten, unbekannte Pragmas oder Pragmas mit formalen Fehlern verwendet, entstehen Syntaxwarnungen. Pragmas an der falschen Position werden für die Prüfung von Syntaxwarnungen ignoriert.
Eine Übersicht über alle Pragmas für die erweiterte Programmprüfung erhältst Du mit dem Report ABAP_SLIN_PRAGMAS, der mit der Transaktion SE38 oder SA38 aufgerufen werden kann. Alternativ kann man direkt die Tabelle SLIN_DESC im Data Browser (Transaktion SE16N) untersuchen.
Beispiel für einen Pragma
"Pragma ##NEEDED bei einer verketteten Anweisung DATA ##NEEDED: ls_ekko TYPE ekko, lt_ekko TYPE TABLE OF ekko. "Pragma ##NEEDED DATA: lv_test TYPE string ##NEEDED. "Pragma ##NO_TEXT lv_test = 'Test' ##NO_TEXT. WRITE: / lv_test.
Liste der wichtigsten Pragmas
Pragma | Beschreibung |
---|---|
##CALLED | FORM oder METHOD nicht aufgerufen |
##CATCH_ALL | Ausnahmebehandlung mit CX_ROOT |
##FM_SUBRC_OK | Zugriff auf undefinierten Returncode nach CALL FUNCTION |
##NEEDED | Unbenutzte Datendeklaration |
##NO_TEXT | Hartcodierter Text |
##NO_HANDLER | Keine Ausnahmebehandlung |
Über den Autor
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
ERP UP unterstützen
Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.