Sunday, June 1, 2025

πŸš€ SAP ABAP New Syntax- 7.4

 

Here are some of the new syntax which I have come across and found out to be very useful for working in ABAP and making coding less complex.

1. Inline Declaration

Before 7.4 New syntaxes were not introduced the variable needs to be declared before using it, now using inline declaration variable can we declare and use at the same time, Below are some of the syntax which has changed after 7.4.

Variable Declaration and Assignment

Whenever data is to be moved to a variable, can be declared at the same instance,

Old Syntax:

DATA var1 TYPE char5.
var1 = 'ABC'.

New Syntax:

DATA(var1) = 'ABC'.

Select Single From DataBase Table into Work Area

Old Syntax:

DATA wa TYPE ....
SELECT SINGLE fld1 fld2 FROM ....
INTO wa 
WHERE fld1 = var1
AND fld2 = var2.

New Syntax:

SELECT SINGLE fld1, fld2, FROM ....
INTO @DATA(wa)
WHERE fld1 = @var1
AND fld2 = @var2.

Selecting Data From DataBase Table Into Internal Table

Old Syntax:

DATA itab TYPE TABLE OF ....
SELECT fld1 fld2 FROM ....
INTO TABLE itab
WHERE fld1 = var1
AND fld2 = var2.

New Syntax:

SELECT fld1, fld2 FROM ....
INTO TABLE @DATA(itab)
WHERE fld1 = @var1
AND fld2 = @var2.

Declaration of the work area while operation on Internal Table

Old Syntax:

DATA wa TYPE structure
LOOP AT itab INTO wa.

or

READ TABLE itab into wa WITH KEY field1 = var1.

New Syntax:

LOOP AT itab INTO data(wa).

or

READ TABLE itab into data(wa) WITH KEY field1 = var1.

Moving Data From One Table To Other

Old Syntax:

DATA lt_tab LIKE itab.
lt_tab[] = itab[].

New Syntax:

DATA(lt_tab) = itab[].

Assigning Field Symbols

Old Syntax:

FIELD-SYMBOLS: <line> type …
LOOP AT itab ASSIGNING <line>.

or

READ TABLE itab ASSIGNING <line> WITH KEY FLD1 = VAR1.

New Syntax:

LOOP AT itab ASSIGNING FIELD-SYMBOL(<line>).

OR

READ TABLE itab ASSIGNING FIELD-SYMBOL(<line>) WITH KEY FLD1 = VAR1.

2. Table Expression

In SAP whenever the data is to be taken from Internal Table to any variable in Code for further processing, Loop or Read Table are generally used to get that data from Internal Table to work area and then move to another variable, so this effort can be lessened by using the new syntax.

Get line from table to Work Area

Old Syntax:

READ TABLE itab INTO DATA(wa) WITH KEY fld1 = var1.

New Syntax:

DATA(wa) = itab[ fld1 = var1 ].

Read table with Index 1

Old Syntax:

READ TABLE itab INTO DATA(wa) index 1.

New Syntax:

DATA(wa) = itab[ 1 ].

Get a particular field from one table to another variable

Old Syntax:

READ TABLE itab INTO wa WITH KEY fld1 = var1.
IF sy-subrc EQ 0.
lv_var2 = wa-var2.
ENDIF.

New Syntax:

lv_var2 = itab[ fld1 = var1 ]-var2.

Check particular Value is in Internal Table

Old Syntax:

READ TABLE itab TRANSPORTING NO FIELDS WITH KEY fld1 = var1.
IF sy-subrc = 0.
ENDIF.

New Syntax:

IF line_exists( itab[ fld1 = var1 ] ).
ENDIF.

Get Index Number of Particular Entry From Internal Table

Old Syntax:

READ TABLE itab TRANSPORTING NO FIELDS fld1 = var1. 
IF sy-subrc eq 0
lv_tabix = sy-tabix.
ENDIF.

New Syntax:

lv_tabix = line_index( itab[ fld1 = var1 ] ).

Modify Entry in Table

Old Syntax:

READ TABLE itab ASSIGNING <lfs_tab> fld1 = var1. 
IF sy-subrc eq 0
<lfs_tab>-fld2 = 'Text'.
ENDIF.

New Syntax:

itab[ fld1 = var1 ]-fld2 = 'Text'.

Note: While Using these Syntaxes in case of Table Expression use with Try Catch with cx_sy_itab_line_not_found and Entry.

3. Data Operations

Here are some of the new Syntax which can be used for manipulating, changing, and storing data according to requirement.

Adding or Removing Leading Zeros to a Variable

Old Syntax:

For Removing Leading Zeros

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
 EXPORTING
 input = var1
 IMPORTING
 OUTPUT = var1 .

For Adding Leading Zeros

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
 EXPORTING
 input = var1
 IMPORTING
 OUTPUT = var1 .

New Syntax:

For Removing Leading Zeros

var1 = |{ var1 ALPHA = OUT}|.

For Adding Leading Zeros

var1 = |{ var1 ALPHA = IN }|.

Getting Data into Variable Depending on Condition

Old Syntax:

IF cond1.
 var1 = fld1.
ELSE.
 var1 = fld2.
ENDIF.

New Syntax:

var1 = COND #( WHEN cond1 THEN fld1 ELSE fld2 ).

Case Endcase

Old Syntax:

CASE var1. 
WHEN cond1.
 var1 = fld1.
WHEN cond2.
 var1 = fld2.
ENDCASE.

New Syntax:

var1 = SWITCH #( var1 WHEN cond1 THEN fld1 
                      WHEN cond2 THEN fld2 ).

Creating Table and Filling Data into a Table

Old Syntax:

DATA: itab TYPE TABLE OF structure,
      wa TYPE structure.
wa-fld1 = 1.
wa-fld2 = 'A'.
APPEND wa TO itab.
CLEAR WA.
wa-fld1 = 2.
wa-fld2 = 'B'.
APPEND wa TO itab.
CLEAR WA.

New Syntax:

DATA(itab) = VALUE structure(( fld1 = 1 fld2 = 'A' )
                             ( fld1 = 2 fld2 = 'B' )).

Adding New entries to Internal Table already having entries

Old Syntax:

DATA: itab TYPE TABLE OF structure,
      wa TYPE structure.
wa-fld1 = 1.
wa-fld2 = 'A'.
APPEND wa TO itab.
CLEAR WA.
wa-fld1 = 2.
wa-fld2 = 'B'.
APPEND wa TO itab.
CLEAR WA.

New Syntax:

itab = VALUE #( BASE itab
          ( fld1 = 1 fld2 = 'A' ) 
          ( fld1 = 2 fld2 = 'B' ) ).

Concatenate for data type apart from C, N, D, T, or STRING

Before 7.4 use to get Syntax Error saying this, but with new Syntax, it's possible for any Data Type.

Old Syntax:

CONCATENATE 'The Value in inr is' var1 into fld1.

New Syntax:

fld1 = |The Value in inr is { var1 }|.

Combining two tables into a single table

Old Syntax:

loop at itab1 into wa1.
 append wa1 into itab3.
endloop.

loop at itab2 into wa2.
 append wa2 into itab3.
endloop.

New Syntax:

itab3 = itab2.

itab3 = corresponding #( BASE ( itab3 ) itab2 ).

Moving Data from one Container to another

Old Syntax:

MOVE-CORRESPONDING itab1 to itab2.

New Syntax:

itab2 = CORRESPONDING #( itab1 ).

Using the Above Syntax only fields that are identical in the container will be moved to move it to other fields this new syntax can be used.

itab2 = CORRESPONDING #( itab1 MAPPING t1_fld1 = t2_fld1 
                                       t1_fld2 = t2_fld2 ).

If some fields need to excluded while moving corresponding fields, this syntax can be used.

itab2 = CORRESPONDING #( itab1 EXCEPT t1_fld3,t1_fld4 ).

Moving Data From Table to other by Splitting it into two fields

Defining Structure:

TYPES: BEGIN OF gty_s_rseg_key,
        belnr TYPE belnr_d,
        gjahr TYPE gjahr,
       END OF gty_s_rseg,
    gty_rseg TYPE STANDARD TABLE OF gty_s_rseg WITH EMPTY KEY.

Old Syntax:

DATA: lt_awkey TYPE gty_rseg,
      lw_awkey TYPE gty_s_rseg.
LOOP AT lt_bkpf into lw_bkpf.
 lw_awkey-belnr = lw_bkpf-awkey+0(10).
 lw_awkey-gjahr = lw_bkpf-awkey+10(4). 
 APPEND lw_awkey to lt_awkey
ENDLOOP.

New Syntax:

DATA(lt_awkey) = VALUE gty_rseg( FOR <lfs_bkpf> IN lt_bkpf
                               ( belnr = <lfs_bkpf>-awkey+0(10)
                                 gjahr = <lfs_bkpf>-awkey+10(4) ) ).

Display Message combining two or more Fields

Old Syntax:

DATA lv_name TYPE sy-ucomm.
DATA lv_output TYPE char20.
CONCATENATE 'The User ID is' lv_name INTO lv_output SEPARATED BY space.
MESSAGE lv_output TYPE 'E' DISPLAY LIKE 'E'.

New Syntax:

MESSAGE |The User ID is { lv_name }| TYPE 'E' DISPLAY LIKE 'E'.

4. Object-Oriented

Method Calls

Old Syntax:

DATA: binary_content TYPE solix_tab.
DATA: xl_content TYPE xstring .
CALL METHOD cl_document_bcs=>xstring_to_solix
EXPORTING
ip_xstring = xl_content
receiving
rt_solix = binary_content

New Syntax:

binary_content = cl_bcs_convert=>xstring_to_solix( ip_xstring = xl_content ).

Creating Object For OOABAP

Old Syntax:

DATA oref TYPE REF TO class.
CREATE OBJECT oref EXPORTING …

New Syntax:

DATA oref TYPE REF TO class.
oref = NEW #( … ).

or with an inline declaration

DATA(oref) = NEW class( … )


No comments:

Post a Comment