ABAP Obsolet - Add
Im heutigen Artikel beschäftigen wir uns mit dem obsoleten Sprachelement Add, wie ein Nachfolger dafür nun aussieht und was uns dabei gefällt oder auch nicht gefällt.
Inhaltsverzeichnis
Das Sprachelement des heutigen Artikels ist vor allem noch in vielen alten Programmen im System zu finden und sollte dir daher nicht all zu großes Kopfzerbrechen bereiten. Es gibt ihn in der sehr einfach Form, um auf eine Variable einen Wert zu addieren, ...
" alte Form
ADD 1 TO ld_num.
" neue Form
ld_num = ld_num 1.
... und in der komplexeren Variante, die wir heute besprechen wollen.
Vorbereitung
Als Vorbereitung nehmen wir das Beispiel aus der Dokumentation des Objekts (mehr dazu im Link am Ende des Artikels) und erstellen uns eine Struktur, die wir dann befüllen. In dem Beispiel von SAP wird es einfacher dargestellt, wir definieren uns aber zuerst die Typen und erzeugen im Anschluss die Variablen, die wir dann auch befüllen.
" Typen
TYPES:
tv_num TYPE p LENGTH 8 DECIMALS 0,
BEGIN OF ts_numbers,
one TYPE tv_num,
two TYPE tv_num,
three TYPE tv_num,
four TYPE tv_num,
five TYPE tv_num,
END OF ts_numbers.
" Variablen
DATA:
ls_numbers TYPE ts_numbers,
ld_sum TYPE i.
FIELD-SYMBOLS:
< ld_num > TYPE tv_num.
" Initialbefüllung
ls_numbers = VALUE #( one = 10 two = 20 three = 30 four = 40 five = 50 ).
In dem Beispiel aus der offiziellen Dokumentation werden die Felder, die aufeinander folgen und den selben Typ haben, miteinander addiert. Im OO-Kontext ist diese Art der Definition aber nicht mehr möglich und auch verboten. Dafür wird in der Dokumentation aber auch auf eine ähnliche Funktion verwiesen, mit der wir die gleiche Wirkung erzielen können.
Durchführung
Anders als in dem ursprünglichen Befehl musst du für das Addieren etwas mehr programmieren und Coding produzieren. Dies widerspricht zwar dem Gedanken, der bisher vorgestellten Befehle, etwas schneller zu werden, aber es macht die Funktion viel klarer.
Wir gehen mit einer Schleife so oft über die Struktur, wie in p_cnt definiert. Dabei beginnen wir mit dem ersten Element und addieren alle Werte auf.
DO p_cnt TIMES.
DATA(ld_idx) = sy-index - 1.
ASSIGN ls_numbers-one INCREMENT ld_idx TO < ld_num > RANGE ls_numbers.
IF sy-subrc = 0.
ld_sum = ld_sum < ld_num >.
ENDIF.
ENDDO.
Der Assign beginnt mit dem Feld "one" und Index 0 aus der Range der Struktur. Wir wollen das erste Feld ebenfalls in unsere Addition einbeziehen und dürfen hier den Index nicht erhöhen.
Fazit
Nicht jeder neue Sprachbefehl ist unbedingt leichter und einfacher als Quellcode zu erzeugen, doch die neuen Sprachelemente machen es auch fremden Entwicklern einfacher zu verstehen. Mit unserem kleinen Tipp bist du auf jeden Fall gut vorbereitet, falls du mal so ein Konstrukt ablösen sollst.
Quelle:
ABAP Dokumentation Add-Until