Schlüsselbefehl Field-Symbols

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Feldsymbole sind ein sehr mächtiges Konzept in ABAP. Ein Feldsymbol reserviert im Gegensatz zu Variablen keinen physischen Platz für ein Feld, sondern zeigt auf ein beliebiges Datenobjekt.

Durch die Typisierung zur Laufzeit können Feldsymbole sehr flexibel eingesetzt werden.

Mit Field-Symbols Zugriff auf Variablen übergeordneter Programmeinheiten (Dirty Assign)

Field-Symbols zur Performancesteigerung

Verwendung Field-Symbols für generische Programmierung

Feldsymbole können verschieden generisch typisiert werden

  • TYPE ANY (alle Typen von Datenobjekten sind möglich)
  • TYPE C, N, P oder X (nur Datenobjekte vom Typ C, N, P oder X)
  • TYPE TABLE oder TYPE STANDARD TABLE (interne Standardtabelle)
  • TYPE ANY TABLE (eine beliebige interne Tabelle)
  • TYPE SORTED TABLE (sortierte Tabelle)
  • TYPE HASHED TABLE (Tabelle vom Typ Hash)

Verwendung Field-Symbols für flexibeln Zugriff auf Variablen

Beim Coding in infoSets kann es vorkommen, dass man Felder ansprechen will, die zur Laufzeit des Query-Programms bekannt sind, aber sie werden nicht im InfoSet-Editor als gültig akzeptiert. Hier kann man sich mit Field-Symbols behelfen, um die fehlerhafte Syntaxprüfung zu überlisten.

Siehe SAP Query Transaktion SQ02 InfoSet#Coding erg.C3.A4nzen bei Reportingereignissen .22start-of-selection.22_etc..

DATA: lv_overlay TYPE char12 VALUE '000000000000'.

FIELD-SYMBOLS: <ft_p>   TYPE ANY TABLE,
              <fs_p>   TYPE any,
              <fv_low> TYPE any.

ASSIGN ('SP$00008[]') TO <ft_p>.

LOOP AT <ft_p> ASSIGNING <fs_p>.
 ASSIGN ('<FS_P>-LOW') TO <fv_low>.
 SHIFT <fv_low> RIGHT DELETING TRAILING space.
 OVERLAY <fv_low> WITH lv_overlay.
 <fv_low>(2) = space.
 CONDENSE <fv_low>.
ENDLOOP.

Einschränkung Field-Symbol und Watchpoint

  • Es ist nicht möglich einen Watchpoint auf einen Field-Symbol anzulegen.

Workarounds

  • Man kann sich auch behelfen, indem man eine lokale Variable anlegt und hier den Wert des Field-Symbols zuweist. Dann kann man sofort auf die lokale Variable den Watchpoint anlegen.
  • Genauso ist es möglich im Coding im Debugger per Kontextmenü "Breakpoint Bedingung anlegen" in einem Dialogfeld eine Bedingung anzulegen, z. B. <fs>-carrid = 'LH' und das Programm stoppt dann, wenn der Wert in "<FS>-CARRID" den Wert "LH" hat. Dieses Coding ist aber nur für aktuell ausgeführte Session gespeichert. Beim nächsten Debugginglauf müsste man sich das entsprechende Coding z. B. in Notepad zwischenspeichern.

Web-Links