ABAP ile oluşturduğumuz programlarda sıkça ihtiyaç duyduğumuz pop-up’lar için hızlı ve basit bir yol bulunmaktadır. Ayrıca bu pop-up içerisine içeriği ve yapısı ne olursa olsun istediğimiz bir internal tabloyu ALV formatında ister pop-up ister ekran üzerine yansıtabiliriz. Bunun için aşağıda ki demo ile daha detaylı bilgi alabilirsiniz.
Konuyla ilgili örnek senaryomuz şu şekilde;
SAP üzerinde bulunan bir tablonun içeriğinde malzeme üretim yeri ve maliyet gibi kolonlar bulunmakta. Ancak bu tabloyu bir internal tablo üzerine çekerek maliyet kolonu sıfırdan büyük, küçük ve eşit olanları bir pop-up üzerinde alv formatında yansıtmak istiyoruz. Ayrıca sıfırdan büyük küçük veya eşit olma durumlarına göre ekleyeceğimiz bir kolonda trafik lambaları benzeri bir uyarı ile göstermek istiyoruz.
İlk olarak tablomuzu bir internal table üzerine alıyoruz ve bu tablo içerisinde loop işlemi esnasında cost alanının sıfırdan büyük küçük eşit olma durumlarına göre trafik lambası kodlarını ekranı yansıtacağımız tablonun yapısındaki ilgili alana veriyoruz. Trafik lambası ikonlarının kodları, aşağıdaki yorum satırlarında belirtlimiştir.
DATA : LT_DEMO_TABLE TYPE TABLE OF ZDEMO_TABLE. SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_DEMO_TABLE FROM ZDEMO_TABLE. " ZDEMO_TABLE tablosundan dönen değerlerin işlenerek sonuç tablosunun oluşturulacağı yapı. TYPES : BEGIN OF TY_RESULT, TRAFFIC_LIGHT(4), MATNR TYPE MATNR, WERKS TYPE WERKS_D, COST TYPE ZDEMO_COST, END OF TY_RESULT. DATA : LS_RESULT TYPE TY_RESULT, LT_RESULT TYPE TABLE OF TY_RESULT. IF SY-SUBRC IS INITIAL. FIELD-SYMBOLS : <WA_DEMO_T> TYPE ZDEMO_TABLE. " ZDEMO Tablosundan dönen veriler içerisinde COST alanının 0'dan büyük, küçük ve eşit olma durumları kontrol ediliyor. " Sıfırdan küçük COST alanı için KIRMIZI lamba işareti olan @0A@, " Sıfırdan büyük COST alanı için YEŞİL lamba işareti olan @08@, " Sıfıra eşit COST alanı için SARI lamba işareti olan @09@ değerlerini structure'daki traffik alanına eklliyoruz. LOOP AT LT_DEMO_TABLE ASSIGNING <WA_DEMO_T>. IF <WA_DEMO_T>-COST LT 0. LS_RESULT-TRAFFIC_LIGHT = '@0A@'. ELSEIF <WA_DEMO_T>-COST GT 0. LS_RESULT-TRAFFIC_LIGHT = '@08@'. ELSEIF <WA_DEMO_T>-COST EQ 0. LS_RESULT-TRAFFIC_LIGHT = '@09@'. ENDIF. LS_RESULT-MATNR = <WA_DEMO_T>-MATNR. LS_RESULT-WERKS = <WA_DEMO_T>-WERKS. LS_RESULT-COST = <WA_DEMO_T>-COST. APPEND LS_RESULT TO LT_RESULT. ENDLOOP.
LT_RESULT internal table üzerinde istediğimiz şekilde verilerimizi oluşturduk. Şimdi bu verileri ALV olarak ekrana yansıtacağız. Oluşturacağımız PERFORM parametrelerinde P_TITLE parametresi ile alv’nin başlık kısmını, P_POPUP parametresine ise eğer X verirsek pop-up olarak eğer boş verirsek direkt olarak ekran üzerinde alv yansıtılacaktır. P_POPUP parametresinin X ve Boş olarak verildiği sonucu iki resim olarak yazının sonunda bulabilirsiniz.
" Eğer P_POPUP parametresini X olarak gönderirsek, uyarı tablosu Pop-Up olarak çıkacaktır. " Eğer P_POPUP parametresini boş olarak gönderirsek, uyarı tablosu standart ALV olarak çıkacaktır. DATA : P_TITLE TYPE STRING VALUE 'Demo Material Cost Result', P_POPUP TYPE XFELD VALUE 'X'. " Sonuç tablosundaki ekran çıktısı için ALV_DISPLAY performunu TITLE ve POPUP parametrelerine bağlı olarak çağırıyoruz. PERFORM ALV_DISPLAY TABLES LT_RESULT USING P_TITLE P_POPUP .
CL_SALV_TABLE fonksiyonu ile verdiğimiz tablonun tipi yapısı ne olursa olsun kendi formatında ALV çevrimi sağlayarak ekrana GO_ALV ile yansıtılması sağlanacaktır.
FORM ALV_DISPLAY TABLES IT_ALV USING F_TITLE F_POPUP. DATA GO_ALV TYPE REF TO CL_SALV_TABLE. TRY. CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = GO_ALV CHANGING T_TABLE = IT_ALV[] ). CATCH CX_SALV_MSG. ENDTRY. DATA: LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST. LR_FUNCTIONS = GO_ALV->GET_FUNCTIONS( ). LR_FUNCTIONS->SET_ALL( 'X' ). IF GO_ALV IS BOUND. IF F_POPUP = 'X'. GO_ALV->SET_SCREEN_POPUP( START_COLUMN = 25 END_COLUMN = 100 START_LINE = 6 END_LINE = 10 ). ENDIF. GO_ALV->DISPLAY( ). ENDIF. ENDFORM.
Program çalıştırıldığında aşağıdaki gibi sonuç elde edilecektir. iki resim arasındaki fark P_POPUP parametresinin X veya boş olması durumlarını göstermektedir. Görüldüğüüzere Tutar kısmı sıfırdan küçük olanlar için kırmızı, sıfırdan büyük olanlar için yeşil, sıfıra eşit olanlar içinde sarı trafik lambası gözükmektedir.