Zeichenketten-Templates

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Siehe Neues ABAP (ab Release 7.40).

Siehe Schlüsselbefehl Concatenate und Verknüpfung über &&, Schlüsselbefehl Split.

"Zeichenketten-Templates" sind eine moderne Alternative zum Schlüsselbefehl "Concatenate" und Verknüpfung über "&&". Sie können ab ABAP-Release 7.02 verwendet werden.

Der gesamte String wird durch ein Pipe (|) umschlossen. Jede Variable wird mit "{ <variable> }" umschlossen, mit jeweils einem Space zwischen der geschweiften Klammer und der Variablen. Man kann auch mit den Verkettungsoperatoren "&" oder "&&" arbeiten. Dann wird jeder Verkettungsteil mit "|" umschlossen. Das ist auch meine Empfehlung.

Funktionalität Zeichenketten-Templates

Ausgabe Literale

  • Literale werden hier nicht wie sonst gewohnt durch ein einfaches Anführungszeichen umschlossen.
lv_ziel = |Test und Beispiel|.

Ausgabe Variable

  • Variablen werden mit einer geschweiften Klammer umschlossen. Zwischen der Klammer und der Variablen ist ein Leerzeichen zu setzen.
lv_ziel = |{ lv_zahl }|.

Ausgabe Kombination Literal und Variable

lv_ziel = |Return-Code: { sy-subrc }|.

Übersetzungsrelevanter Text

  • Texte in Zeichenketten-Templates zu übersetzen, ist wenig intuitiv. Man kann sich über Textelemente behelfen, wobei man dann allerdings nicht mehr direkt den Text dahinter sieht.
lv_ziel = |{ text-001 }|.
  • Man könnte es dann so schreiben, um übersetzungsrelevanten Text zu haben und auch sprechenden Text
lv_vbeln_prot = |{ text-010 } { <fs_upload>-vbeln } { text-011 }|.  "'Anlieferung <fs_upload>-vbeln existiert nicht.'

Nutzung Funktionen

  • Sehr elegant ist, dass man in Zeichenketten-Templates auch Funktionen direkt nutzen kann ohne Hilfsvariablen zu definieren.
  • Etwas konzentrieren muss man sich hier bei der korrekten Setzung der Klammern.
lv_ziel = |{ strlen( lv_variable )}|.

Ausgabe formatiertes Währungsfeld

lv_ziel = |{ lv_wert CURRENCY = lv_waerk }|.

Rechnen mit Variablen

  • Bei Zeichenketten-Templates kann man sich oftmals die Deklaration von Hilfsvariablen sparen.
  • Man kann innerhalb des Ausdrucks mit Variablen rechnen.
lv_ziel = |{ lv_zahl - 1 }|.

Spezielle Konvertierungen

ISOLA-Konvertierung (Sprachschlüssel)

  • Intern speichert SAP den Sprachschlüssel in einem einstelligen Feld von der Domäne SPRAS, wo z. B. "D" (Deutsch) steht. In sehr vielen SAP-Feldern gibt man jedoch den Sprachschlüssel zweistellig ein, z. B. "DE" (Deutsch). Hier konvertiert der Konvertierungsschlüssel ISOLA von einstellig in zweistellig und umgekehrt.

Alpha-Konvertierung

  • Die Alpha-Konvertierung ist ab ABAP 7.40 SP 2 möglich
  • Sehr bequem ist auch die Alphakonvertierung, die man vorher z. B. mit dem Overlay-Befehl machen konnte.
  • "ALPHA = IN" fügt zu einer Variable die führenden Nullen hinzu entsprechend der Länge des Typs.
  • "ALPHA = OUT" entfernt aus einer Variable die führenden Nullen. Allerdings verbleibt entsprechend der Länge des CHAR-Feldes für die Nullen die White-Spaces. Das kann optisch unschön aussehen in einem Zeichenketten-Template mit mehreren Bestandteilen. Hier im Beispiel fällt es beim Material auf, was im Feld MATNR eine Länge von 40 Zeichen hat.
i_text      = |Position { <fs_zolltarif>-posnr ALPHA = OUT } Material { <fs_zolltarif>-matnr ALPHA = OUT } Zolltarifnummer fehlt|

Zeichenkettentemplate2.jpg

  • Mit dem Parameter WIDTH kann die Länge der Ziffernfolge bestimmt werden.
  • Im Folgenden ist die Variable "LV_MATNR" typisiert als MATNR (C40).
DATA: lv_matnr TYPE matnr.

lv_matnr = '42'.

lv_matnr = |{ lv_matnr ALPHA = IN }|.   "Ausgabe: 0000000000000000000000000000000000000042

lv_matnr = |{ lv_matnr ALPHA = OUT }|.  "Ausgabe: 42
lv_matnr = |{ lv_matnr ALPHA = IN WIDTH = 10 }|.   "Ausgabe: 0000000042

Es ist allerdings nicht möglich einen beliebigen Konvertierungsexit einzugeben. Folgendes Coding gibt beim Vesuch der Verwendung vom Konvertierungsexit MATN1 einen Syntaxfehler

DATA: lv_matnr TYPE matnr.

lv_matnr = '42'.

lv_matnr = |{ lv_matnr MATN1 = IN }|.  "Syntaxfehler

Zeichenkettentemplate1.jpg

Vor- und Nachteile Zeichenketten-Templates

  • Zeichenketten-Templates sind innerhalb des zu bildenden Templates sehr flexibel und man spart sich oft die Definition von Hilfsvariablen.
  • Es ist jedoch abzuwägen, ob das Zeichenketten-Template noch verständlich ist und in kurzer Zeit nachvollziehbar ist. Es würde keinen Sinn machen wenige Hilfsvariablen durch ein Template zu ersetzen, wenn gleichzeitig dieses Coding für einen selbst oder für andere SAP-Entwickler sehr schwer nachvollziehbar ist.

Kombination && und Zeichenketten-Templates

  • Wenn einige Operanten in einer Zeile stehen, wird die Zeile schwer lesbar. Es ist besser hier die verschiedenen Operanten zu verbinden mit
lv_zielvariable = |..|
               && |..|
               && |..|.
  • Damit verbindet man die Flexibilität der Zeichenketten-Templates mit der Übersichtlichkeit vom Verkettungsbefehl "&&", um so jeden Operant auf einer Zeile zu sehen.
  • Man sollte aber aufpassen wie lang die Zielvariable wird. Angenommen die Zielvariable wird mit 100 Zeichen gefüllt, ist es erst mal kein Problem, wenn man die Variable entsprechend typisiert. Aber wenn man diese Variable in einer Message ausgeben will, wird dieser Text auf 50 Zeichen gekürzt. Da ist es dann häufig besser die Message in einer Nachrichtenklasse über die Transaktion SE91 (Nachrichtenpflege) anzulegen.

Zeichenketten-Templates und Transaktion SE91 (Nachrichtenpflege)

  • Man sollte sich als Entwickler in der Projektpraxis die Vor- und Nachteile von Zeichenketten-Templates auch mit der Verwendung von Nachrichten mit der SE91 (Nachrichtenpflege) abwägen.
  • Häufig ist eine gut formulierte Nachricht in der Transaktion SE91 sehr transparent und am besten wartbar und liefert im Produktivbetrieb oft auch über den Verwendungsnachweis einer (Fehler-)Nachricht sehr nützliche Hinweise.

Web-Links