SAP ABAP開發技術總結]結構複用(INCLUDE)

TYPES BEGIN OF struc_type
   TYPES comp ... 
   TYPES comp TYPE struc_type BOXED. "參照另一結構類型
   INCLUDE { {TYPE struc_type} | {STRUCTURE struc} } "將另一結構包括進來
        [AS name [RENAMING WITH SUFFIX suffix]]
TYPES END OF struc_type.

 

INCLUDE { {TYPE struc_type} | {STRUCTURE struc} } 
        [AS name [RENAMING WITH SUFFIX suffix]].

該語句只能用在定義結構的BEGIN OF與 END OF之間。作用是將結構類型struc_type結構變量struc的所有組件字段拷貝到當前結構定義的指定位置,INCLUDE就是將可以重複使用的東西先做好,再包含進來。

AS name:給包含進來的結構類型(或結構變量)取一個別名,這樣就可以通過結構組件符(-)來選取這個結構類型(或結構變量)

RENAMING WITH SUFFIX suffix:如果include進來的結構類型(或結構變量)的組件字段與現有的重複,則可以使用此選項重命名include進來的結構類型(或結構變量)的各組件字段名,具體做法只是在原來組件名後加上了指定的後綴suffix

TYPESBEGIN OF t_day,
         work TYPE c LENGTH 8,
         free TYPE c LENGTH 16,
       END OF t_day.
DATA BEGIN OF week.
        INCLUDE TYPE t_day AS monday    RENAMING WITH SUFFIX _mon.
        INCLUDE TYPE t_day AS tuesday   RENAMING WITH SUFFIX _tue.
        INCLUDE TYPE t_day AS wednesday RENAMING WITH SUFFIX _wed.
...
DATA END OF week.

可以通下面的方式來訪問week結構變量:

直接看作是week結構變量組件:week-work_mon, week-free_mon, week-work_tue

由於使用as別名,所以還可以這樣訪問:week-monday-work, week-monday-free, week-tuesday-work

 

當程序中多個結構使用共同的字段時,將公用的部分提取出來,使用INCLUDE將它們組裝起來,編程結構更清晰。下面是結構對象的複用:

DATABEGIN OF comm1 OCCURS 0,
      bukrs TYPE bseg-bukrs,
END OF comm1.
TYPES:BEGIN OF comm2,
      blart TYPE bkpf-blart,
END OF comm2.
DATABEGIN OF gt_result OCCURS 0,
        c1 TYPE c."直接定義組件字段,但前面語句後面使用逗號
        INCLUDE STRUCTURE comm1."直接將結構對象包括進來
        INCLUDE TYPE comm2."直接將結構類型包括進來
        DATA:comm LIKE comm1,"直接參照
        c2 TYPE c. "直接定義組件字段,但前面語句後面使用逗號
DATAEND OF gt_result.
gt_result-bukrs '111'.
gt_result-blart '222'.
gt_result-comm-bukrs '333'.

下面是類型的複用:

TYPESBEGIN OF street_type,
         name TYPE c LENGTH 40,
         no   TYPE c LENGTH 4,
       END OF street_type.
DATABEGIN OF comm1 OCCURS 0,
      bukrs TYPE bseg-bukrs,
END OF comm1.
TYPESBEGIN OF address_type,
        name1 TYPE c LENGTH 30."直接定義類型,但前面語句需使用逗號
        TYPES:street TYPE street_type,"參照另一結構類型
        c TYPE c."直接定義類型,但前面語句需使用逗號
        INCLUDE STRUCTURE comm1.
        INCLUDE TYPE  street_type.
TYPESEND OF address_type.

*或者是這樣
*TYPES: BEGIN OF address_type,
*        name1 TYPE c LENGTH 30,
*        street TYPE street_type,
*        c TYPE c.
*        INCLUDE STRUCTURE comm1.
*        INCLUDE TYPE  street_type.
*TYPES: END OF address_type.
DATAname TYPE address_type-street-name.
DATAname2 TYPE address_type-name.
DATAbukrs TYPE address_type-bukrs.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章