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

323

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)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP - XCO Bibliotheken

Kategorie - ABAP

Was kannst du mit der Bibliothek in ABAP und ABAP Cloud machen und wie nutzt du die Objekte am besten? Hier erfährst du mehr.

12.11.2024

ABAP - Type Casting

Kategorie - ABAP

Wie kommst du eigentlich an den ursprünglichen Typ einer Klasse bzw. Instanz, wenn diese in einer generischen Tabelle übergeben wird? In diesem Artikel prüfen wir die Möglichkeiten.

16.04.2024

ABAP - RETURN value

Kategorie - ABAP

Nach all den Jahren ist nun endlich der "echte" Return in ABAP angekommen, in diesem Artikel zeigen wir dir, wie der funktioniert und was er kann.

13.02.2024

ABAP Deep Dive - FOR (Schleifen)

Kategorie - ABAP

Schauen wir uns einmal die FOR Schleife etwas näher an. Wie funktioniert sie? Was muss ich beachten und was kann ich damit tun?

14.04.2023

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