天天看點

ABAP開發基礎知識:4) 結構體(Structure)

      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)