Gönderi tarihi 19 Haziran 2019 Onur Yazıcı tarafından
SAP üzerinde iki farklı programın birbirleri ile arasında ilişki kurmak istendiği zaman kullanılan submit and return yapısı bazı senaryolar için vazgeçilmez bir yöntemdir.
Bir abap raporu hazırlanmak istendiğinde bu raporun verileri başka bir programın türettiği veriler ile sunulmak istenirse, istenilen rapora ilgili parametrelerle submit işlemi yapılır ve dönen liste memory üzerinden alınarak istenilen tablo tipine çevrilir ve üzerinde her türlü işlemler yapıldıktan sonra tekrar sunulabilir. Böylelikle bir programın türettiği veriler başka bir programda yeniden kodlama yapılmasına gereksinim duyulmadan farklı şekillerde sunulabilir. Bu konuyla ilgili olarak örnek program ve kodlar aşağıdaki gibidir.
İlk olarak basit bir alv raporu türeten programımızı hazırlıyoruz. Demo olarak oluşturduğumuz bir tablodaki verileri üretim yeri parametresi ile olduğu gibi bir alv raporu olarak ekrana yansıtıyoruz.
PARAMETERS : P_WERKS TYPE WERKS_D.
SELECT * INTO TABLE @DATA(LT_DEMO_TABLE) FROM ZDEMO_TABLE WHERE WERKS EQ @P_WERKS.
Daha sonra birinci programın sonuç listesini kullanarak oluşturacağımız ikinci programın yazımına geçiyoruz.
TYPES: BEGIN OF LISTOUT,
LINE(1024) TYPE C,
END OF LISTOUT.
DATA : LS_LISTOUT TYPE LISTOUT.
DATA : LT_LISTOUT TYPE TABLE OF LISTOUT.
DATA : LIST_TAB TYPE TABLE OF ABAPLIST.
*TYPES : LT_DEMO_TABLE TYPE TABLE OF ZDEMO_TABLE.
DATA : LS_DEMO_TABLE TYPE ZDEMO_TABLE.
DATA : LT_DEMO_TABLE TYPE TABLE OF ZDEMO_TABLE.
" Submit Demo 1 Program With Parameters
WITH P_WERKS  = '1000'
" Get Data List From Memory ( Demo 1 Program Result List )
" Convert List Data to ASCI standart
LISTOBJECT         = LIST_TAB
LISTASCI           = LT_LISTOUT
EMPTY_LIST         = 1
" Delete Write List Header and Footer Lines
DELETE LT_LISTOUT INDEX 1.
DESCRIBE TABLE LT_LISTOUT LINES DATA(LV_LINE).
DELETE LT_LISTOUT INDEX LV_LINE.
" Append List to Table Type
LOOP AT LT_LISTOUT INTO LS_LISTOUT.
LS_DEMO_TABLE-MATNR = LS_LISTOUT-LINE+11(9).
LS_DEMO_TABLE-WERKS = LS_LISTOUT-LINE+21(10).
DATA(LV_TARIH) = LS_LISTOUT-LINE+32(10).
LS_DEMO_TABLE-URETIM_TARIHI = LV_TARIH+6(4) && LV_TARIH+3(2) && LV_TARIH+0(2).
DATA(LV_COST) = LS_LISTOUT-LINE+43(5).
REPLACE ALL OCCURRENCES OF ',' IN LV_COST WITH '.'.
LS_DEMO_TABLE-COST = LV_COST.
APPEND LS_DEMO_TABLE TO LT_DEMO_TABLE.
CALL FUNCTION 'LIST_FREE_MEMORY'.
" Display Table To ALV
I_STRUCTURE_NAME   = 'ZDEMO_S_TABLE'
T_OUTTAB           = LT_DEMO_TABLE.
Yukarıda ki kodlama sırasıyla şu şekildedir.
İlk olarak submit sonucunda alacağımız tablo tipine uygun LISTOUT ve structure tanımlamaları yapılıyor. daha sonrasında en son olarak ekrana bastıracağımız tablo tipine ilişkin tanımlamalar yapılıyor.
SUBMIT kod bloğunda ise, birinci programın alacağı werks parametresini ekran adına göre belirleyerek istediğimiz parametreyi belirtiyoruz. An Return Exporting List To Memory ile birinci programda parametreye göre dönüş yapan listeyi memory üzerinde tutuyoruz.
Memory’deki listeyi almak için List_From_Memory fonksiyonu kullanıyoruz. Bu fonksiyonda bize memory üzerindeki listenin ASCI’ye uygun olmadığını göreceksiniz. Bunu ASCI formatına çevirmek için List_to_Asci fonksiyonuna çeviriyoruz. Dönüş tablosunda Write ile bastırılmış bir tablo göreceksiniz. Artık birinci programdaki listenin ham halini elimizde bulunduruyoruz. Ancak bu listeyi parçalayarak istediğimiz bir tablo tipine aktarmamız gerekiyor. Loop işlemi ile istediğimiz alanları karakter sayılarına göre alıp tablo tipine aktarıyoruz. Daha sonra oluşan tablomuzu istediğiniz şekilde üzerinde hangi işlemi yapmak isterseniz size kalmış. Bu tabloyu ekrana bastırdıktan sonra işlemi tamamlıyoruz.
Posted in SAPEtiketler ABAP, list to asci, list to memory, list_to_asci, list_to_memory, return, SAP, submit, submit and return