ABAP 7.4 – Prze(d)staw się! Operacje na tabelach

ABAP 7.4 – Prze(d)staw się! To cykl wpisów w, którym będę przedstawiał nowości wprowadzone w nowej wersji języka programowania ABAP. Ten wpis przedstawi nowości związanymi z operacjami na tabelach.

W wersji 7.4 ABAP otrzymaliśmy sporo usprawnień, jeżeli chodzi o operacje na tabelach.

Odświeżona składnia ułatwia operację:

  • odczytu danych z tabeli,
  • weryfikacji czy dane istnieją w tabeli
  • modyfikacji wartości w tabeli.

Oprócz tego, możemy wskazać wartość, która nas interesuje w danym wierszu bez konieczności uprzedniego zapisania całego wiersza w osobnej zmiennej, a także możliwość „łańcuchowania” odczytywanych danych w jednej lini kodu.

Przykłady:

Przed wersją 7.40 Wersja 7.40
 
READ TABLE itab INDEX 1 INTO wa.
 
wa = itab[ 1 ].
READ TABLE itab INDEX 1 USING KEY key INTO wa.
wa = itab[ KEY key INDEX 1 ].
READ TABLE itab WITH KEY col1 = 'C1' col2 = 'C2' INTO wa.
READ TABLE itab WITH TABLE KEY key COMPONENTS col1 = 'C1' col2 = 'C2' INTO wa.
wa = itab[ col1 = 'C1' col2 = 'C2'].
wa = itab[ KEY key COMPONENTS col1 = 'C1' col2 = 'C2' ].
READ TABLE itab INDEX 1 INTO wa.
IF sy-subrc = 0.
"Operacje na wa.
ENDIF.
TRY.
wa = itab[ 1 ].
CATCH CX_SY_ITAB_LINE_NOT_FOUND.
"Brak pozycji 1
ENDTRY.
READ TABLE itab INDEX 1 TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
"Pozycja 1 istnieje
ENDIF.
IF line_exists( itab[ 1 ] ).
"Pozycja 1 istnieje
ELSE.
"Pozycja 1 nie istnieje
ENDIF.
FIELD-SYMBOLS: <fs> LIKE LINE OF itab.
READ TABLE itab ASSIGNING <fs> INDEX 1.
IF sy-subrc = 0.
  <fs> = 'Nowa wartość'.
ENDIF.
itab[ 1 ] = 'Nowa wartość'.

 

DATA ls TYPE structure.
READ TABLE itab INTO ls WITH KEY vbeln = '9000000001'.
WRITE: ls-fkdat.
WRITE: itab[ vbeln = '9000000001' ]-fkdat

Jeżeli strutkura okazuje się głęboka (deep) możemy odwoływać, się
analogicznie do zagnieżdzonych danych.
itab[ vbeln = '9000000001' ]-positions[ posnr = '0000001' ]-matnr.

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *