ABAP Drop Down Listbox Selection Change Event

SAP üzerinde geliştirilen bazı programlarda runtime esnasında tetiklenmesi gereken işlemlere ihtiyaç duyulabilir. Bunlardan birisi, ekran üzerinde dinamik oluşan bir listenin olması ve listeden seçilen satırdaki bilgiye göre farklı bir durumun tetiklenmesi gibi örneklendirebiliriz. ABAP ile custom bir ekran tasarımı ile, ekran üzerinde bir input oluşturarak bu inputun tipini listbox ( with key) olarak belirleyebilir ve bu listbox’tan seçtiğimiz item’a ait olan key’in text elementine erişerek bunu ekrandaki başka bir input içerisine yerleştirebiliriz.

İlk olarak Module tarafında ekran tasarımını aşağıdaki resimde olduğu gibi oluşturmalıyız. Ekranda yer alan input değerini ve FCODE kısmını belirliyoruz. Temel ekran tasarımını tamamladıktan sonra malzeme listesinin içeriğini dolduracağımız

Seçim ekranında ki listbox değerlerinin doldurulması ve seçilen list item’a ait key-value değerlerinin alınarak diğer input alanına yansıtılması için gerekli tanımlamalar aşağıdaki gibidir.

"Ekranda yer alan listbox elemanındaki key alanının alınacağı structure
TYPES : BEGIN OF TY_9000,
          MATNR TYPE MARA-MATNR,
        END OF TY_9000.
DATA : GS_9000 TYPE TY_9000.

"Listbox yapısı için gerekli olan structure.
DATA : MALZEME_LIST TYPE VRM_VALUES,
       VALUE        LIKE LINE OF MALZEME_LIST.

" Listeden seçilen malzemeye ait olan satır bilgilerinin toplanacağı structure
TYPES : BEGIN OF TY_MALZEME_LIST,
          MATNR     TYPE MATNR,
          TANIM(20),
        END OF TY_MALZEME_LIST.
DATA : LS_MALZEME_LIST TYPE TY_MALZEME_LIST,
       LT_MALZEME_LIST TYPE TABLE OF TY_MALZEME_LIST.

"Seçilen malzemenin tanımı için eşlenen input
DATA : SELECTED_MALZEME TYPE MATNR.


START-OF-SELECTION.

  CALL SCREEN 9000.

Modül ekranı üzerinde işlem yapacağımız için module ait iki temel yapı içerisinde ilerleyeceğiz. 

  1. PROCESS BEFORE OUTPUT.
    1. List box içerisinde yer alacak item listesinin bu alanda oluşturarak listbox içerisine bind edilecek.  Ben şimdilik dumy data olarak manuel bir liste oluşturdum. Herhangi bir tablodan select işlemi ile LT_MALZEME_LIST internal table içerisine doldurularakta listeyi oluşturabilirsiniz. KEY olarak malzeme numarası VALUE olarak ise malzemenin tanımı olarak belirledi. Listeden seçilen malzeme key’ine ait value değeri olan malzeme tanımını ekranda yer alan seçili malzeme input değerine atamasını gerçekleştirmiş olacağız.
MODULE STATUS_9000 OUTPUT.

  LS_MALZEME_LIST-MATNR = '977691000'.
  LS_MALZEME_LIST-TANIM = 'Malzeme X'.
  APPEND LS_MALZEME_LIST TO LT_MALZEME_LIST.


  LS_MALZEME_LIST-MATNR = '977691001'.
  LS_MALZEME_LIST-TANIM = 'Malzeme Y'.
  APPEND LS_MALZEME_LIST TO LT_MALZEME_LIST.

  LS_MALZEME_LIST-MATNR = '977691002'.
  LS_MALZEME_LIST-TANIM = 'Malzeme Z'.
  APPEND LS_MALZEME_LIST TO LT_MALZEME_LIST.

  LS_MALZEME_LIST-MATNR = '977691003'.
  LS_MALZEME_LIST-TANIM = 'Malzeme T'.
  APPEND LS_MALZEME_LIST TO LT_MALZEME_LIST.

  LS_MALZEME_LIST-MATNR = '977691004'.
  LS_MALZEME_LIST-TANIM = 'Malzeme XX'.
  APPEND LS_MALZEME_LIST TO LT_MALZEME_LIST.

  LS_MALZEME_LIST-MATNR = '977691005'.
  LS_MALZEME_LIST-TANIM = 'Malzeme YY'.
  APPEND LS_MALZEME_LIST TO LT_MALZEME_LIST.


  FIELD-SYMBOLS : <WA_MALZEME_LIST> TYPE TY_MALZEME_LIST.

  LOOP AT LT_MALZEME_LIST ASSIGNING <WA_MALZEME_LIST>.
    VALUE-KEY = <WA_MALZEME_LIST>-MATNR.
    VALUE-TEXT = <WA_MALZEME_LIST>-TANIM.
    APPEND VALUE TO MALZEME_LIST.
  ENDLOOP.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      ID     = 'GS_9000-MATNR'
      VALUES = MALZEME_LIST.
ENDMODULE.
  1. PROCESS AFTER INPUT.
    1. Ekran üzerinde tetiklenecek her türlü komutların gerçekleştirileceği alan. Listbox üzerinden item seçildikten sonra tetiklenmesini istediğimiz her türlü event bu alanda belirlenecek. List box üzerinden item seçildiği anda bu kullanıcı komutu olarak list box’ın event koduna düşecek. burada seçtiğimiz satırı ve satırdaki değerleri alarak istediğimiz işlemi yapabileceğiz.

MODULE USER_COMMAND_9000 INPUT.
  IF SY-UCOMM EQ 'CMB_SEL'.

    DATA : LS_SECILI         TYPE TY_MALZEME_LIST,
           LV_SECILI_MALZEME TYPE MATNR.

    LV_SECILI_MALZEME = GS_9000-MATNR.
    READ TABLE LT_MALZEME_LIST INTO LS_SECILI WITH KEY MATNR = LV_SECILI_MALZEME.

    SELECTED_MALZEME = LS_SECILI-TANIM.

  ENDIF.
ENDMODULE.

 

Sonuç olarak ekrandan seçtiğimiz list item değerini aşağıda görüldüğü gibi diğer input alanına yansıtabiliriz.

Bu aşamaya kadar ki veri değişikliklerini istediğiniz internal table’lar üzerinden gerçekleştirebilirsiniz. Farklı event işlemlerini PROCESS AFTER INPUT üzerinde gerçekleştirebilirsiniz.


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s