Interne Tabellen und Strukturen füllen im neuen ABAP (Schlüsselwort VALUE)

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Siehe Kategorie:Neues ABAP.

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 mit "VALUE <DATENTYP>"

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. Nicht gefüllte Felder behalten ihren Initialwert.

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 mit "VALUE #"

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

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

Data: ls_item type bapi2017_gm_item_create.

...

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
                                             ).


Wenn man z. B. alle Felder belassen will mit ihrem bereits 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 N 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 )
                  ).

Siehe auch SAP-Hilfe: Füllen interne Tabelle mit VALUE.

Web-Links

Literatur