Mit ABAP 700 wurden Zeichenketten Templates neu in den Funktionsumfang aufgenommen. Die Templates bietet eine komfortable Alternative zu den bisherigen Literalen, bei denen der Text in Hochkomma eingeschossen wird.
Zeichenketten Templates werden gebildet, indem der eigentliche Text (ohne Hochkomma) mit den Pipe Zeichen | eingeschlossen wird.
Beispiel:
lv_char = |Das ist eine Zeichenkette|. " neuer Weg lv_char = 'Das ist eine Zeichenkette'. " alter Weg
Es können beliebige Zeichen verwendet werden. Innerhalb des Templates lassen sich bestimmte Funktionen nutzen oder Ausgabeformate festlegen. Es gibt einige Steuerzeichen wie etwa { oder \. Sollen diese im Text ausgegeben werden, müssen die Zeichen mit einem vorangestellten \ maskiert werden. Funktionen und Ausgabeoptionen werden immer mit geschweiften Klammern eingeschlossen.
Vorteile:
- eingebettete Funktionen
- diverse Formatoptionen, dadurch keine/weniger CONVERSION_EXITS notwendig
- durch Verwendung eines anderen Symbols (| statt ') klare optische Trennung zwischen Texten und Datenwerten (Variablen, Konstanten)
- Verkettung von Texten und Daten durch Verkettungsoperator && statt durch CONCATENATE
Besonderheit
Neu in ABAP 740 ist die Formatoption ALPHA. Mit ihr können zeichenartige Daten aufbereitet werden, ohne dass CONVERSION_EXIT_ALHPA* verwendet werden muss. Die folgenden Anweisungen führen zum gleichen Ergebnis:
" Neuer Weg über Zeichenketten Template lv_matnr = |{ lv_matnr ALPHA = IN }|. " Alter Weg über CONVERSION EXIT CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lv_matnr IMPORTING output = lv_matnr.
Beispiel
Der folgende Report zeigt die Verwendung von Zeichenketten Templates. Es werden komplexe Templates erstellt, Variablen verkettet und verschiedene (nicht alle) Formatoptionen dargestellt. Zeichenketten Templates eignen sich auch zur Wertzuweisung an einen zeichenartigen Datentyp.
*&---------------------------------------------------------------------* *& Report Z_TEST_STRING_EXPR *& *&---------------------------------------------------------------------* *& *& Zeichenkettentemplates und Formatoptionen (ab ABAP 700) *&---------------------------------------------------------------------* REPORT z_test_string_expr. DATA: lv_matnr TYPE matnr, lv_text1 TYPE char10, lv_text2 TYPE char10, lv_text3 TYPE char30, lv_date TYPE d, lv_number_1 TYPE menge_d, lv_number_2 TYPE menge_d. " Zeichenketten lv_text1 = |Hallo|. lv_text2 = |Welt|. CONCATENATE lv_text1 lv_text2 INTO lv_text3 SEPARATED BY space. WRITE: /(30) |Verketten Standard|, 35 lv_text3. lv_text3 = lv_text1 && lv_text2. WRITE: /(30) |Verketten mit &&|, 35 lv_text3. SKIP 1. WRITE: /(30) |Komplexes Literal|, 35 |Characters \|, \{, and \} have to be escaped by \\ in literal text.|. lv_text3 = lv_text1 && | | && lv_text2. WRITE: /(30) |&& und \| \| |, 35 lv_text3. lv_text3 = |'| && lv_text1 && | | && lv_text2 && |'|. WRITE: /(30) |&& und \|'\| |, "' 35 lv_text3. SKIP 1. lv_matnr = '12345'. WRITE: /(30) |Zeichenkette Standard|, 35 lv_matnr. WRITE: /(30) |ALPHA IN|, 35 |{ lv_matnr ALPHA = IN }|. WRITE: /(30) |ALPHA OUT|, 35 |{ lv_matnr ALPHA = OUT }|. WRITE: /(30) |ALIGN LEFT|, 35 |{ lv_matnr ALIGN = LEFT WIDTH = 18 }|. WRITE: /(30) |ALIGN RIGHT|, 35 |{ lv_matnr ALIGN = RIGHT WIDTH = 18 }|. WRITE: /(30) |ALIGN CENTER|, 35 |{ lv_matnr ALIGN = CENTER WIDTH = 18 }|. WRITE: /(30) |PAD|, 35 |{ lv_matnr ALIGN = RIGHT WIDTH = 18 PAD = '9' }|. WRITE: /(30) |ALIGN CENTER PAD|, 35 |{ lv_matnr ALIGN = CENTER WIDTH = 18 PAD = '9' }|. SKIP 1. " Zahlen lv_number_1 = '1234.456'. lv_number_2 = '-1234.456'. WRITE: /(30) |Nummer Standard|, 35 lv_number_1, 70 lv_number_2. WRITE: /(30) |SIGN LEFT|, 35 |{ lv_number_1 SIGN = LEFT }|, 70 |{ lv_number_2 SIGN = LEFT }|. WRITE: /(30) |SIGN LEFTPLUS|, 35 |{ lv_number_1 SIGN = LEFTPLUS }|, 70 |{ lv_number_2 SIGN = LEFTPLUS }|. WRITE: /(30) |SIGN LEFTSPACE|, 35 |{ lv_number_1 SIGN = LEFTSPACE }|, 70 |{ lv_number_2 SIGN = LEFTSPACE }|. WRITE: /(30) |DECIMALS|, 35 |{ lv_number_1 DECIMALS = 2 }|, 70 |{ lv_number_2 DECIMALS = 2 }|. WRITE: /(30) |CURRENCY|, 35 |{ lv_number_1 CURRENCY = 'EUR' }|, 70 |{ lv_number_2 CURRENCY = 'EUR' }|. WRITE: /(30) |NUMBER RAW|, 35 |{ lv_number_1 NUMBER = RAW }|, 70 |{ lv_number_2 NUMBER = RAW }|. WRITE: /(30) |NUMBER USER|, 35 |{ lv_number_1 NUMBER = USER }|, 70 |{ lv_number_2 NUMBER = USER }|. WRITE: /(30) |NUMBER ENVIRONMENT|, 35 |{ lv_number_1 NUMBER = ENVIRONMENT }|, 70 |{ lv_number_2 NUMBER = ENVIRONMENT }|. SKIP 1. " Datum lv_date = '20150305'. WRITE: /(30) |Datum Standard|, 35 lv_date. WRITE: /(30) |DATE ISO|, 35 |{ lv_date DATE = ISO }|. WRITE: /(30) |DATE USER|, 35 |{ lv_date DATE = USER }|.