This is a test message to test the length of the message box.
Login
ABAP Text, String, Template
Erstellt von Software-Heroes

ABAP - Text, String, Template

Wie nutze ich Zeichenketten in der modernen ABAP Entwicklung und wie verhalten sich diese mit Inline-Deklarationen zusammen. Weiterhin schauen wir uns Fehler an, die damit passieren können.

Werbung

In der Vergangenheit musste man bei der Definition und Anlage von Texten weniger Wert auf die richtige Befüllung legen, da die Variablen am Anfang der Methode definiert wurden und der Typ bereits fest stand. Mit Einführung der Inline-Deklaration wird diese Unterscheidung aber immer wichtiger, da sie zu fehlerhaftem Verhalten führen können.

 

Inline-Deklaration

Zur Erinnerung noch einmal ein Beispiel, wie man Variablen über Inline Deklaration anlegen kann. Es gibt noch genug andere Beispiele, hier einmal nur zur Verdeutlichung wie nützlich das Statement ist.

" Loop
LOOP AT lt_table INTO DATA(ls_structure).
ENDLOOP.

" Result from method
DATA(lt_result) = get_some_data_for_me( ).

" Variables
DATA(ld_integer) = 5.

 

Im ersten Beispiel erzeugen wir eine Struktur im Loop, um die Daten zu verarbeiten. Im zweiten Beispiel erhalten wir Daten aus einer Methode und binden die Daten lokal in eine Variable. Im dritten Beispiel erzeugen wir eine Variable über einen Wert. Die Variable erhält im letzten Beispiel sehr wahrscheinlich den Datentyp Integer, die Entscheidung überliegt aber dem System.

 

Zeichenketten

Nun wollen wir einmal eine Zeichenkette per Inline-Deklaration anlegen und prüfen, welcher Datentyp dabei erzeugt wird. Dazu verwenden wir die drei gängigen Methoden für Zeichenketten.

DATA(ld_var1) = 'Text'.
DATA(ld_var2) = `Text`.
DATA(ld_var3) = |Text|.

 

Schauen wir uns nun dazu die Information im Debugger an und welche Datentypen dafür spezifiziert werden.

 

Im ersten Fall wird eine Variable vom Datentyp CHAR erzeugt, die genau 4-stellig ist, so wie der Text der übergeben wird. Im Fall zwei und drei wird jeweils ein 4-stelliger String erzeugt. Wie du siehst, erzeugen verschiedene Weisen auch verschiedene Datentypen.

Wie sollten dann eigentlich Texte erzeugt werden? Dazu gibt es ein Kapitel im Clean ABAP das sich mit dem Thema auseinander setzt. Wenn du ein einfaches String Literal erzeugen willst, dann nutzt du `. Baust du den Text mit Variablen zusammen, dann solltest du | verwenden. Einfach Texte mit dem Pipe zu erzeugen, macht es eher unleserlich.

 

Fehler

Was können nun also für Fehler bei der Verwendung von Literalen auftreten fragst du dich wahrscheinlich? Hier haben wir einmal ein Beispiel für dich:

DATA:
  ld_pos TYPE i VALUE 3.

CASE ld_pos.
  WHEN 1.
    DATA(ld_symbol) = 'ONE'.
  WHEN 2.
    ld_symbol = 'TWO'.
  WHEN 3.
    ld_symbol = 'THREE'.
  WHEN OTHERS.
    ld_symbol = 'OTHERS'.
ENDCASE.

 

In diesem Fall schauen wir uns LD_SYMBOL einmal im Debugger an und was der aktuelle Inhalt der Variable ist.

 

In der Variable steht der falsche Wert, besser gesagt fehlen 2 Zeichen da die Variable als CHAR mit 3 Zeichen Länge definiert wurde. Grund dafür ist die Definition der Variable im ersten CASE, dort wird sie mit einem 3-stelligen CHAR initialisiert und damit wird der finale Typ festgelegt. Die Definition greift an dieser Stelle, auch wenn sie nicht durchlaufen wird. Laut Clean ABAP sollte so ein Variable logischerweise am Anfang der Methode definiert werden und dann bekommt sie wahrscheinlich den passenden Typen, da dieser angegeben werden muss.

 

VALUE

Das VALUE Statement macht ebenfalls noch einmal deutlich, welchen Datentyp es bei der Befüllung möchte. Dieses Beispiel kann man ebenso auf den INSERT anwenden. Zur Befüllung der Zeilen müssen wir das richtige Literal verwenden, sonst beschwert sich auch der Compiler mit einer Fehlermeldung. Dazu nun das entsprechende Beispiel:

DATA:
  lt_char   TYPE STANDARD TABLE OF char4 WITH EMPTY KEY,
  lt_string TYPE STANDARD TABLE OF string WITH EMPTY KEY.

lt_char = VALUE #( ( 'AB' ) ( 'CD' ) ( 'EF' ) ).
lt_string = VALUE #( ( `GH` ) ( `IJ` ) ( `KL` ) ).

 

Fazit

Wie bekommst du den richtigen Datentypen und was unterscheidet die einzelnen Textarten voneinander, dies sollte mit unserem Artikel nun etwas klarer sein. Bei der Nutzung solltest du dir klar machen, wofür du das Literal brauchst und den entsprechenden Typen verwenden.


Enthaltene Themen:
Modernes ABAPCHARStringTemplate
Kommentare (0)

ABAP - SELECT FROM @itab

Kategorie - ABAP

Über eine interne Tabelle selektieren war früher mit vielen Zeilen Code realisiert, heute funktioniert es auch praktisch über den Select.

20.01.2022

ABAP - Predicative Method Call

Kategorie - ABAP

Durch das OO Konzept werden für komplexe Abfragen meist eigene Methoden verwendet. In diesem Artikel geht es um den Vergleich des Ergebnisses aus solchen Methoden.

14.05.2021

ABAP - Performance für den SELECT

Kategorie - ABAP

In diesem Artikel schauen wir uns noch ein paar Spezialfälle mit dem SELECT an und beleuchten die Performance dieser Konstrukte. Wir zeigen dir die aktuellen Alternativen dafür und geben kleinere Tipps beim Lesen.

02.04.2021

ABAP - Objekte prüfen (Instanzen)

Kategorie - ABAP

In diesem Artikel zeigen wir dir, wie du Instanzen analysieren und auf diese korrekt reagieren kannst, wenn du diese zum Beispiel bei einer Verarbeitung übergibst und individuell reagieren möchtest.

19.03.2021

ABAP - Schleifen

Kategorie - ABAP

Mit dem modernen ABAP wurden auch neue Schleifen und Möglichkeiten zur Einschränkung von Tabelleninhalten geschaffen. Diese neuen Befehle schauen wir uns in diesem Artikel näher an.

19.02.2021