Modern ABAP Syntax ve 7.50+ Yenilikleri

COND, SWITCH, VALUE ve daha fazlası ile kodunuzu modernize edin.

ABAP dili, 7.40 sürümüyle başlayan ve 7.50+ sürümleriyle devam eden süreçte büyük bir evrim geçirdi. Eski, uzun ve hantal kod blokları yerini daha fonksiyonel, okunabilir ve kısa ifadelere bıraktı. Bu yazımızda, her ABAP geliştiricisinin alet çantasında bulunması gereken modern teknikleri inceliyoruz.

1. Temel Geliştirmeler (7.40)

Artık standart haline gelmiş olan bu özellikler, kod kalabalığını azaltmanın ilk adımıdır.

Inline Declarations

* Veri tanımlama ve atama aynı anda
DATA(lv_text) = 'Merhaba SAP'.
DATA(lt_mara) = VALUE mara_tt( ). 

* Loop içinde kullanım
LOOP AT lt_items INTO DATA(ls_item).
ENDLOOP.
            

2. Mantıksal Operatörler: COND ve SWITCH (7.40 SP08+)

Uzun IF-ELSE ve CASE-ENDCASE bloklarını tek bir atama işlemine indirgeyebilirsiniz. Bu, kodun akışını takip etmeyi kolaylaştırır.

COND (Koşullu Atama)

* Eski Yöntem: IF-ELSE
DATA: lv_status_text TYPE string.
IF lv_status = 'E'.
  lv_status_text = 'Hata'.
ELSEIF lv_status = 'S'.
  lv_status_text = 'Başarılı'.
ELSE.
  lv_status_text = 'Bilinmiyor'.
ENDIF.

* Yeni Yöntem: COND
DATA(lv_status_text) = COND string( 
  WHEN lv_status = 'E' THEN 'Hata'
  WHEN lv_status = 'S' THEN 'Başarılı'
  ELSE 'Bilinmiyor' 
).
            

SWITCH (Anahtarlı Atama)

DATA(lv_day) = SWITCH string( sy-index
  WHEN 1 THEN 'Pazartesi'
  WHEN 2 THEN 'Salı'
  ELSE 'Diğer' 
).
            

3. Gelişmiş Tablo İşlemleri: VALUE ve BASE

Internal table doldururken APPEND satırlarını tek tek yazmak yerine VALUE operatörünü kullanın. BASE eki ile mevcut bir tabloya ekleme yapabilirsiniz.

* Yeni bir tablo oluşturma
DATA(lt_numbers) = VALUE int4_table( ( 1 ) ( 2 ) ( 3 ) ).

* Mevcut tabloya ekleme yapma (BASE)
DATA(lt_new_numbers) = VALUE int4_table( 
  BASE lt_numbers 
  ( 4 ) 
  ( 5 ) 
).
" Sonuç: 1, 2, 3, 4, 5
            

4. Yeni Open SQL (7.50+)

ABAP 7.50 ile birlikte Open SQL (artık ABAP SQL olarak anılıyor) çok daha yetenekli hale geldi. Değişkenlerin başına @ (host variable) işareti koymak zorunlu hale geldi, ancak karşılığında SQL içinde CASE, aritmetik işlemler ve string birleştirme yapabiliyoruz.

SELECT order_id,
       CASE WHEN amount > 1000 THEN 'Yüksek' ELSE 'Düşük' END AS amount_category,
       CONCAT( name_first, name_last ) AS full_name
  FROM zorders
  WHERE order_date = @p_date
  INTO TABLE @DATA(lt_results).
            

5. Dynamic Type Check: IS INSTANCE OF

Özellikle OO geliştirmelerde generic tiplerle (data reference, object reference) çalışırken tip kontrolü yapmak artık daha kolay.

IF lo_object IS INSTANCE OF zcl_my_class.
  " Tip dönüşümü güvenli bir şekilde yapılabilir
  DATA(lo_my) = CAST zcl_my_class( lo_object ).
ENDIF.
            

Sonuç

Bu yapılar, kodunuzu sadece kısaltmakla kalmaz, aynı zamanda bakımını kolaylaştırır. "Eski kod çalışıyor, dokunma" mantığından sıyrılıp, her yeni geliştirmede bu modern syntax'ları kullanmak, sizi geleceğin (S/4HANA) dünyasına hazırlar.

← Blog'a Dön