Wednesday, July 13, 2011
Arka Planda Program Çalıştırmak ve Görüntülemek
Derlenmesi uzun süren programların biz başka işle meşgulken arka planda çalışmasını isteyebiliriz. Bu durumda aşaüğıdaki adımlar izlenerek programın arka planda çalışması sağlanır.
1- Derkenmek üzere SE38 (ABAP Editor) açılır.
2 - Arka planda çalıştırmak istediğimiz program seçilir. Ben burda daha önce hazıladğım Z_BACKGROUND_PROGRAM 'ı seçiyorum.
3- Daha sonra direk display demek yerine yukarıda görüldüğü üzere Program>> Execure >> Background Seçilir.
4- Çıkan ekranda "Execute Immed." butonuna basılarak derlenme işlemi gerçekleştirilir.
5- Arka planda çalıştırdığımız prgoramı görüntülemek için ilk menüden SM37'ye girilir.
6- Çıkan ekranda üst menüden Execut butonuna basılır.
7- Arka planda çalıştırdığımız program seçilir.
8- Çıkan ekranda TYPE 'ın altındaki ikona taklanarak programımızın derlenmiş halini görüntüleyebiliriz.
9- Üstte daha önceden yazdığımız program derlenmiş olarak gözükmekte.
Ben basitçe WRITE:/ 'backgorunda çalışan program görüntüleniyor.'. yazmıştım.
Tuesday, July 12, 2011
ABAP - Subroutine Kullanarak Recursive Program Yapmak
ABAP'ta PERFORM ifadesi program içinde alt bir programa(subroutine) dallanmasını sağlar. Böylece uzun bir program parçasını sadece PERFORM ifadesini yazarak tekrar tekrar çağrılabilir.
Aşağıdaki örnekte SUBROUTINE kullanarak recursive bir şekilde kullanıcıdan alınan rakamdan geriye sayan bir program.
Aşağıdaki örnekte SUBROUTINE kullanarak recursive bir şekilde kullanıcıdan alınan rakamdan geriye sayan bir program.
REPORT Z_PERFORM_REC. parameters sayi type i. * perform test. * form test. if sayi > 0. write :/ 'sayi :', sayi . sayi = sayi - 1. PERFORM TEST. else. write 'islem tamamlandi'. endif. endform.
Programda SAYI değişkenini kullanıcıdan alınıyor. Sonra PERFORM komutu ile TEST formunun içine giriyor. Burda SAYI değişkeni 0'dan büyükse SAYI'yi yazdırıyor, sonra '1' çıkartıp tekrar kendini çağırıyor. Ardından tekrar aynı işlem gerçekleşiyor. Bu işlem SAYI'nın değeri 0 olana kadar devam ediyor. Ardından ENDFORM ifadesiyle SUBROUTINE'den çıkılıyor.
Monday, July 11, 2011
ABAP- Dinamik ve Statik Kaynakta Belirtme
Statik veri çekme database'deki her hangi bir tablodan bir filtre uygulamaksızın belli sayıda satırın getirilmesini sağlar. Aşağıda MARA tablosundan MANDT ve ERNAM kolonlarını çeken ABAP kodları mevcut. Görüldüğü üzere "FROM mara UP TO 4 ROWS." komutu ile tablodan sadece 4 satır çağrılmış.
Dinamik'te ise WHERE ifadesi kullanılarak hedef tablo filtre edilerek getirilir. Aşağıdaki kodlarda MANDT kolonunun 800'e eşit olduğu satırlar filtre edilerek ekrana çağrılır.
REPORT demo_select_static_database.
DATA wa TYPE mara.
SELECT *
INTO wa
FROM mara UP TO 4 ROWS.
WRITE: / wa-mandt, wa-ernam.
ENDSELECT.
Program çıktısı:Dinamik'te ise WHERE ifadesi kullanılarak hedef tablo filtre edilerek getirilir. Aşağıdaki kodlarda MANDT kolonunun 800'e eşit olduğu satırlar filtre edilerek ekrana çağrılır.
REPORT demo_select_dynamic_database . DATA wa TYPE mara. SELECT * INTO wa FROM ('mara') CLIENT SPECIFIED WHERE mandt = '800'. WRITE: / wa-mandt, wa-ernam. ENDSELECT.
Programı çıktısı:
Friday, July 08, 2011
ABAP- INNER ve LEFT OUTER JOIN
Aşağıda basit bir LEFT OUTER JOIN örneği mevcut.
Program çıktısı aşağıdaki gibidir. Görüldüğü üzere FRANKFURT ile eşleşmeyen satırlar da çağrılmış durumda.
Aynı örnek INNER JOIN ile yapıldığında ise FRANKFURT'la eşleşmeyen satırlar gözükmeyecektir.
Program çıktısı aşağıdaki gibidir.
REPORT demo_select_left_outer_join .
DATA: BEGIN OF wa, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, connid TYPE spfli-connid, cityfrom TYPE spfli-cityfrom, END OF wa, itab LIKE SORTED TABLE OF wa WITH NON-UNIQUE KEY carrid. SELECT s~carrid s~carrname p~connid p~cityfrom INTO CORRESPONDING FIELDS OF TABLE itab FROM scarr AS s LEFT OUTER JOIN spfli AS p ON s~carrid = p~carrid AND p~cityfrom = 'FRANKFURT'. LOOP AT itab INTO wa. WRITE: / wa-carrid, wa-carrname, wa-connid, wa-cityfrom. ENDLOOP.
Program çıktısı aşağıdaki gibidir. Görüldüğü üzere FRANKFURT ile eşleşmeyen satırlar da çağrılmış durumda.
Aynı örnek INNER JOIN ile yapıldığında ise FRANKFURT'la eşleşmeyen satırlar gözükmeyecektir.
REPORT demo_select_inner_join .
DATA: BEGIN OF wa,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
connid TYPE spfli-connid,
cityfrom TYPE spfli-cityfrom,
END OF wa,
itab LIKE SORTED TABLE OF wa
WITH NON-UNIQUE KEY carrid.
SELECT s~carrid s~carrname p~connid p~cityfrom
INTO CORRESPONDING FIELDS OF TABLE itab
FROM scarr AS s
INNER JOIN spfli AS p ON s~carrid = p~carrid AND
p~cityfrom = 'FRANKFURT'.
LOOP AT itab INTO wa.
WRITE: / wa-carrid, wa-carrname, wa-connid, wa-cityfrom.
ENDLOOP.
Program çıktısı aşağıdaki gibidir.
ABAP - TYPES ve DATA ifadeleri kullanımı
TYPES ifadesi programda yerel veri TYPE'ları oluşturmak için kullanılır.
DATA ise programda yeni bir veri objesi oluşturmak için kullanılır.
Aşağıda basit bir örnek mevcut.
Bu programda yazi ve sonuc, yerel data Type'ları olarak tanımlanmış. Böylelikle amount ve text gibi yeni data objeleri tanımlarken 'c' veya 'p' yazmak yerine bu yerel ifadeler kullanılır. Bu programı aşağıdaki gibi de yazsak bir şey fark etmeyecekti.
Aşağıda başka bir örnek daha mevcut. Bu örnek biraz daha amaca uygun, tekrar tekrar uzun bir şekilde TYPE yapısı yazmak yerine önceden tanımlanmış yerel TYPE'ı kullanarak DATA objelerine referans veriyor.
Yukarıdaki örnekte name ve mylist yapıları yerel TYPE olarak tanımlanarak programın sonraki parçalarında list1, list2 ve list3; DATA yapılarına tek bir ifade olarak referans gösterilmiş. Daha sonraki adımlarda ise list1, list2 ve list3 DATA yapısına veriler girilmiş ve yazdırılmış.
LIKE ve TYPE 'ın kullanımı
Yukarıdaki örnekteki gibi yerel TYPE tanımlamayıp, aynı yapıyı tekrar tekrar kullanmak isteseydik. Bu durumda ilk DATA yapısını tanımlayıp sonraki yapılarda LIKE ifadesini kullanarap ilk DATA yapısı referans alınabilir. Aşağıdaki örnkte TYPES ifadesi kullanılmadan aynı program derlenmiştir program çıktısı yukardakinin aynısı olacaktır.
DATA ise programda yeni bir veri objesi oluşturmak için kullanılır.
Aşağıda basit bir örnek mevcut.
REPORT demo_types_statement. TYPES yazi(10) TYPE c. TYPES sonuc TYPE p DECIMALS 2. DATA text TYPE yazi. DATA amount TYPE sonuc. text = ' 4 / 3 = '. amount = 4 / 3 . WRITE: text, amount.
Program çıktısı aşağıdaki gibidir.
Bu programda yazi ve sonuc, yerel data Type'ları olarak tanımlanmış. Böylelikle amount ve text gibi yeni data objeleri tanımlarken 'c' veya 'p' yazmak yerine bu yerel ifadeler kullanılır. Bu programı aşağıdaki gibi de yazsak bir şey fark etmeyecekti.
REPORT demo_types_statement.
*
*TYPES yazi(10) TYPE c.
*TYPES sonuc TYPE p DECIMALS 2.
DATA text(10) TYPE c.
DATA amount TYPE p DECIMALS 2.
text = ' 4 / 3 = '.
amount = 4 / 3 .
WRITE: text, amount.
Aşağıda başka bir örnek daha mevcut. Bu örnek biraz daha amaca uygun, tekrar tekrar uzun bir şekilde TYPE yapısı yazmak yerine önceden tanımlanmış yerel TYPE'ı kullanarak DATA objelerine referans veriyor.
REPORT demo_structure. TYPES: BEGIN OF name, title(5) TYPE c, first_name(10) TYPE c, last_name(10) TYPE c, END OF name. TYPES: BEGIN OF mylist, client TYPE name, number TYPE i, END OF mylist. DATA list1 TYPE mylist. DATA list2 TYPE mylist. DATA list3 TYPE mylist. list1-client-title = 'Lord'. list1-client-first_name = 'Howard'. list1-client-last_name = 'Mac Duff'. list1-number = 1. list2-client-title = 'Mr.'. list2-client-first_name = 'Kerem izzet'. list2-client-last_name = 'Atam'. list2-number = 2. list3-client-title = 'Sir'. list3-client-first_name = 'Hasan'. list3-client-last_name = 'Huseyin'. list3-number = 3. WRITE list1-client-title. WRITE list1-client-first_name. WRITE list1-client-last_name. WRITE / 'Number'. WRITE list1-number. skip. WRITE list2-client-title. WRITE list2-client-first_name. WRITE list2-client-last_name. WRITE / 'Number'. WRITE list2-number. skip. WRITE list3-client-title. WRITE list3-client-first_name. WRITE list3-client-last_name. WRITE / 'Number'. WRITE list3-number.
Program çıktısı aşağıdaki gibidir.
Yukarıdaki örnekte name ve mylist yapıları yerel TYPE olarak tanımlanarak programın sonraki parçalarında list1, list2 ve list3; DATA yapılarına tek bir ifade olarak referans gösterilmiş. Daha sonraki adımlarda ise list1, list2 ve list3 DATA yapısına veriler girilmiş ve yazdırılmış.
LIKE ve TYPE 'ın kullanımı
Yukarıdaki örnekteki gibi yerel TYPE tanımlamayıp, aynı yapıyı tekrar tekrar kullanmak isteseydik. Bu durumda ilk DATA yapısını tanımlayıp sonraki yapılarda LIKE ifadesini kullanarap ilk DATA yapısı referans alınabilir. Aşağıdaki örnkte TYPES ifadesi kullanılmadan aynı program derlenmiştir program çıktısı yukardakinin aynısı olacaktır.
REPORT demo_structure. DATA : BEGIN OF name, title(5) TYPE c, first_name(10) TYPE c, last_name(10) TYPE c, END OF name. DATA : BEGIN OF list1, client LIKE name, number TYPE i, END OF list1. DATA list2 LIKE list1. DATA list3 LIKE list1. list1-client-title = 'Lord'. list1-client-first_name = 'Howard'. list1-client-last_name = 'Mac Duff'. list1-number = 1. list2-client-title = 'Mr.'. list2-client-first_name = 'Kerem izzet'. list2-client-last_name = 'Atam'. list2-number = 2. list3-client-title = 'Sir'. list3-client-first_name = 'Hasan'. list3-client-last_name = 'Huseyin'. list3-number = 3. WRITE list1-client-title. WRITE list1-client-first_name. WRITE list1-client-last_name. WRITE / 'Number'. WRITE list1-number. skip. WRITE list2-client-title. WRITE list2-client-first_name. WRITE list2-client-last_name. WRITE / 'Number'. WRITE list2-number. skip. WRITE list3-client-title. WRITE list3-client-first_name. WRITE list3-client-last_name. WRITE / 'Number'. WRITE list3-number.
Thursday, July 07, 2011
ABAP'da basit INNER JOIN Uygulaması
SAP GUI'de MARA ve MAKT tabloları arasında basit bir INNER JOIN uygulaması kodlar aşağıdaki gibidir. matnr ve mandt iki tabloda da bulunan key attribute'lar oldukları için JOIN'de tabloları bağlamak için kullanılır.
REPORT demo_select_left_outer_join . DATA: BEGIN OF wa, matnr TYPE MARA-matnr, ersda TYPE MARA-ersda, spras TYPE MAKT-spras, maktx TYPE MAKT-maktx, END OF wa, itab LIKE SORTED TABLE OF wa WITH NON-UNIQUE KEY matnr ersda spras maktx. SELECT MR~matnr MR~ersda MK~spras MK~maktx INTO CORRESPONDING FIELDS OF TABLE itab FROM MARA AS MR INNER JOIN MAKT AS MK ON MR~matnr = MK~matnr AND MR~mandt = MK~mandt. LOOP AT itab INTO wa. WRITE: / wa-matnr, wa-ersda, wa-spras ,wa-maktx. ENDLOOP.Programın derleme ekranı şekildeki gibidir.
Subscribe to:
Posts (Atom)