Interne Tabellen und Strukturen füllen im neuen ABAP

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Siehe Neues ABAP (ab Release 7.40).

Ab ABAP-Release 7.40 gibt es auch viele neue Möglichkeiten zum Füllen von internen Tabellen und lokalen Strukturen.

Füllen lokale Struktur mit Inline-Deklaration

Die Interne Tabelle LS_ITEM wird inline deklariert und gefüllt hinter dem Befehl VALUE mit Daten vom Dictionary-Typ BAPI2017_GM_ITEM_CREATE. Hinter einer öffnenden Klammer werden die zu füllenden Felder aufgeführt. Es müssen nicht alle Felder der Struktur gefüllt werden.

DATA(ls_item) = VALUE bapi2017_gm_item_create(
                  material    = <record>-matnr
                  plant       = <record>-werks
                  stge_loc    = <record>-lgort
                  batch       = <record>-charg
                  stk_segment = <record>-sgt_sca
                  base_uom    = <record>-meins
                  entry_uom   = <record>-meins
                                             ).

InterneTabelle1.JPG

Füllen lokale Struktur in bekannte Struktur

Die Interne Tabelle LS_ITEM ist bereits deklariert und gefüllt hinter dem Befehl VALUE. Das "#" ist das Stellvertreterzeichen für die bereits bekannte Struktur.

ls_item = VALUE #(
                  material    = <record>-matnr
                  plant       = <record>-werks
                  stge_loc    = <record>-lgort
                  batch       = <record>-charg
                  stk_segment = <record>-sgt_sca
                  base_uom    = <record>-meins
                  entry_uom   = <record>-meins
                                             ).

Hier muss man sich jedoch bewußt sein, dass alle Felder von LS_ITEM, die nicht angesprochen werden, mit ihrem initialen Wert überschrieben werden.

Wenn man z. B. alle Felder belassen will mit ihrem bereit gefüllten Wert, dann kommt der Zusatz "BASE" zum Einsatz, wo die Struktur LS_ITEM initial mit den eigenen Werten aus LS_ITEM gefüllt wird.

ls_item = VALUE #( BASE ls_item
                  material    = <record>-matnr
                  plant       = <record>-werks
                  stge_loc    = <record>-lgort
                  batch       = <record>-charg
                  stk_segment = <record>-sgt_sca
                  base_uom    = <record>-meins
                  entry_uom   = <record>-meins
                                             ).

Fülle (mehrere) Zeilen in interne Tabelle

Die interne LT_PARTN wird hier gefüllt mit 3 Zeilen. man spart sich so die Definition einer Struktur, die Zuweisungen zur Struktur und die Appends der Struktur zur internen Tabelle.

Man sollte darauf achten die Klammern und Gleichzeichen bündig zu setzen, um das Coding maximal lesbar und verständlich zu halten.

lt_partn = value #( ( partn_role = 'AG'
                      partn_numb = lv_kunnr_ag )

                    ( partn_role = 'WE'
                      partn_numb = lv_kunnr_we )

                    ( partn_role = 'MF'
                      partn_numb = lv_kunnr_mf )
                  ).

Web-Links

Literatur