Ansicht
Dokumentation

ABENAVOIDING_INVALID_VALUES_GUIDL - AVOIDING INVALID VALUES GUIDL

ABENAVOIDING_INVALID_VALUES_GUIDL - AVOIDING INVALID VALUES GUIDL

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

Vermeidung ungültiger Werte

Das ABAP-Laufzeit-Framework überprüft aus Gründen der Performance nicht bei jeder Zuweisung, ob das Zielfeld danach einen gültigen Wert enthält. Insbesondere für Zielfelder des zeichenartigen Datentyps n und der Datums-/Zeittypen d und t erlauben die Konvertierungsregeln beliebige alphanumerische Werte als Ergebnis einer Zuweisung. Gültige Werte sind aber nur die folgenden:

  • für den Typ n ausschließlich Ziffern
  • für den Typ d ein Kalenderdatum im Format "YYYYMMDD"
  • für den Typ t nur eine Uhrzeit im Format "HHMMSS"

Für eine ausführliche Beschreibung der Gültigkeit von Datums- und Zeitfeldern siehe auch den zugehörigen Abschnitt der Dokumentation.

Mit einer verlustfreien Zuweisung kann eine Überprüfung auf gültige Werte erzwungen werden.

Nur gültige Werte zuweisen

Füllen Sie Datenobjekte der Datentypen n, d und t bei Zuweisungen und Berechnungen nur mit gültigen Werten.

Das korrekte Verhalten von Anweisungen, die mit Variablen der Typen n, d und t arbeiten, ist nur bei gültigen Werten garantiert. Wenn mit Datums- und Zeitfeldern gearbeitet wird, sind deren Besonderheiten zu beachten. Insbesondere sollte für Variablen vom Typ d stets ein geeigneter gültiger Startwert über den Zusatz VALUE vorgegeben werden, da der Initialwert selbst kein gültiger Wert ist. Bei arithmetische Berechnungen mit Datumsfeldern ist zu beachten, dass ein Resultat vom Wert 0 bei einer Zuweisung an ein Zielfeld vom Datentyp d ebenfalls den ungültigen Initialwert ergibt, sodass ein solches Ergebnis eventuell besonders behandelt werden muss.

Wenn man das Füllen von Datenobjekten der kritischen Datentypen nicht selbst in der Hand hat empfiehlt es sich immer, deren Inhalt vor der Verwendung auf Gültigkeit hin zu überprüfen. Hierzu dienen verlustfreie Zuweisungen dem Operator EXACT. Dabei ist zu beachten, dass der Initialwert eines Datumsfelds vom Typ d bei einer verlustfreien Zuweisung als gültig, der Wert "00010101" aber nur in als gültiges Datum betrachtet wird.

Folgender Quelltext zeigt eine Falle, in die man bei unbedachtem Umgang mit den Konvertierungsregeln in ABAP tappen kann, wenn man mit Datumsfeldern arbeitet. Die Literale lassen sich, ohne eine Ausnahme zu erzeugen, in die Datumsfelder übertragen und diese enthalten dann die Werte 07092009 und 16092009. Leider handelt es sich um die ungültigen Daten 09.20.0709 und 09.20.1609. Sie werden bei der Berechnung beide in den Wert 0 konvertiert und das Ergebnis ist 0 und nicht 9, wie vom Hinsehen zu erwarten wäre.

DATA: date1  TYPE d,
      date2  TYPE d,
      result TYPE i.
date1 = '07092009'.
date2 = '16092009'.
result = date2 - date1.

Folgender Quelltext zeigt eine Datumsberechnung, die dank gültiger Werte in den Datumsfeldern zum erwarteten Ergebnis 9 führt. Die Gültigkeit der Literalwerte wird durch die Verwendung des Operators EXACT garantiert.

TRY.
    DATA(result) = EXACT d( '20090916' ) - EXACT d( '20090907' ).
  CATCH cx_sy_conversion_no_date.
    ...
ENDTRY.

Folgender Quelltext zeigt, wie die Gültigkeit der Datumsfelder in der Berechnung überprüft werden kann, wenn sie nicht im gleichen Programm versorgt werden. Da der Operator EXACT bei kompatiblen Typen keine Überprüfung vornimmt, werden die Datumsfelder erst in temporäre Textstrings konvertiert und diese überprüft.

TRY.
    result = EXACT d( CONV string( date2 ) ) -
             EXACT d( CONV string( date1 ) ).
  CATCH cx_sy_conversion_no_date.
    ...
ENDTRY.






CL_GUI_FRONTEND_SERVICES - Frontend Services   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5264 Date: 20240523 Time: 152551     sap01-206 ( 90 ms )