1 概述
ABAP程序的源代碼結(jié)構(gòu)包括數(shù)據(jù)定義和處理塊兩個(gè)部分。
- 數(shù)據(jù)定義部分包含整個(gè)程序中可見的全局?jǐn)?shù)據(jù)類型和數(shù)據(jù)對(duì)象,選擇屏幕元素以及ABAP Objects自定義的類和接口。
- 處理塊是ABAP程序的主要結(jié)構(gòu)單元
Event Block (事件塊)
每一個(gè)事件塊都需要有一個(gè)事件關(guān)鍵字引導(dǎo),這些事件關(guān)鍵字單獨(dú)構(gòu)成一個(gè)語句,其后續(xù)語句隸屬于該關(guān)鍵字代表的事件塊,直到下一個(gè)事件關(guān)鍵字出現(xiàn)為止,該事件塊自動(dòng)結(jié)束,因此沒有顯示的事件塊結(jié)束關(guān)鍵字。事件塊包括報(bào)表事件,列表事件,屏幕事件等。
- INITIALIZATION(初始化)
- START-OF-SELECTION(數(shù)據(jù)選擇開始)
- ATLINE-SELECTION(列表行選擇)
- PROCESS BEFORE OUTPUT(屏幕輸入前處理)
- PRICESS AFTER INTPUT(屏幕輸入后處理)
Dialog Modules(對(duì)話模塊)
這種處理快代碼部分的開始和結(jié)束都有相關(guān)的關(guān)鍵字作為標(biāo)志,是相對(duì)獨(dú)立的單元。
Procedures(過程 )
代碼部分的開始和結(jié)束也有相關(guān)的關(guān)鍵字作為標(biāo)志,是相對(duì)獨(dú)立的程序單元。過程則包括功能模塊和子程序,以及ABAP對(duì)象中的類方法,可以被其他的模塊調(diào)用,以實(shí)現(xiàn)程序模塊化和代碼復(fù)用。
REPORT z_first_program.
DATA: text1(10) TYPE c VALUE 'Basic List',
text2(14) TYPE c VALUE 'Secondary List'.
START-OF-SELECTION .
DO 5 TIMES.
PERFORM output_line USING sy-index.
ENDDO.
AT LINE-SELECTION.
WRITE: text2, sy-lsind.
FORM output_line USING p_index.
WRITE: / text-001,
p_index.
ENDFORM.

對(duì)話模塊和時(shí)間模塊是在ABAP程序外部調(diào)用,過程則是通過程序語句內(nèi)部調(diào)用。
2 程序類型
1 應(yīng)用程序類型
- Executable program(可執(zhí)行程序,類型代碼為1)
常常用于創(chuàng)建通常意義上的報(bào)表,整個(gè)程序由REPORT關(guān)鍵詞引導(dǎo),在ABAP編輯器中進(jìn)行編輯,并可以直接在ABAP編輯器中執(zhí)行。除此之外,還可以通過SUBMIT語句或者分配報(bào)表事務(wù)代碼來運(yùn)行。可執(zhí)行程序可以包含所有類型的ABAP處理塊,但不能在其中定義功能模塊(可以調(diào)用)。 - Moudel pool(模塊池程序,類型代碼為M)
在程序創(chuàng)建時(shí)由系統(tǒng)自動(dòng)生成PROGRAM關(guān)鍵字語句進(jìn)行引導(dǎo),一般包含程序自身定義的屏幕和對(duì)話模塊,在ABAP編輯器中進(jìn)行編輯,且必須通過事務(wù)代碼運(yùn)行??梢园龍?bào)表事件和功能模塊所有類型的ABAP處理塊。
2 其他程序類型
其他程序類型的程序不能直接(或通過事務(wù)代碼)執(zhí)行的,但這些類型作為代碼容器,可以作為ABAP程序提供各種各樣的模塊化代碼單元。
- Function groups(功能組,類型代碼F)
由FUNCTION-POOL 語句引導(dǎo),包含一個(gè)或多個(gè)功能模塊。 - Class pools(ABAP類庫(kù),類型代碼K)
由CLASS-POOL語句引導(dǎo),是APAB對(duì)象的定義部分。 - Interface pools(ABAP接口庫(kù),類型代碼J)
由INTERFACE-POOL引導(dǎo),與K類型程序相似,用于定義ABAP對(duì)象的接口。 - Subroutine pools(子程序池,類型代碼S)
由PROGRAM語句引導(dǎo),包含一個(gè)或多個(gè)子程序代碼模塊或類方法。 - Type groups(無類型代碼)
由TYPE-POOL語句引導(dǎo),在數(shù)據(jù)字典中定義。 - Include programs(包含程序,類型代碼F)
不需要任何語句引導(dǎo),也不需要包含完整的處理模塊。
3 程序元素
- Source code(源代碼)
- Variants(變式)
與選擇屏幕有關(guān),用于用戶存儲(chǔ)在選擇屏幕中輸入的數(shù)據(jù),類比變量 - Attributes(屬性)
- Text Elements(文本元素)
一種特殊的程序元素,儲(chǔ)存在文本池中的文字,包括文本符號(hào)(Text symbols),選擇文本(Selection texts),列表標(biāo)題(List Headings) - Documentation(文檔)
4 屏幕
- Screens(普通屏幕)
- Selection Screens(選擇屏幕)
- Lists(傳統(tǒng)列表屏幕)
5 語句類型
- 聲明語句,用于數(shù)據(jù)元素的定義和聲明,常用的關(guān)鍵字有
TYPES,DATA,PARAMETER,TABLES - 模塊化語句,用于定義程序運(yùn)行時(shí)內(nèi)處理的代碼塊,還可以細(xì)分為事件關(guān)鍵字語句和過程關(guān)鍵字語句。
事件關(guān)鍵字:
AT SELECTION-SCREEN
AT USER-COMMAND
INITIALIZATION(初始化)
START-OF-SELECTION(數(shù)據(jù)選擇開始)
ATLINE-SELECTION(列表行選擇)
PROCESS BEFORE OUTPUT(屏幕輸入前處理)
PRICESS AFTER INTPUT(屏幕輸入后處理)
事件關(guān)鍵字:
FORM/ENDFORM
FUNCTION/ENDFUNCTION
MODULE/ENDMODULE - 控制語句,控制程序流程
- 調(diào)用語句,用于調(diào)用已經(jīng)定義好的處理塊,例如子程序,功能模塊等,常用語句包括
PERFORM,CALL,SUBMIT,LEAVE TO等 - 操作語句,程序內(nèi)數(shù)據(jù)操作或輸出,
WRITE,MOVE,ADD - 數(shù)據(jù)庫(kù)語句
3 程序運(yùn)行
1 直接運(yùn)行
在Transcation SE38 or SA38 中運(yùn)行
2 調(diào)用執(zhí)行
| 功能 | 報(bào)表調(diào)用 | 事務(wù)調(diào)用 |
|---|---|---|
| 無返回調(diào)用 | SUBMIT | LEAVE TO TRANSACTION |
| 調(diào)用并返回 | SUBMIT AND RETURN | CALL TRANSACTION |
內(nèi)部調(diào)用可以從另一個(gè)程序通過SUBMIT語句進(jìn)行。
REPORT z_calling_program.
START-OF-SELECTION.
WRITE 'This program calls other program'.
SUBMIT Z_DATA_MANIPULATION.

通過Transcation code 調(diào)用的程序語句為LEAVE TO TRANSACTION OR CALL TRANSACTION
3 事務(wù)代碼
- SE80 對(duì)象導(dǎo)航器
- SE81 倉(cāng)庫(kù)信息系統(tǒng)
- SE84 倉(cāng)庫(kù)對(duì)象
- SE38 ABAP編輯器
- SE11 數(shù)據(jù)字典