Dynamic Comparison of Table Fields With ABAP

Dynamic Comparison of Table Fields With ABAP

ABAP ile tablo alanlarının dinamik olarak karşılaştırılmasını örnek üzerinden bahsediyor olacağım. Diyelim daha önceden oluşturulmuş müşterinin ana verisinde değişiklik yapıldığında bunu takip edip kontrol etmek istiyorsunuz. Alanların karşılaştırılmasını elimizdeki dahili bakım tablosundan veya DD03L tablosundan alanları çekerek kontrol edebiliriz.

Dynamic Comparison of Table Fields With ABAP
Dynamic Comparison of Table Fields With ABAP

  1. Karşılaştırmak istediğimiz alan adlarını internal table içerisine alıyoruz.

    DATA: LT_FIELD TYPE TABLE OF DD03L-FIELDNAME.

  2. Elimizdeki alan adları ile döngüye giriyoruz.

  3. Önceki değeri alan yapısı ile field symbole atıyoruz.

  4. Yeni değeri de alan yapısı ile field symbole atıyoruz.

  5. Daha sonra koşullu karşılaştırmasını yapıyoruz.

DATA: LV_CHANGE TYPE XFELD.
FIELD-SYMBOLS: <I_FIELD> TYPE ANY, <L_FIELD> TYPE ANY.

SELECT FIELDNAME FROM DD03L
  INTO TABLE @DATA(LT_FIELD)
    WHERE TABNAME EQ 'KNA1'.

"I_KNA1 yeni değerlerin olduğu yapı.
SELECT SINGLE * FROM KNA1 INTO @DATA(LS_KNA1) WHERE KUNNR EQ @I_KNA1-KUNNR.
"LS_KNA1'e ise önceki değerleri atıyoruz.

LOOP AT LT_FIELD ASSIGNING FIELD-SYMBOL(<FS_FIELD>).
  ASSIGN COMPONENT <FS_FIELD>-FIELDNAME OF STRUCTURE I_KNA1 TO <I_FIELD>.
  CHECK SY-SUBRC EQ 0.
  ASSIGN COMPONENT <FS_FIELD>-FIELDNAME OF STRUCTURE LS_KNA1 TO <L_FIELD>.
  CHECK SY-SUBRC EQ 0.
"<I_FIELD> ve <L_FIELD> alanlarını karşılaştırıyoruz. Değerler farklı ise değişkene X atıyoruz.
"Yapmak istediğiniz adımları koşulun altında sıralayabilirsiniz.
  IF <I_FIELD> NE <L_FIELD>.
    LV_CHANGE = 'X'.
    EXIT.
  ENDIF.
ENDLOOP.

Diğer ABAP yazılarını incelemek için tıklayınız.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Sitemizde en iyi deneyimi yaşamanızı sağlamak için çerezler kullanmaktadır.