Mustafa HAMIT

ABAP’ta CASE Kullanımı (Klasik CASE, İç İçe CASE ve İpuçları) IF Karşılaştırması

CASE, ABAP’ta bir değişkenin değerine göre farklı işlemler yapmak istediğimizde kullanılan kontrol yapısıdır. Birden fazla IF / ELSEIF yerine daha okunur ve bakımı kolay bir yapı sağlar. Ancak bazı durumlarda IF daha uygundur. Bu yazıda CASE’i anlatıp aynı senaryonun IF ile nasıl yazıldığını ve farklarını da göstereceğim.


1) Klasik CASE yapısı

En temel kullanım şablonu:

CASE lv_value.
  WHEN 'A'.
    "işlem 1
  WHEN 'B'.
    "işlem 2
  WHEN OTHERS.
    "hiçbiri değilse
ENDCASE.

2) Örnek: Satış sipariş türüne (AUART) göre mesaj (CASE ile)

Satış sipariş türü genelde VBAK-AUART alanında tutulur. Aşağıdaki örnekte AUART değerine göre ekrana açıklama yazdırıyoruz.

DATA lv_auart TYPE vbak-auart VALUE 'OR'.

CASE lv_auart.
  WHEN 'OR'.
    WRITE: / 'Standart Siparis (OR)'.
  WHEN 'TA'.
    WRITE: / 'Teklif (TA)'.
  WHEN 'RE'.
    WRITE: / 'Iade Siparisi (RE)'.
  WHEN OTHERS.
    WRITE: / 'Bilinmeyen / Diger siparis turu'.
ENDCASE.

3) Tek bir WHEN içinde birden fazla değer

Aynı blokta birden fazla sipariş türünü yakalayabilirsin:

CASE lv_auart.
  WHEN 'OR' OR 'ZOR'.
    WRITE: / 'Standart siparis ailesi (OR/ZOR)'.
  WHEN 'TA' OR 'ZTA'.
    WRITE: / 'Teklif ailesi (TA/ZTA)'.
  WHEN OTHERS.
    WRITE: / 'Diger'.
ENDCASE.

4) İç içe CASE (Nested CASE) örneği

Bazen önce sipariş türüne, sonra da satış organizasyonuna (VKORG) göre karar vermek gerekir.

DATA lv_auart TYPE vbak-auart VALUE 'OR'.
DATA lv_vkorg TYPE vbak-vkorg VALUE '1000'.

CASE lv_auart.
  WHEN 'OR'.
    CASE lv_vkorg.
      WHEN '1000'.
        WRITE: / 'OR - 1000 satis org: ozel kural'.
      WHEN OTHERS.
        WRITE: / 'OR - diger satis org'.
    ENDCASE.

  WHEN 'RE'.
    WRITE: / 'Iade siparisi (RE)'.

  WHEN OTHERS.
    WRITE: / 'Diger siparis turu'.
ENDCASE.

5) Aynı senaryonun IF / ELSEIF ile yazımı (karşılaştırma)

CASE yerine IF ile de aynı işi yapabilirsin:

DATA lv_auart TYPE vbak-auart VALUE 'OR'.

IF lv_auart = 'OR'.
  WRITE: / 'Standart Siparis (OR)'.

ELSEIF lv_auart = 'TA'.
  WRITE: / 'Teklif (TA)'.

ELSEIF lv_auart = 'RE'.
  WRITE: / 'Iade Siparisi (RE)'.

ELSE.
  WRITE: / 'Bilinmeyen / Diger siparis turu'.
ENDIF.

Birden fazla değer tek blokta istenirse:

IF lv_auart = 'OR' OR lv_auart = 'ZOR'.
  WRITE: / 'Standart siparis ailesi (OR/ZOR)'.

ELSEIF lv_auart = 'TA' OR lv_auart = 'ZTA'.
  WRITE: / 'Teklif ailesi (TA/ZTA)'.

ELSE.
  WRITE: / 'Diger'.
ENDIF.

6) CASE mi IF mi? Ne zaman hangisi?

CASE daha iyi olur:

  • Tek bir değişkenin değerine göre çok sayıda “eşitlik” kontrolü yapıyorsan
  • Okunabilirliği artırmak istiyorsan
  • Sabit değerler (OR, TA, RE gibi) üzerinden dallanıyorsan

IF daha iyi olur:

  • Koşullar sadece eşitlik değilse (>, <, BETWEEN, AND/OR karmaşık ifadeler)
  • Birden fazla değişken aynı anda kontrol ediliyorsa (ör. AUART + VKORG + VKBUR gibi)
  • Karmaşık mantık ve erken çıkış (RETURN/CONTINUE) gerekiyorsa

Abap’ta IF kullanımı için bu yazıyı okuyabilirsiniz.

Link: https://www.mustafahamit.com/abap-if-kullanimi-tum-operatorler-ve-kosullar-orneklerle-rehber/

Loading

Bir yanıt yazın