Friday, July 08, 2011

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.



REPORT demo_types_statement.

TYPES yazi(10TYPE c.

TYPES sonuc   TYPE DECIMALS 2.

DATA text        TYPE yazi.

DATA amount      TYPE sonuc.

text ' 4 / 3 = '.

amount .

WRITEtextamount.



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 DECIMALS 2.

text ' 4 / 3 = '.
amount .
WRITEtextamount.



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.

TYPESBEGIN OF name,
         title(5)       TYPE c,
         first_name(10TYPE c,
         last_name(10)  TYPE c,
       END OF name.


TYPESBEGIN 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(10TYPE 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.

No comments: