Cuma , 21 Temmuz 2017
Home » SAP Eğitimleri » ABAP Eğitimleri » Field Symbol ABAP’ta Neden Kullanılır

Field Symbol ABAP’ta Neden Kullanılır

 

Field Symbol Neden kullanılır

 

Temel olarak ana kullanım amacı performansdır diyebiliriz. Work area ile field symbol kullanımı arasında ciddi zaman farklılıkları vardır.

 

Aşağıdaki kod blokunu incelerseniz zaman farkını görebilirsiniz. Ayrıca bunu uygun bir sistemde deneyebilirisiniz.

 

 

*

REPORT ztest_np_loop_fs.

*

DATA: i_bseg TYPE STANDARD TABLE OF bseg,

wa_bseg LIKE LINE OF i_bseg.

*

DATA: lv_flag TYPE flag,

lv_sta_time TYPE timestampl,

lv_end_time TYPE timestampl,

lv_diff_w TYPE p DECIMALS 5,

lv_diff_f LIKE lv_diff_w,

lv_save LIKE lv_diff_w.

*

FIELD-SYMBOLS: <fs_bseg> LIKE LINE OF i_bseg.

*

* data selection = 10,000 records

SELECT * FROM bseg INTO TABLE i_bseg UP TO 100 ROWS.

*

* Begin – Processing with Work area

GET TIME STAMP FIELD lv_sta_time.

LOOP AT i_bseg INTO wa_bseg.

IF lv_flag = ‘X’.

wa_bseg-sgtxt = ‘TEST’.

MODIFY i_bseg FROM wa_bseg.

ENDIF.

CLEAR wa_bseg.

IF lv_flag IS INITIAL.

lv_flag = ‘X’.

ENDIF.

ENDLOOP.

GET TIME STAMP FIELD lv_end_time.

lv_diff_w = lv_end_time – lv_sta_time.

WRITE: /(15) ‘Work area’, lv_diff_w.

* End – Processing with Work Area

*

CLEAR: lv_flag,

lv_sta_time,

lv_end_time.

* Begin – Processing with Field-Symbols

GET TIME STAMP FIELD lv_sta_time.

LOOP AT i_bseg ASSIGNING <fs_bseg>.

IF lv_flag = ‘X’.

<fs_bseg>-sgtxt = ‘TEST’.

ENDIF.

IF lv_flag IS INITIAL.

lv_flag = ‘X’.

ENDIF.

ENDLOOP.

GET TIME STAMP FIELD lv_end_time.

lv_diff_f = lv_end_time – lv_sta_time.

WRITE: /(15) ‘Field-Symbol’, lv_diff_f.

* End – Processing with Work Area

*

* Net time saving

lv_save = lv_diff_w – lv_diff_f.

WRITE: /(15) ‘Total Save’, lv_save.

WRITE: / 'Done'.

 

Sonuçlar :

Kayıt sayılarına göre zamanlar aşağıdaki gibidir, work area kullanımındaki değer 100 olarak alınmıştır buna göre field symbol ile yazılan kodda ciddi performans farklılıkları görülmektedir.



 

Field symbol nasıl kullanılır bunun ile ilgili de aşağıdaki örnekleri inceleyebilirsiniz.

Field symbol tanımlama:

TYPES: tt_mara TYPE STANDARD TABLE OF mara.
DATA:  t_mara TYPE tt_mara.
*
FIELD-SYMBOLS: <lfs_mara> LIKE LINE OF t_mara.  " <<
*
" Field symbol without type
FIELD-SYMBOLS:
  <lfs_any_tab> TYPE ANY TABLE,
  <lfs_any> TYPE ANY.
 Append ve Insert Kullanımı :

 

* Append line
APPEND INITIAL LINE TO t_mara ASSIGNING <lfs_mara>.
<lfs_mara>-matnr = '123456'.
*
* insert table
INSERT INITIAL LINE INTO t_mara ASSIGNING <lfs_mara> INDEX 2.
<lfs_mara>-matnr = 'ABCDEF'.

 

 

Field symbol kullanarak ITAB kayıtlarını okuma :

 

* Read table
READ TABLE t_mara ASSIGNING <lfs_mara>
  WITH KEY matnr = '123456'.
IF sy-subrc EQ 0.
  WRITE: <lfs_mara>-matnr.
ENDIF.
*
* Access via Loop
LOOP AT t_mara ASSIGNING <lfs_mara>.
  WRITE: <lfs_mara>-matnr.
ENDLOOP.

 

 

Kaydı field symbol kullanarak düzenleme:

 

* READ and MODIFY
READ TABLE t_mara ASSIGNING <lfs_mara>
  WITH KEY matnr = '123456'.
IF sy-subrc EQ 0.
  <lfs_mara>-ersda = sy-datum.
ENDIF.
*
* LOOP and MODIFY
LOOP AT t_mara ASSIGNING <lfs_mara>.
  <lfs_mara>-ersda = sy-datum + 1
ENDLOOP.

 

Field symbol kullanırken mutlaka atama yapılıp yapılamdığını kontrol edin, aksi durumda programınız dump alacaktır.
Örnek Kod:

 

* Check if Field-Symbol is assigned
IF <lfs_mara> IS ASSIGNED.
  WRITE: 'Assigned'.
ELSE.
  WRITE: 'Unassigned'.
ENDIF.

 

 

(Visited 968 times, 1 visits today)

About Sinan Dilaver

Sinan Dilaver’in profil fotoğrafı

Check Also

ABAP Program Ekranına Buton Ekleme

ABAP Program Ekranına Buton Ekleme   Daha önceki eğitimlerimizde yaptığımız ekrana, satıcı bilgilerini güncelleyebileceğimiz bir …

Bir Cevap Yazın