ABAP中除了簡單類型之外,使用者還可以在程式中定義結構體類型,将相同性質的字段進行歸類,便于整理及操作。結構體不屬于資料字典對象,在程式運作時會被作為臨時對象建立。
文法:
TYPES|DATA:BEGIN OF STRUCTURE,
k1[TYPE type]|[LIKE obj]...,
k2[TYPE type]|[LIKE obj]...,
......
kn[TYPE type]|[LIKE obj]...,
END OF STRUCTURE.
或: TYPES|DATA STRUCTURE TYPE str_type|LIKE str_dob.
例如一個職員的資訊如下:
DATA:BEGIN OF USERINFO
SID TYPE STRING,
NAME TYPE STRING,
TEL(20) TYPE C,
END OF USERINFO.
這樣就定義好一個職員結構,ABAP中可以使用語句<Structure>-<fieldname>進行操作指字的字段(在.ENT或是JAVA中都是用操作符".",而ABAP卻是用"-",開始用時真有點習慣,呵)。
USERINFO-SID = 'A20013'.
USERINFO-NAME = 'KEN'.
USERINFO-TEL = 'XXX'.
用語句鍊輸出:
WRITE:USERINFO-SID,USERINFO-NAME,USERINFO-TEL.
*輸出結果:A20013 KEN XXX
結構體文法操作靈活,能夠直接參考其它類型結構體來建立:
DATA:EMPLOYEE LIKE USERINFO.
EMPLOYEE-SID = 'FLY647';
EMPLOYEE-NAME = 'SUPER'.
EMPLOYEE-TEL = 'SXXX'.
用語句鍊輸出:
WRITE:EMPLOYEE-SID,EMOLOYEE-NAME,EMPLOYEE-TEL.
*輸出結果:FLY647 SUPER SXXX
當然還有另外一種定義結構用TYPES關鍵字,筆者覺得用TYPES定義的更為靈活,就像是定義一個類一樣。
TYPES:BEGIN OF PERSON,
nameTYPE STRING,
sex(1) TYPE C,
age TYPE I,
END OF PERSON.
執行個體化對象:
DATA p1 TYPE PERSON.
p1-name = 'Obama'.
p1-sex = 'Male'.
p1-age = '50'.
用語句鍊輸出:
WRITE:p1-name,p1-sex,p1-age.
*輸出結果:Obama Male 50
這樣你可以多定義幾個對象,而用DATA定義的結構在記憶體中隻能存在一次,沒有TYPES定義的靈活(本人經驗有限,如果有不正确的地方歡迎指出)。
接下來是介紹ABAP中結構的繼承功能,通過參照某個已存在的結構體來建立一個屬性相同的新結構體,并且可以在建立的結構體中按實際需求增加字段。定義結構體繼承的具體語句為:INCLUDE STRUCTURE。參照上文中的UISERINFO結構來建立繼承新的結構。
DATA:BEGIN OF STAFFINFO. <此處是.操作符>
INCLUDE STRUCTURE USERINFO.
DATA:BIRTHDAY TYPE D,
ADDRESS(50) TYPE C,
END OF STAFFINFO.
這樣就完成了繼承關系。
STAFFINFO-SID = 'SKY001'.
STAFFINFO-NAME = 'SKY'.
STAFFINFO-TEL = '010XXX'.
STAFFINFO-BIRTHDAY = '2012-03-11'.
STAFFINFO-ADDRESS = 'BEIJING'.
WRITE:STAFFINFO-SID,STAFFINFO-NAME,STAFFINFO-TEL,STAFFINFO-BIRTHDAY,STAFFINFO-ADDRESS.
*輸出結果:SKY001 SKY 010XXX 2012-03-11 BEIJING.
與變量的定義類似,結構體的初始化通過語句CLEAR來實作.
總結:
用DATA關鍵字定義的結構可以實作繼承關系,而TYPES關鍵字定義的結構則不可以實作,在實際的編碼過程中還是按具體要求做取舍。
(由于本人經驗有限,可能有很多遺漏或者錯誤的地方,也歡迎高手們提出,這也的我成長的來源,THANKS)