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