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