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 Deep Dive - Tabellenzugriff (intern)

Kategorie - ABAP

Schauen wir uns in diesem Artikel einmal den Tabellenzugriff auf interne Tabellen an und wie sie den READ TABLE ablösen.

03.02.2023

ABAP - FINAL

Kategorie - ABAP

In diesem Artikel schauen wir uns einmal das neue FINAL Sprachkonstrukt an, wie es funktioniert und was du damit anstellen kannst.

23.12.2022

ABAP Deep Dive - VALUE

Kategorie - ABAP

In diesem Artikel wollen wir uns noch einmal das Value Statement in allen Ausprägungen anschauen und wie du es in deiner täglichen Arbeit nutzen kannst.

11.11.2022

ABAP - Common Table Expression (CTE)

Kategorie - ABAP

In diesem Artikel wollen wir uns einmal den allgemeinen Tabellenausdruck WITH anschauen und wie du ihn im Alltag nutzen kannst.

28.10.2022

ABAP Deep Dive - CORRESPONDING

Kategorie - ABAP

In diesem Artikel einmal etwas mehr über das neue Corresponding Statement und wie man es im Detail einsetzen kann. Dabei schauen wir einmal auf die zusätzlichen Features.

16.09.2022