Merhaba arkadaşlar,
Bugün ABAP da ALV(ABAP LİST VIEWER) ‘yi inceleyeceğiz.
ALV nedir?
ABAP LİST VİEWER ,SAP içinde mevcut olan sabit tabloların veya programcı tarafından olusturulan internal tabloların ekranda görüntülenebilmesini ve istenildiği taktirde bu görüntülenen alanlara eventler verebilmemizi sağlayan yapıdır.Yani verileri bir tablo gibi göstermek için üretilmiş bir kontroldür.Tablolar ekranın tamamını kapsayabileceği gibi ;ekranın sadece bir kısmında da gösterilebilir.Exel gibi hücresel bir tasarıma sahiptir.
Pek çok ALV türü mevcut ancak biz en çok kullanılan iki ALV türü olan “‘REUSE_ALV_GRID_DISPLAY” ve “SET_TABLE_FOR_FIRST_DISPLAY ” yi inceleyeceğiz.
En kullanışlı ALV türü ‘REUSE_ALV_GRID_DISPLAY'(Şekil 1) dir. Ekranın tamamında gösterilen tabloların çağırılması için kullanılan fonksiyon modülür.Verileri internal table’ların yapısına uygun olarak ekranda gösterir.REUSE_ALV_GRID_DISPLAY fonksiyonu ile oluşturulan raporlarda kapsamlı ve düzenli bir rapor başlığı yapılabilir. fonksiyon ile başlığa tarih, kayıt sayısı veya herhangi bir değişken yazdırılabilir.Ayrıca bu fonksiyon ile hazırlanan ALV lere sütun rengi, satır rengi ve hücre rengi vermek de daha basittir.
REUSE_ALV_GRID_DISPLAY fonksiyonunun en önemli avantajlarından biride manüel olarak GERİ-ÇIKIŞ-İPTAL tuşlarının ve ekran yaratma zorunluluğunun olmamasıdır. Bu fonksiyon siz raporunuzu yazdığınızda otomatik olarak ekran yaratır ve tuşlara işlevlerini atar.Bu yoğun bir programcı için zamandan tasarruf demektir fakat raporumuzun iki farklı containerden oluşması gerekirse (Şekil 2) REUSE_ALV_GRID_DISPLAY fonksiyonu, ekranı kendisi yarattığı için yetersiz kalacaktır. Bu gibi durumlar için SET_TABLE_FOR_FIRST_DISPLAY fonksiyonu kullanılması tercih edilir.
REUSE_ALV_GRID_DISPLAY fonksiyonu aşağıdaki kod grubu ile kullanılır:
form display_alv_report.
gd_repid = sy–repid.
call function ‘REUSE_ALV_GRID_DISPLAY’
exporting
i_callback_program = gd_repid
i_callback_top_of_page = ‘TOP-OF-PAGE’ “see FORM
i_callback_user_command = ‘USER_COMMAND’
i_grid_title = ‘BAŞLIK’
I_BACKGROUND_ID = ‘ALV_BACKGROUND’
i_callback_pf_status_set = ‘NETPR_PF_STATUS_SET’
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
I_DEFAULT = ‘X’
I_SAVE = ‘A’
IS_VARIANT = VAR
* it_special_groups = gd_tabgroup
* it_events = gt_events
* is_print = gd_prntparams
“i_save = ‘X’
* is_variant = z_template
tables
t_outtab = ITAB
exceptions
program_error = 1
others = 2.
if sy–subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. ” DISPLAY_ALV_REPORT
SET_TABLE_FOR_FIRST_DISPLAY metodu ile oluşturulan ALV(sekil2) ler daha cok ayrıntıya inileceği zaman kullanıır.
Bu ALV metodu bize raporun üstündeki tuşların yapacağı görevleri, görüntülenecek ekranın boyutlarını ve kaç ekranda görüntüleneceğini , rapor ekranının herhangi bir yerinde sabit bir şekilde yazı resim vb bir şey koyabilme olanağı verir ancak kötü yanı bu özelliklerin default olarak belirlenmiş değerleri yoktur yani her yaptığımız raporda tek tek bu ayarları yapmamız gerekir.
SET_TABLE_FOR_FIRST_DISPLAY metodu TOP-OF-PAGE (Sayfa Başlığı) fonksiyonunu desteklemediği için kapsamlı bir sayfa başlığı oluşturmak zordur. Bu ALV metodunda ALV layout’unun grid_title özelliği kullanılabilir ancak yetersizdir.
CONCATENATE ‘TARİH : ‘SY–DATUM+6(2) ‘-‘ SY–DATUM+4(2) ‘-‘ SY–DATUM(4) ‘ – Rapor Başlığı ‘ ‘(‘ LS_DATUM ‘)’ INTO gs_layout–grid_title . “Grid başlığı için sistem saatini değişkene alma
CALL METHOD GR_ALV1->SET_TABLE_FOR_FIRST_DISPLAY “ALV methodu
EXPORTING
I_SAVE = ‘X’
* I_DEFAULT = ‘X’
* I_BYPASSING_BUFFER = ‘X’
IS_VARIANT = gs_variant “Variant tanımlama
IS_LAYOUT = gs_layout
CHANGING
IT_OUTTAB = gt_itab[] “İnternal tablo
IT_FIELDCATALOG = gt_fieldcat “fieldcatalog
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
others = 4
.
IF SY–SUBRC <> 0.
MESSAGE ID SY–MSGID TYPE SY–MSGTY NUMBER SY–MSGNO “hata mesajı
WITH SY–MSGV1 SY–MSGV2 SY–MSGV3 SY–MSGV4.
ENDIF.
ENDIF.
ENDMODULE. ”
Şekil
SET_TABLE_FOR_FIRST_DISPLAY ile 2 container yaratma;
IF gr_cont1 is initial.
create OBJECT gr_cont1
EXPORTING
container_name = ‘CC_01’. “İlk container ismi
CREATE OBJECT gr_alv1
EXPORTING
i_parent = gr_cont1 .
CALL METHOD GR_ALV1->SET_TABLE_FOR_FIRST_DISPLAY “ALV methodu
EXPORTING
I_SAVE = ‘X’
IS_VARIANT = gs_variant2
CHANGING
IT_OUTTAB = GT_ITAB1[]
IT_FIELDCATALOG = gt_fieldcat[]
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
others = 4
.
IF SY–SUBRC <> 0.
MESSAGE ID SY–MSGID TYPE SY–MSGTY NUMBER SY–MSGNO “hata mesajı
WITH SY–MSGV1 SY–MSGV2 SY–MSGV3 SY–MSGV4.
ENDIF.
create OBJECT gr_cont2
EXPORTING
container_name = ‘CC_02’. “İkinci container ismi
CREATE OBJECT gr_alv2
EXPORTING
i_parent = gr_cont2.
CALL METHOD GR_ALV2->SET_TABLE_FOR_FIRST_DISPLAY “ALV methodu
EXPORTING
I_SAVE = ‘X’
IS_VARIANT = gs_variant
CHANGING
IT_OUTTAB = GT_ITAB2 []
IT_FIELDCATALOG = gt_fieldcat_detay
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
others = 4
.
IF SY–SUBRC <> 0.
MESSAGE ID SY–MSGID TYPE SY–MSGTY NUMBER SY–MSGNO “hata mesajı
WITH SY–MSGV1 SY–MSGV2 SY–MSGV3 SY–MSGV4.
ENDIF.
ENDMODULE.
Kod grubu ile kullanılır.
İyi Çalışmalar…:)
NOT : Makaleye olan katkıları için Efsan Grup Uygulama Geliştirme Sorumlusu Tuğrul Bozkurt’a teşekkür ediyorum.