Yeni ABAP versiyonunda gelen özellikler ve syntaxlar için aşağıda örnekler verilmiştir.
- Değişken Tanımları
- Tablo İfadeleri
- Dönüşüm Operatörü CONV
- Değer Operatörü VALUE
- FOR Operatörü
- Azaltma Operatörü REDUCE
- Koşullu Operatörler COND ve SWITCH
- Taşıma Operatörü CORRESPONDING
- String Birleştirme Dönüşümler
- LOOP AT GROUP BY
- BOOLEAN kontrol
- Classes/Methods
- FILTER Operatörü
Değişken Tanımları
| Data statement | |
| Before 7.40 |
DATA text TYPE string. text = 'ABC'. |
| With 7.40 |
DATA(text) = 'ABC'. |
| Loop at into work area | |
| Before 7.40 |
DATA : itab TYPE TABLE OF ekpo, wa LIKE LINE OF itab. SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab. LOOP AT itab INTO wa. ENDLOOP. |
| With 7.40 |
DATA : itab TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab. LOOP AT itab INTO DATA(wa). ENDLOOP. |
| Loop at assigning | |
| Before 7.40 |
DATA : itab TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab. FIELD-SYMBOLS: <line> TYPE any. LOOP AT itab ASSIGNING <line>. ENDLOOP. |
| With 7.40 |
DATA : itab TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab. LOOP AT itab ASSIGNING FIELD-SYMBOL(<line>). ENDLOOP. |
| Read assigning | |
| Before 7.40 |
DATA : itab TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab. FIELD-SYMBOLS: <line> TYPE any. READ TABLE itab ASSIGNING <line> INDEX 1. |
| With 7.40 |
DATA : itab TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab. READ TABLE itab ASSIGNING FIELD-SYMBOL(<line>) INDEX 1. |
| Select into Table | |
| Before 7.40 |
DATA : itab TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab. |
| With 7.40 |
SELECT * FROM ekpo INTO TABLE @DATA(lt_ekpo). |
| Select single into | |
| Before 7.40 |
DATA : ls_ekpo TYPE ekpo. SELECT SINGLE * FROM ekpo INTO ls_ekpo. |
| With 7.40 |
SELECT SINGLE * FROM ekpo INTO @DATA(ls_ekpo). |
Tablo İfadeleri
| Read Table index | |
| Before 7.40 |
DATA : lt_ekpo TYPE TABLE OF ekpo, ls_ekpo LIKE LINE OF lt_ekpo. SELECT * FROM ekpo INTO TABLE lt_ekpo. READ TABLE lt_ekpo INTO ls_ekpo INDEX 1. |
| With 7.40 |
SELECT * FROM ekpo INTO TABLE @DATA(lt_ekpo). DATA(ls_ekpo) = lt_ekpo[ 1 ]. |
| Read Table with key | |
| Before 7.40 |
DATA : lt_ekpo TYPE TABLE OF ekpo, ls_ekpo LIKE LINE OF lt_ekpo. SELECT * FROM ekpo INTO TABLE lt_ekpo. READ TABLE lt_ekpo INTO ls_ekpo WITH KEY ebeln = '4500000000'. |
| With 7.40 |
SELECT * FROM ekpo INTO TABLE @DATA(lt_ekpo). DATA(ls_ekpo) = lt_ekpo[ ebeln = '4500000000' ]. |
| Does record exist? | |
| Before 7.40 |
DATA : lt_ekpo TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO TABLE lt_ekpo. READ TABLE lt_ekpo TRANSPORTING NO FIELDS WITH KEY ebeln = '4500000000'. IF sy-subrc EQ 0. ENDIF. |
| With 7.40 |
SELECT * FROM ekpo INTO TABLE @DATA(lt_ekpo). IF line_exists( lt_ekpo[ ebeln = '4500000000' ] ). ENDIF. |
| Get table index | |
| Before 7.40 |
DATA : lt_ekpo TYPE TABLE OF ekpo, idx TYPE sy-tabix. SELECT * FROM ekpo INTO TABLE lt_ekpo. READ TABLE lt_ekpo TRANSPORTING NO FIELDS WITH KEY ebeln = '4500000000'. IF sy-subrc EQ 0. idx = sy-tabix. ENDIF. |
| With 7.40 |
SELECT * FROM ekpo INTO TABLE @DATA(lt_ekpo). DATA(idx) = line_index( lt_ekpo[ ebeln = '4500000000' ] ). |
Dönüşüm Operatörü CONV
| Before 7.40 |
DATA : text TYPE c LENGTH 255 VALUE 'MUSTAFA', helper TYPE string, xstr TYPE xstring. helper = text. xstr = cl_abap_codepage=>convert_to( source = helper ). |
| With 7.40 |
DATA text TYPE c LENGTH 255 VALUE 'MUSTAFA'. DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV string( text ) ). DATA(xstr2) = cl_abap_codepage=>convert_to( source = CONV #( text ) ). |
Değer Operatörü VALUE
Structure örneği;
TYPES: BEGIN OF ty_columns1,
cols1 TYPE i,
cols2 TYPE i,
END OF ty_columns1.
TYPES: BEGIN OF ty_columns2,
coln1 TYPE i,
coln2 TYPE ty_columns1,
END OF ty_columns2.
DATA: struc_simple TYPE ty_columns1,
struc_nest TYPE ty_columns2.
struc_nest = VALUE ty_columns2( coln1 = 1 coln2-cols1 = 1 coln2-cols2 = 2 ).
Tablo ve Range örneği;
TYPES t_itab TYPE TABLE OF i WITH EMPTY KEY.
DATA itab TYPE t_itab.
itab = VALUE #( ( ) ( 1 ) ( 2 ) ).
DATA lr_exam TYPE RANGE OF i.
lr_exam = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 10 )
( low = 21 high = 30 )
( low = 41 high = 50 )
option = 'GE' ( low = 61 ) ).
FOR Operatörü
TYPES:
BEGIN OF ty_customer,
customer TYPE char10,
name TYPE char30,
city TYPE char30,
route TYPE char10,
END OF ty_customer.
TYPES: tt_customers TYPE SORTED TABLE OF ty_customer
WITH UNIQUE KEY customer.
TYPES: tt_citys TYPE STANDARD TABLE OF char30 WITH EMPTY KEY.
DATA(t_customres) =
VALUE tt_customers(
( customer = 'C0001' name = 'Test Customer 1' city = 'NY' route = 'R0001' )
( customer = 'C0002' name = 'Customer 2' city = 'LA' route = 'R0003' )
( customer = 'C0003' name = 'Good Customer 3' city = 'DFW' route = 'R0001' )
( customer = 'C0004' name = 'Best Customer 4' city = 'CH' route = 'R0003' )
).
| Before 7.40 |
DATA : wa_cus LIKE LINE OF t_customres, ls_city TYPE char30, lt_city TYPE tt_citys. LOOP AT t_customres INTO wa_cus. MOVE wa_cus-city TO ls_city. APPEND ls_city TO lt_city. ENDLOOP. |
| With 7.40 |
DATA(t_city) = VALUE tt_citys( FOR ls_cust IN t_customres ( ls_cust-city ) ). |
FOR with THEN and UNTIL|WHILE
TYPES:
BEGIN OF ty_line,
col1 TYPE i,
col2 TYPE i,
col3 TYPE i,
END OF ty_line,
ty_tab TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY.
| Before 7.40 |
DATA: gt_itab TYPE ty_tab, j TYPE i. FIELD-SYMBOLS <ls_tab> TYPE ty_line. j = 1. DO. j = j + 10. IF j > 40. EXIT. ENDIF. APPEND INITIAL LINE TO gt_itab ASSIGNING <ls_tab>. <ls_tab>-col1 = j. <ls_tab>-col2 = j + 1. <ls_tab>-col3 = j + 2. ENDDO. |
| With 7.40 |
DATA(gt_itab2) = VALUE ty_tab( FOR i = 11 THEN i + 10 UNTIL i > 40 ( col1 = i col2 = i + 1 col3 = i + 2 ) ). |
Azaltma Operatörü REDUCE
| Before 7.40 |
SELECT * FROM ekko INTO TABLE @DATA(lt_ekko). DATA: lv_lines TYPE i. LOOP AT lt_ekko TRANSPORTING NO FIELDS WHERE bsart EQ 'ZXNB'. lv_lines = lv_lines + 1. ENDLOOP. |
| With 7.40 |
DATA(lv_line) = REDUCE i( INIT x = 0 FOR wa IN lt_ekko WHERE ( bsart EQ 'ZXNB' ) NEXT x = x + 1 ). |
| Before 7.40 |
DATA gt_itab TYPE STANDARD TABLE OF i WITH EMPTY KEY. gt_itab = VALUE #( FOR j = 1 WHILE j <= 10 ( j ) ). DATA: lv_line TYPE i, lv_sum TYPE i. LOOP AT gt_itab INTO lv_line. lv_sum = lv_sum + lv_line. ENDLOOP. |
| With 7.40 |
DATA(lv_sumx) = REDUCE i( INIT x = 0 FOR wa IN gt_itab NEXT x = x + wa ). |
Koşullu Operatörler COND ve SWITCH
Örnek 1
DATA(time) = COND string(
WHEN sy-timlo < '120000' THEN |{ sy-timlo TIME = ISO } AM |
WHEN sy-timlo > '120000' THEN |{ CONV t( sy-timlo - 12 * 3600 ) TIME = ISO } PM |
WHEN sy-timlo EQ '120000' THEN |High Noon|
ELSE 'ERROR' ).
WRITE time.
Örnek 2
DATA(text) = SWITCH #( sy-langu WHEN 'D' THEN 'DE' WHEN 'E' THEN 'EN' ELSE 'OTHER' ). WRITE text.
Örnek 3
DATA(lv_text) = NEW char10( 'ABCD@#@#' ).
DATA(lv_output) = NEW char10( ).
DO 10 TIMES.
DATA(lv_offset) = NEW i( sy-index - 1 ).
DATA(lv_char_part) = NEW char1( lv_text->*+lv_offset->*(1) ).
DATA(lv_new_part) =
SWITCH char1( lv_char_part->*
WHEN 'A' THEN 'Z'
WHEN 'B' THEN 'Y'
WHEN 'C' THEN 'X'
WHEN 'D' THEN 'W'
ELSE 0
).
lv_output->*+lv_offset->*(1) = lv_new_part.
ENDDO.
WRITE: lv_output->*.
Taşıma Operatörü CORRESPONDING
DATA ls_ekpo2 TYPE ekpo.
SELECT * FROM ekpo INTO TABLE @DATA(lt_ekpo).
DATA(ls_ekpo) = lt_ekpo[ 1 ].
MOVE-CORRESPONDING ls_ekpo TO ls_ekpo2.
ls_ekpo2 = CORRESPONDING #( ls_ekpo ).
String Birleştirme Dönüşümler
CONCATENATE
| Before 7.40 |
DATA lv_output TYPE string. CONCATENATE 'Hello' 'world' INTO lv_output SEPARATED BY space. |
| With 7.40 |
DATA(lv_out) = |Hello| & | | & |world|. |
Width/Alignment/Padding
WRITE / |{ 'Left' WIDTH = 10 ALIGN = LEFT PAD = '0' }|.
WRITE / |{ 'Centre' WIDTH = 10 ALIGN = CENTER PAD = '0' }|.
WRITE / |{ 'Right' WIDTH = 10 ALIGN = RIGHT PAD = '0' }|.
Left000000
00Centre00
00000Right
Upper/Lower CASE
DATA(text) = 'Text'.
TRANSLATE text TO LOWER CASE.
TRANSLATE text TO UPPER CASE.
WRITE / |{ 'Text' CASE = (cl_abap_format=>c_raw) }|.
WRITE / |{ 'Text' CASE = (cl_abap_format=>c_upper) }|.
WRITE / |{ 'Text' CASE = (cl_abap_format=>c_lower) }|.
ALPHA Çevirici
DATA(lv_vbeln) = '0000012345'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = lv_vbeln
output = lv_vbeln.
WRITE / |{ lv_vbeln ALPHA = OUT }|.
Tarih Çevirici
DATA(pa_date) = sy-datum.
WRITE / pa_date DD/MM/YYYY.
WRITE / |{ pa_date DATE = ISO }|.
WRITE / |{ pa_date DATE = USER }|.
WRITE / |{ pa_date DATE = ENVIRONMENT }|.
2018-12-03
03.12.2018
03.12.2018
LOOP AT GROUP BY
TYPES:
BEGIN OF ty_customer,
customer TYPE char10,
name TYPE char30,
city TYPE char30,
route TYPE char10,
END OF ty_customer.
TYPES: tt_customers TYPE SORTED TABLE OF ty_customer
WITH UNIQUE KEY customer.
TYPES: tt_citys TYPE STANDARD TABLE OF char30 WITH EMPTY KEY.
DATA(t_customres) =
VALUE tt_customers(
( customer = 'C0001' name = 'Test Customer 1' city = 'NY' route = 'R0001' )
( customer = 'C0002' name = 'Customer 2' city = 'LA' route = 'R0003' )
( customer = 'C0003' name = 'Good Customer 3' city = 'DFW' route = 'R0001' )
( customer = 'C0004' name = 'Best Customer 4' city = 'CH' route = 'R0003' )
( customer = 'C0005' name = 'So So Customer 5' city = 'NY' route = 'R0001' )
).
DATA(ls_read) = t_customres[ 1 ].
LOOP AT t_customres INTO DATA(ls_cust_2)
GROUP BY ( route = ls_cust_2-route )
ASCENDING
REFERENCE INTO DATA(route_group_2).
WRITE: / route_group_2->route.
ENDLOOP.
R0001
R0003
TYPES: BEGIN OF ty_employee,
name TYPE char30,
role TYPE char30,
age TYPE i,
END OF ty_employee,
ty_employee_t TYPE STANDARD TABLE OF ty_employee WITH KEY name.
DATA(gt_employee) = VALUE ty_employee_t(
( name = 'John' role = 'ABAP guru' age = 34 )
( name = 'Alice' role = 'FI Consultant' age = 42 )
( name = 'Barry' role = 'ABAP guru' age = 54 )
( name = 'Mary' role = 'FI Consultant' age = 37 )
( name = 'Arthur' role = 'ABAP guru' age = 34 )
( name = 'Mandy' role = 'SD Consultant' age = 64 ) ).
DATA: gv_tot_age TYPE i,
gv_avg_age TYPE decfloat34.
LOOP AT gt_employee INTO DATA(ls_employee)
GROUP BY ( role = ls_employee-role
size = GROUP SIZE
index = GROUP INDEX ) ASCENDING
ASSIGNING FIELD-SYMBOL(<group>).
CLEAR: gv_tot_age.
WRITE: / |Group: { <group>-index } Role: { <group>-role WIDTH = 15 }|
& | Number in this role: { <group>-size }|.
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_member>).
gv_tot_age = gv_tot_age + <ls_member>-age.
WRITE: /13 <ls_member>-name.
ENDLOOP.
gv_avg_age = gv_tot_age / <group>-size.
WRITE: / |Average age: { gv_avg_age }|.
SKIP.
ENDLOOP.
BOOLEAN kontrol
DATA lv_bool TYPE boolean.
IF lv_bool EQ abap_true.
WRITE 'TRUE'.
ELSE.
WRITE 'FALSE'.
ENDIF.
Classes/Methods
| Before 7.40 |
DATA : gr_report TYPE REF TO lcl_report. CREATE OBJECT gr_report. |
| With 7.40 |
DATA(gr_report) = NEW lcl_report( ). |
| Before 7.40 |
DATA: ls_lfa1 TYPE lfa1, lv_name1 TYPE lfa1–name1. ls_lfa1 = My_Class=>get_lfa1( ). lv_name1 = ls_lfa1–name1. |
| With 7.40 |
DATA(lv_name1) = My_Class=>get_lfa1( )–name1. |
FILTER Operatörü
TYPES: BEGIN OF ty_filter,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,
f3 TYPE i,
END OF ty_filter,
ty_filter_tab TYPE HASHED TABLE OF ty_filter
WITH UNIQUE KEY cityfrom cityto.
DATA: lt_splfi TYPE STANDARD TABLE OF spfli.
SELECT * FROM spfli APPENDING TABLE lt_splfi.
DATA(lt_filter) = VALUE ty_filter_tab( f3 = 2
( cityfrom = 'NEW YORK' cityto = 'SAN FRANCISCO' )
( cityfrom = 'FRANKFURT' cityto = 'NEW YORK' ) ).
DATA(lt_myrecs) = FILTER #( lt_splfi IN lt_filter
WHERE cityfrom = cityfrom
AND cityto = cityto ).
LOOP AT lt_myrecs ASSIGNING FIELD-SYMBOL(<ls_rec>).
WRITE: / <ls_rec>-carrid,8 <ls_rec>-cityfrom,30
<ls_rec>-cityto,45 <ls_rec>-deptime.
ENDLOOP.
![]()


