Ansicht
Dokumentation

ABENEVALUATION_GUIDL - EVALUATION GUIDL

ABENEVALUATION_GUIDL - EVALUATION GUIDL

General Data in Customer Master   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Auswertung

Systemfelder beschreiben allgemeine Systemzustände oder werden von einzelnen Anweisungen spezifisch gesetzt. Der Inhalt von Systemfeldern ist dabei nur so definiert, wie er in der Dokumentation der Systemfelder oder der Dokumentation von ABAP-Anweisungen, die Systemfelder setzen, beschrieben ist. In anderen als den beschriebenen Kontexten ist der Inhalt von Systemfeldern undefiniert. Insbesondere können Anweisungen, bei denen keine Wirkung auf Systemfelder dokumentiert ist, den Inhalt bestimmter Systemfelder, wie beispielsweise der Rückgabewert sy-subrc, in undefinierter Weise beeinflussen. Dies gilt vor allem für Anweisungen bei deren Ausführung explizit oder implizit ABAP-Coding aufgerufen wird.

Systemfelder an richtiger Stelle auswerten

Werten Sie Systemfelder nur in solchen Kontexten aus, für die sie definiert sind. Falls eine ABAP-Anweisung laut ihrer Dokumentation ein Systemfeld setzt, sollte dieses direkt hinter der Anweisung ausgewertet werden. Systemfelder dürfen hingegen nicht hinter Anweisungen ausgewertet werden, für die keine Wirkung dokumentiert ist.

Ein Systemfeld sollte möglichst direkt hinter der Anweisung ausgewertet werden, die es gesetzt hat, damit es nicht von anderen Anweisungen überschrieben wird. Je größer der Abstand zwischen der betrachteten ABAP-Anweisung und der Auswertung eines Systemfeldes ist, desto größer ist die Gefahr, dass dieses Systemfeld in der Zwischenzeit von einer weiteren Anweisung beeinflusst wird.

Bei Bedarf sollten die Werte von Systemfeldern in Hilfsvariablen gesichert werden. Dies gilt im besonderen Maße für den allgemeinen Rückgabewert sy-subrc, der von besonders vielen verschiedenen Anweisungen gesetzt wird. Weitere gängige Beispiele sind der Schleifenzähler syindex oder der Tabellenindex sy-tabix.

Keinesfalls sollten anweisungsbezogene Systemfelder hinter Anweisungen ausgewertet werden, die diese nach ihrer Dokumentation gar nicht setzen. Ein gängiges Beispiel ist wieder die Auswertung von sy-subrc. Wenn bei einer Anweisung nicht dokumentiert ist, dass sy-subrc definiert gesetzt wird, ist die Auswertung hinter der Anweisung höchst gefährlich. Entweder hat sy-subrc noch den vorherigen Wert oder wird durch die Anweisung undefiniert gesetzt, was beides zu falschem Programmverhalten führen kann. Das schlechte Beispiel im Abschnitt über die erweiterte Programmprüfung zeigt einen solchen Fall.

Hinweis

Die statischen Methoden der Klasse CL_ABAP_SYST geben ebenfalls wichtige Systemzustände zurück. Dabei ist die Gefahr einer vorherigen Überschreibung im Programm ausgeschlossen.

Folgender Quelltext zeigt eine zu späte Auswertung von sy-subrc. Selbst wenn bei den Anweisungen zwischen FIND und IF nicht dokumentiert ist, dass sy-subrc gesetzt wird, kann der Wert dennoch durch Nebeneffekte überschrieben werden.

FIND PCRE ... IN ...
...
... "other statements
...
IF sy-subrc = 0.
   ...
ENDIF.

Folgender Quelltext korrigiert obiges Beispiel, indem sy-subrc direkt nach FIND einer Hilfsvariablen zugewiesen wird, die dann in IF ausgewertet wird. Genauso kann es auch notwendig sein, sy-index oder sy-tabix direkt nach dem Eintritt in eine DO- bzw. LOOP-Schleife einer Hilfsvariablen zuzuweisen.

FIND PCRE ... IN ...
find_subrc = sy-subrc.
...
... "other statements
...
IF find_subrc = 0.
   ...
ENDIF.






SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4279 Date: 20240523 Time: 183606     sap01-206 ( 108 ms )