ABAP 7.40+ New Syntax

Inline Data Declaration

//old syntax
DATA: lv_matnr TYPE matnr.
lv_matnr = 'MAT001'.

//new syntax
DATA(lv_matnr) = 'MAT001'.

SELECT INTO Inline Variable

//Old syntax 
DATA: ls_mara TYPE mara.
SELECT SINGLE *
  INTO ls_mara
  FROM mara
 WHERE matnr = 'MAT001'.
//new syntax
SELECT SINGLE *
  FROM mara
  WHERE matnr = 'MAT001'
  INTO @DATA(ls_mara).

Why is @ used?

@ is the escape character that distinguishes ABAP variables from database fields in Open SQL

VALUE Operator

//Old Syntax
DATA: lt_data TYPE TABLE OF mara,
      ls_data TYPE mara.
ls_data-matnr = 'MAT001'.
ls_data-mtart = 'FERT'.
APPEND ls_data TO lt_data.

//new syntax
DATA(lt_data) = VALUE #( (
  matnr = 'MAT001'
  mtart = 'FERT'
) ).

LOOP with Field Symbol Inline

//Old Syntax
FIELD-SYMBOLS: <fs_mara> TYPE mara.
LOOP AT lt_mara ASSIGNING <fs_mara>.
  WRITE: / <fs_mara>-matnr.
ENDLOOP.

//New Syntax
LOOP AT lt_mara ASSIGNING FIELD-SYMBOL(<fs_mara>).
  WRITE: / <fs_mara>-matnr.
ENDLOOP.

Table Expression

//Old Syntax
READ TABLE lt_mara INTO ls_mara
  WITH KEY matnr = 'MAT001'.
IF sy-subrc = 0.
  WRITE ls_mara-mtart.
ENDIF.

//New Syntax
TRY.
    DATA(ls_mara) = lt_mara[ matnr = 'MAT001' ].
  CATCH cx_sy_itab_line_not_found.
ENDTRY.

COND Operator (IF Replacement)

// Old Syntax
IF lv_score >= 40.
  lv_result = 'PASS'.
ELSE.
  lv_result = 'FAIL'.
ENDIF.

// New Syntax
DATA(lv_result) =
  COND string(
    WHEN lv_score >= 40 THEN 'PASS'
    ELSE 'FAIL' ).

FOR Expression

// Old Syntax
LOOP AT lt_mara INTO ls_mara.
  APPEND ls_mara-matnr TO lt_matnr.
ENDLOOP.

// New Syntax
DATA(lt_matnr) =
  VALUE stringtab(
    FOR ls_mara IN lt_mara
    ( ls_mara-matnr ) ).

FILTER Operator

//Old Syntax
LOOP AT lt_mara INTO ls_mara.
  IF ls_mara-mtart = 'FERT'.
    APPEND ls_mara TO lt_fert.
  ENDIF.
ENDLOOP.

// new Syntax
DATA(lt_fert) =
  FILTER #( lt_mara
            WHERE mtart = 'FERT' ).

REDUCE Operator

DATA lv_total TYPE p DECIMALS 2.
LOOP AT lt_items INTO ls_item.
  lv_total = lv_total + ls_item-amount.
ENDLOOP.

// New Synatx
DATA(lv_total) =
  REDUCE p(
    INIT sum = 0
    FOR ls_item IN lt_items
    NEXT sum = sum + ls_item-amount ).

String Templates

//Old syntax
CONCATENATE 'Material'
            lv_matnr
       INTO lv_text
 SEPARATED BY space.

//New syntax
DATA(lv_text) = |Material { lv_matnr }|.

SWITCH Operator

//Old syntax
CASE lv_grade.
  WHEN 'A'.
    lv_text = 'Excellent'.
  WHEN 'B'.
    lv_text = 'Good'.
  WHEN OTHERS.
    lv_text = 'Average'.
ENDCASE.

//new syntax
DATA(lv_text) =
  SWITCH string(
    lv_grade
    WHEN 'A' THEN 'Excellent'
    WHEN 'B' THEN 'Good'
    ELSE 'Average' ).

Scroll to Top