SAP – ABAP Custom Search Help

SAP-ABAP üzerinde modül programlama ile geliştirilen ekranlarda yer alan input alanları için custom olarak search help yaratmak istediğimizde   F4IF_INT_TABLE_VALUE_REQUEST fonksiyonu çok büyük bir kolaylık sağlamaktadır. Bazı senaryolarda sistemdeki hazır search help işlemleri yeterli olmadığında kendimiz bu fonksiyonu kullanarak istediğimiz şekilde verilere erişim imkanı bulabiliriz. Örnek bir senaryo üzerinden ilerleyecek olursak;

Oluşturduğunuz bir modül ekranında Üretim Yeri ve Malzeme Numarası girişlerinin olduğunu varsayalım. Ancak giriş yapılacak olan malzeme numarası için girdiğiniz üretim yeri numarasına göre bir search help oluşturmak istediğinizde nasıl bir yöntem uygulanmalı üzerine abap işlemleri aşağıdaki şekilde olacaktır.

İlk olarak program üzerinde yeni bir ekran yaratıyoruz. Yarattığımız ekran üzerinde Üretim Yeri ve Malzeme Numarası için 2 tane input ve malzeme numarasının yanında Malzeme Bul isminde bir search help butonu yerleştiriyoruz.

Malzeme Bul butonuna ait FctCode alanına belirleyeceğiniz bir isim yazıyoruz. Bunun sebebi butona basıldığı anda click eventinin tetiklendiğini anlamamız için hangi isimdeki butona tıklandı olayını bize sunacaktır.

 

Ekranda yer alan Üretim yeri ve Malzeme Numarası için belirleyeceğiniz isimler ile birebir aynı olmak koşulu ile iki değişken tanımlanması gerekmektedir.

 

Değişkenleri tanımladıktan sonra START-OF-SELECTION Eventi arkasından hemen oluşturduğumuz bu ekranı çağırabiliriz.

 

DATA : LV_MALZEME TYPE MATNR,
       LV_URETIM_YERI TYPE WERKS_D.

START-OF-SELECTION.

  CALL SCREEN 0010.

Oluşturduğumuz screen içerisindeki change screen kısmında yer alan MODULE USER_COMMAND_0010 isimli metodu oluşturarak ekrandaki tetikleyici isimlere ait aksiyonları yakalayabilir .

 

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0010.
*
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0010.

USER_COMMAND işleminde, belirlediğimiz butonun FctCode alanındaki isim belirtilir ve eğer bu isme ait bir butona basılırsa gereken fonksiyon çağrılır. Search help ile ilgili bu fonksiyona ait kullanılan kodların açıklaması aşağıda yorumlardaki alanlarda bulunmaktadır.

MODULE USER_COMMAND_0010 INPUT.

  IF   SY-UCOMM = '&F03' OR SY-UCOMM = '&F12' OR SY-UCOMM = '&F15'.
    
    LEAVE TO SCREEN 0.

  ELSEIF SY-UCOMM EQ 'SRC_MLZ'.

    DATA: S_SRCH TYPE DSELC,
        T_SRCH TYPE STANDARD TABLE OF DSELC.
    DATA : LV_MATNR TYPE MATNR,
           LV_WERKS TYPE WERKS_D.

    DATA : LT_DEMO_TABLE TYPE TABLE OF ZDEMO_TABLE,
           LT_RETURN     TYPE TABLE OF DDSHRETVAL.
    
    " Eğer Üretim Yeri bilgisi girilmişse, girilen üretim yeri
    " numarasına göre tablodaki veriler çekilir.
    IF LV_URETIM_YERI IS NOT INITIAL.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_DEMO_TABLE
      FROM ZDEMO_TABLE WHERE WERKS EQ LV_URETIM_YERI.
        
    " Eğer Üretim Yeri bilgisi girilmemişse, tablodaki tüm
    " veriler çekilir.
    ELSE.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_DEMO_TABLE
      FROM ZDEMO_TABLE.
    ENDIF.


    " Search Help Pop-Up tablosu içerisinde, tablodan çektiğimiz
    " hangi alanların gösterileceğini belirlediğimiz alan.
    S_SRCH-FLDNAME     = 'F0003'.
    S_SRCH-DYFLDNAME   = 'LV_MATNR'.
    APPEND S_SRCH TO T_SRCH.
    CLEAR S_SRCH.

    S_SRCH-FLDNAME     = 'F0004'.
    S_SRCH-DYFLDNAME   = 'LV_WERKS'.
    APPEND S_SRCH TO T_SRCH.
    CLEAR S_SRCH.
    
    " Seçim ekranı üzerinde bize gereken MATNR alanı olduğunu belirtiyoruz
    " bu alanın bir değişkene atanması için tanımlamayı sağlıyoruz.
    " TABLES Alanında yer alan VALUE_TAB alanına search help için 
    " kullanacağımız tablodan çektiğimiz verilerin bulunduğu internal table veriliyor.
    " DYNPFLD_MAPPING alanına bir önceki adımda oluşturduğumuz gerekli alanların bulunduğu 
    " tablo tanımlaması sağlanıyor.
    " sonuç olarak verdiğimiz bu verilere göre LT_RETURN tablosu içerisinde 
    " search help pop-up tablosu oluşturulacak ve ekrana yansıtılacak.
    
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          RETFIELD        = 'MATNR'
          DYNPROFIELD     = 'LV_MATNR'
          WINDOW_TITLE    = 'Malzeme Seçim Ekranı'
          VALUE_ORG       = 'S'
        TABLES
          VALUE_TAB       = LT_DEMO_TABLE
          RETURN_TAB      = LT_RETURN
          DYNPFLD_MAPPING = T_SRCH
        EXCEPTIONS
          PARAMETER_ERROR = 1
          NO_VALUES_FOUND = 2
          OTHERS          = 3.

   IF SY-SUBRC EQ 0.
    IF LT_RETURN IS NOT INITIAL.
     FIELD-SYMBOLS : <WA> TYPE DDSHRETVAL.
     " Pop-up tablosundan seçilen veri okunur ve malzeme alanına ait değişkene atanı.
     " Bu değişken adı aynı zamanda ekrandaki input alanının adı olduğundan
     " birebir ekrandaki input alanına yerleştirilir.
     READ TABLE LT_RETURN ASSIGNING <WA> WITH KEY RETFIELD = 'LV_MATNR'.
        LV_MALZEME = <WA>-FIELDVAL.
    ENDIF.
   ENDIF.
  ENDIF.

ENDMODULE.

 

Ekran üzerinde oluşturduğumuz bu yapının sonucunda aşağıdaki gibi bir sonuç ortaya çıkacaktır.


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