ABAP屏幕基础
Select語(yǔ)句的使用
關(guān)鍵字into后可以加 structure(結(jié)構(gòu)體), internal table(內(nèi)表) 和 fieldlist(字段列表)
?
?
Authority 權(quán)限
?
程序員可以根據(jù)權(quán)限對(duì)象創(chuàng)建權(quán)限實(shí)例
而basic 負(fù)責(zé)將權(quán)限分配給其他用戶
?
?
At selection-screen
在選擇屏幕中輸入值后,點(diǎn)擊屏幕左上角的運(yùn)行按鈕 或 按回車鍵時(shí),可以對(duì)輸入的數(shù)據(jù)進(jìn)行有效性校驗(yàn).
重點(diǎn): at selection-screen最大的作用是檢查當(dāng)前用戶是否具有對(duì)輸入數(shù)據(jù)進(jìn)行操作的權(quán)限
?
程序中?
第一個(gè)事件塊是 load-of-program??也可以附加使用initialization
但是不能只
程序中事件的啟動(dòng)順序
1.????????Load-of-program
2.????????(Initialization) (optional event block 可選事件塊)
3.????????At selection-screen
4.????????Start-of-selection (default event block 缺省事件塊)
5.????????At line-selection
?
注意:當(dāng)程序中沒有指定任何事件塊時(shí), 系統(tǒng)默認(rèn)為start-of-selection事件
?
?
用戶雙擊basic list screen的一條數(shù)據(jù)時(shí),系統(tǒng)從隱藏域中查找相應(yīng)的數(shù)據(jù).
并將數(shù)據(jù)回傳給全局變量中去.
?
當(dāng)雙擊一條數(shù)據(jù)的時(shí)候 sy-lsind + 1
當(dāng)沒找到at line-selection事件塊時(shí),sy-lsind又自動(dòng)減1
?
?
Selection screen選擇屏幕
?
選擇屏幕的屬性
1.????????Input help 輸入幫助Possible entries help 可輸入值幫助
2.????????Value entry 定制字段可選擇范圍
3.????????Type checks
Multilingual capacity? 多語(yǔ)言
4.????????Variants 變式
?
變式的創(chuàng)建
1.??????將選擇屏幕中的輸入域填寫完畢
2.??????將其保存為變式
1)???????輸入變式名
2)???????輸入變式描述
3)???????為變式設(shè)定相關(guān)屬性
?
注意:一定要將屏幕中的值填寫完畢以后再保存變式
?
變式的特點(diǎn)
1.??????可以簡(jiǎn)化輸入
2.??????可以用于后臺(tái)自動(dòng)運(yùn)行程序, 而不需要用戶自己輸入值
?
重點(diǎn):? variant 變式 是client-specifc? client依賴的.
?
Seletion screen 選擇屏幕
?
定義選擇屏幕上的字段有兩種方式
1.??????single value input單值輸入選擇屏幕, 使用parameters 關(guān)鍵字 定義 .
2.??????multiple value input 多值輸入選擇屏幕,使用 select-options 關(guān)鍵字 定義
?
parameters功能: 用戶可以通過(guò)選擇屏幕輸入查詢條件對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn).
?
使用parameters 定義選擇屏幕的兩點(diǎn)限制
1.??????變量名的字?jǐn)?shù)長(zhǎng)度不可以超過(guò)8個(gè)字符.
2.??????給定義的時(shí)候賦值 需要 用關(guān)鍵字 default 而不能用 value
?
定義語(yǔ)法: parameters <變量名>type <類型>.
注:如果使用dataelement定義變量,則該變量也具有語(yǔ)義意義.
?
?
Selction screen 的執(zhí)行順序:
1.????????程序啟動(dòng)時(shí),觸發(fā)load-of-program 事件.
2.????????顯示層彈出屏幕
3.????????用戶輸入值并確定屏幕后,觸發(fā)start-of-selection事件
4.????????輸入的值被傳到內(nèi)存中,進(jìn)一步處理
?
執(zhí)行順序?qū)嵗?
Parameters pa_carr type spfli-carrid.
?
Load-of-program.
Pa_carr = ‘LH’.
?
Start-of-selection.
Pa_carr=’DL’.
Write pa_carr.
?
屏幕彈出時(shí), 輸入域中為 LH ,確定屏幕后, 顯示值為 DL.
?
Value Sets(SELECT-OPTIONS) 多值輸入屏幕
?
Parameters 與 select-options 的區(qū)別
1.????????parameters 定義的變量是不可分解的變量
2.????????select-options ,表面上定義的是一個(gè)字段, 實(shí)際上定義的是字段取值范圍的內(nèi)表
?
select-options功能:
根據(jù)用戶輸入的 value range 取值范圍 到數(shù)據(jù)庫(kù)中查找符合范圍的數(shù)據(jù)
?
Select-options 定義的內(nèi)表
重要: ?Select-options內(nèi)表具有表頭行
該內(nèi)表有4個(gè)字段
1.????????Sign 符號(hào)標(biāo)示 取值: I (included 被包含) , E (excluded 不被包含).
2.????????Option 操作?? 取值: BT(between在范圍之間) , EQ(equal 等于)
3.????????Low 最小值?? 取值: 用戶輸入的最小值
4.????????High 最大值? ?取值:用戶輸入的最大值
?
當(dāng)屏幕彈出后, 點(diǎn)擊mulitple selction按鈕可以加入其他選擇范圍
范圍包括
1.??????single value include 單值包含
2.??????range inculde 范圍包含
3.??????single value exclude 單值不包含
4.??????range exculde 范圍不包含
?
select-options 運(yùn)行原理
1.????????程序運(yùn)行后, select-options創(chuàng)建的內(nèi)表中沒有數(shù)據(jù)
2.????????屏幕彈出后,用戶輸入數(shù)據(jù)
3.????????此時(shí),系統(tǒng)將字段范圍保存到該內(nèi)表中
4.????????用戶確定屏幕后,系統(tǒng)將內(nèi)表中的信息翻譯成對(duì)應(yīng)的native SQL
5.????????數(shù)據(jù)庫(kù)將符合用戶輸入范圍的數(shù)據(jù)返回給用戶
?
?
注意:使用loop at 循環(huán)一個(gè)帶有head line 的內(nèi)表,不需要加[].
?
?
Selction screen events 選擇屏幕事件
?
事件啟動(dòng)流程
1.????????程序啟動(dòng)后,觸發(fā)load-of-program或initialization 事件對(duì)變量進(jìn)行初始化
2.????????如果有parameters 或 select-options屏幕變量,則會(huì)彈出選擇屏幕
3.????????用戶輸入值后,點(diǎn)擊 回車 或 運(yùn)行(F8)(有區(qū)別,見下文) 完成屏幕輸入
4.????????如果程序中有 at selection-screen 事件的話, 這時(shí)它就會(huì)被觸發(fā),它的功能是 對(duì)用戶輸入的值進(jìn)行校驗(yàn),而最主要的功能是,判斷用戶是否具有對(duì)該數(shù)據(jù)進(jìn)行操作的權(quán)限.
5.????????當(dāng)校驗(yàn)成功后, start-of-selection 別觸發(fā).并顯示Basic list screen
6.????????雙擊其中一條數(shù)據(jù), 則會(huì)觸發(fā) at line-selection……..
?
重點(diǎn): 回車 和運(yùn)行(F8)的區(qū)別
1.????????回車: 僅僅具有校驗(yàn)功能, 無(wú)論校驗(yàn)成功與否, 程序都不會(huì)往下執(zhí)行
2.????????運(yùn)行(F8): 校驗(yàn)成功后 程序才能往下運(yùn)行,如果校驗(yàn)失敗,程序無(wú)法繼續(xù)運(yùn)行
?
?
注意: at selection screen 的主要功能是authority check 權(quán)限校驗(yàn) ,如果校驗(yàn)失敗,則應(yīng)該生成一個(gè)E(error)類型的message 以通知用戶校驗(yàn)失敗.
?
?
User Dialog screen用戶會(huì)話屏幕(或稱為Dynpro Screen ,standardscreen)
?
Dynpro screen 功能:用戶可以通過(guò)屏幕錄入或修改數(shù)據(jù)
?
Dynpro screen 參數(shù)
1.????????Attributes屏幕屬性: screen number? shorttext?? nextscreen????screentype?
2.????????Layout 屏幕布局:? 屏幕屬性的擺放順序
3.????????Element list 元素列表:??所有元素的集合
4.????????Flow control 控制流程:? flow logic流邏輯(dynpro screen ?PBO 和PAI事件中所調(diào)用的module模塊).
?
Dypro screen Attributes屬性
1.????????Screen number: 屏幕編號(hào) 3位
2.????????short text : 屏幕描述
3.????????Nex screen: 下一屏幕編號(hào),?當(dāng)該屏幕結(jié)束后所執(zhí)行的屏幕, 編號(hào)為0時(shí),程序?qū)?huì)在調(diào)用屏幕的語(yǔ)句后繼續(xù)運(yùn)行.
4.????????Screen type :屏幕類型normal一般屏幕,subscreen子屏幕,modal dialog box模態(tài)窗口
?
?
?
Dypro screen 運(yùn)行流程
1.??????使用call screen 100(屏幕編碼), 調(diào)用一個(gè)屏幕
2.??????屏幕彈出之前, 啟動(dòng)PBO事件
3.??????用戶在屏幕輸入值并確定后,輸入的值會(huì)被傳入到內(nèi)存變量當(dāng)中
4.??????當(dāng)屏幕關(guān)閉時(shí),PAI事件觸發(fā)
5.??????PAI結(jié)束以后, 程序?qū)?huì)根據(jù)該屏幕的next screen 跳到下一屏幕
6.??????當(dāng)next screen 為本屏幕的編號(hào), 則需要使用自定義按鈕退出屏幕,否則會(huì)出現(xiàn)屏幕死循環(huán)現(xiàn)象.
?
PBO module: PBO 事件對(duì)應(yīng)的模塊
PAI? module. PAI 事件對(duì)應(yīng)的模塊
?
Next screen 的配置
1.??????靜態(tài)配置: 通過(guò)dynpro screen 自身屬性配置next screen
2.??????動(dòng)態(tài)配置: 在程序的PAI事件中 使用關(guān)鍵字 SET screen 200(下一屏幕編號(hào))定義下一屏幕,當(dāng)PAI運(yùn)行到該語(yǔ)句時(shí), 該屏幕的靜態(tài)配置 則會(huì)被 動(dòng)態(tài)配置所覆蓋
?
?
使用T CODE 運(yùn)行屏幕
功能: 使用T CODE可以使ABAP以外的配置人員 在workbench 以外運(yùn)行屏幕.
?
Dynrpo screen 在程序中可以使用的位置
1.????????觸發(fā)Start-of-selection,生成basic list screen
2.????????雙擊單條數(shù)據(jù)
3.????????觸發(fā) at line-selection 事件
4.????????在這個(gè)事件中 call screen 100.
5.????????彈出dynpro screen, 用戶輸入相關(guān)值
6.????????點(diǎn)擊 save 保存到數(shù)據(jù)庫(kù) ,點(diǎn)擊back 返回到basic list screen
?
Screen painter 屏幕繪制器
功能:專門繪制ABAP屏幕的程序,可以繪制dynpro screen
?
注意:必須在安裝GUI的時(shí)候選擇并安裝.
?
可以通過(guò)screen 屏幕上的 LAYOUT 鍵,可以進(jìn)入 screen painter ,通過(guò)Graphicallayout editor 布局編輯器?對(duì)布局進(jìn)行編輯
?
Dynpro Screen 具體操作
1.??????根據(jù)spfli-carrid字段建立paramters選擇屏幕
2.??????根據(jù) spfli 建立結(jié)構(gòu)體變量wa_spfli
3.??????在start-of-selection事件中 打印Basic list screen屏幕
4.??????在 at line-selection 事件中 call screen 100
5.??????建立屏幕100 , 填寫描述 和next screen
6.??????通過(guò) screen painter 編輯screen 100的布局
7.??????通過(guò) 字典庫(kù)結(jié)構(gòu)體sdyn_conn 在屏幕上批量加入字段
8.??????創(chuàng)建兩個(gè) push button,名字分別為 SAVE 和 BACK ,描述以及Fcode 都于按鈕名相同
9.??????在屏幕的Element list 選項(xiàng)卡中, 在最后一行添加字段 OK_CODE
10.?? 保存屏幕 并激活
11.?? 在程序中聲明變量OK_CODE與屏幕字段相對(duì)應(yīng),注: TYPE ok_code LIKE sy-ucomm.
12.?? 在屏幕 Flow logic選項(xiàng)卡中打開PBO注釋中的 module ,并且將module創(chuàng)建在主程序內(nèi)
13.?? 在主程序中創(chuàng)建結(jié)構(gòu)體變量sdyn_conn,使內(nèi)存中的字段變量能夠與屏幕中的字段同名對(duì)應(yīng) 注:TABLES sdyn_conn
14.?? 在PBOmodule中, 首先清空OK_CODE 通過(guò)hidearea隱藏域回傳的字段到數(shù)據(jù)庫(kù)中查找相應(yīng)的數(shù)據(jù),并將數(shù)據(jù)傳遞到sdyn_conn結(jié)構(gòu)體變量中.
15.?? 打開PAImodule的注釋并將module創(chuàng)建到主程序中.
16.??對(duì)OK_CODE進(jìn)行CASE判斷,如果為SAVE則提示message信息,如果為BACK,則通過(guò)關(guān)鍵字 SET SCREEN<屏幕編號(hào)> 跳轉(zhuǎn)到指定的屏幕中去
17.?? 保存整個(gè)程序 并激活.
?
重點(diǎn):在PBO事件中第一步一定要清空OK_CODE(CLEAR ok_code)
1.????????假如ok_code沒有清空.
2.????????當(dāng)用戶第一次進(jìn)入屏幕并點(diǎn)擊保存按鈕時(shí)(例如:SAVE),這時(shí)ok_code 的值為 SAVE,
3.????????當(dāng)用戶第二次進(jìn)入屏幕時(shí), 由于ok_code沒有被清空,所以ok_code依然為SAVE,
4.????????當(dāng)屏幕數(shù)據(jù)還沒有輸入完整時(shí), 用戶可能會(huì)通過(guò)點(diǎn)擊push button 以外的方式 結(jié)束屏幕.
5.????????這時(shí),程序觸發(fā)PAI事件, 而PAI事件會(huì)進(jìn)入CASE 中的WHEN ‘SAVE’語(yǔ)句, 此時(shí)很可能對(duì)數(shù)據(jù)庫(kù)產(chǎn)生誤操作.
6.????????所以,PBO中一定要清空ok_code 以避免以上情況
?
?
暫時(shí)消息:可以使用? message‘hello’ type ‘I’.
?
?
Global modularization? 全局模塊化
?
Function module : 屬于repositiry中對(duì)對(duì)象, 封裝了最為常用的代碼.
?
Fuction group
1.????????是多個(gè)function module的集合
2.????????擁有組內(nèi)所有module 可以共享的對(duì)象
?
Function group 工作原理:
1.????????當(dāng)一個(gè)Function group中某一個(gè)Functionmodule,被程序第一次調(diào)用的時(shí)候
2.????????Function group 中所有的組成部分(包括共享對(duì)象 和modual)都會(huì)被調(diào)入內(nèi)存.
3.????????當(dāng)?shù)诙€(gè)程序再一次調(diào)用group中的module 時(shí),就可以直接從內(nèi)存中調(diào)用module了
4.????????當(dāng)程序完成并不再使用module時(shí), funtion group就會(huì)在內(nèi)存中被清除
?
注意:Functiongroup不能太大,粒度不適合過(guò)大.每一次調(diào)用,都會(huì)將group所有部分調(diào)入到內(nèi)存,如果過(guò)大 ,則會(huì)降低系統(tǒng)運(yùn)行效率.
?
Function group 共享性
如果group 中的一個(gè)module 修改了group 中的屬性,那么當(dāng)組內(nèi)的module再次訪問(wèn)該屬性時(shí),顯示的屬性就是已經(jīng)修改后的屬性
?
?
Function group 需要通過(guò)接口來(lái)調(diào)用
?
Function module
?
Fucntion module 類型
1.??????normal Fucntion module 一般類型
2.??????Remote-enabled module 可被遠(yuǎn)程調(diào)用類型
3.??????Update module 更新類型
?
?
Function module interface 參數(shù)
1.????????Import 輸入?yún)?shù)?
2.????????Export 輸出參數(shù)
3.????????Changing 更改參數(shù)
?
重要: 聲明module 時(shí),參數(shù)要以 module 內(nèi)部為參照體, 進(jìn)來(lái)的數(shù)據(jù)為import , 出去的數(shù)據(jù)為 export.
???????而當(dāng)程序調(diào)用module時(shí),則需要以程序內(nèi)部為參照體, 出去的數(shù)據(jù)為 export,進(jìn)來(lái)的的數(shù)據(jù)為inport
?
注意:Import 和 export 參數(shù)都是可選的, 也可以設(shè)定為passvalue值傳, 缺省以及推薦傳送方式 是 引用傳.由于調(diào)用module 時(shí), 需要調(diào)用group的整個(gè)數(shù)據(jù),數(shù)據(jù)量較大, 所以選擇引用傳能提高效率.
?
?
Function module 的創(chuàng)建
1.????????右鍵package--- create ----function group 創(chuàng)建functiongroup? 注意: function group 不能重名?
2.????????在function group下創(chuàng)建function module
3.????????設(shè)定fuction module interface 參數(shù)
4.????????在source code 中寫入執(zhí)行的代碼
5.????????建立程序調(diào)用function module
6.????????點(diǎn)擊 Pattern 按鈕, 在 CALL FUNCTION 選項(xiàng)中 輸入module名,確定
7.????????修改參數(shù)值? 注意: 一定要將程序中的參數(shù) 與 module中的參數(shù)相對(duì)應(yīng)
8.????????當(dāng)function 調(diào)用成功后, 系統(tǒng)變量sy-subrc = 0.
?
Classes and Objects 類和對(duì)象
?
ABAP 可以創(chuàng)建一個(gè)引用類型的數(shù)據(jù)類型
DATA ref1 TYPE REF TO class.?注:Class是數(shù)據(jù)類型
DATA ref2 TYPE REF TO class.
定義兩個(gè)能指向 class 的指針
?
CREATE OBJECT ref1????
CREATE OBJECT 相當(dāng)于java 中的new
?
方法的調(diào)用
CALL METHOD ref1 -> meth1?(方法名)
EXPORTING
IMPORTING
EXCEPTIONS
?
?
?
面向?qū)ο笾蟹庋b了很多組件
1.????????一個(gè)BOR business object repositiry 包含多個(gè) BO business object
2.????????一個(gè)商業(yè)對(duì)象? business object 包含多個(gè)BAPI?Business API
?
BAPI: 屬于全局調(diào)用的方法,業(yè)務(wù)層的函數(shù)
?
?
Standardlized BAPIs??---標(biāo)準(zhǔn)化的? BAPIs
1.????????GetList
2.????????GetDetail
3.????????Create Change, Delete Cancel
4.????????Addlem RemoveItem.
?
?
BAPI 就是 function module , 相當(dāng)于business functionmodule
?
?
Calling programs調(diào)用程序
程序之間的調(diào)用.
Insertion(謙讓式)
當(dāng)程序A調(diào)用程序B時(shí), 程序B占據(jù)棧頂,程序A壓在下面, 當(dāng)程序B執(zhí)行完畢后,程序A繼續(xù)執(zhí)行
?
Restart(搶占式)
當(dāng)程序A調(diào)用程序B時(shí),程序A在棧頂被移出而被程序B所占據(jù)
?
程序調(diào)用語(yǔ)句:
在程序中使用 submit關(guān)鍵字 調(diào)用 下一個(gè)程序
1)???????Submit prog_name_2 (restart)
2)???????Submit prog_name_2 and return?(insertion)
3)???????Submit prog_name_2 via selection-screen andreturn?? (insertion)
via selection-screen作用:如果程序2中有選擇屏幕,則程序2被調(diào)用時(shí)會(huì)彈出屏幕
?
?
?
Restart
Leave to transaction<T-code>: 功能相當(dāng)于輸入”/n<T-code>”,當(dāng)程序執(zhí)行該語(yǔ)句時(shí),該程序就會(huì)在內(nèi)存被清空,接著轉(zhuǎn)到相應(yīng)的TCODE程序中去
?
?
insertion
call transaction <T_CODE> [andskip first screen 忽略被調(diào)用程序的第一個(gè)屏幕]
執(zhí)行下一個(gè)程序, 當(dāng)前程序會(huì)被壓到棧的下一個(gè)位置而不會(huì)被清空
?
重點(diǎn): and skip first screen 忽略被調(diào)用程序的第一個(gè)屏幕,但是 PBO 和 PAI的Module還會(huì)被執(zhí)行.
?
?
Memory management內(nèi)存管理
重要:當(dāng)R/3 用戶登陸系統(tǒng)的時(shí)候, 整個(gè)系統(tǒng)環(huán)境被稱作 userterminal session.
其中包含:
1.????????Internal session. 程序執(zhí)行窗口
2.????????External session. 用戶的窗口
?
Session流程
1.??????用戶登陸系統(tǒng)時(shí)的系統(tǒng)環(huán)境為terminal session
2.??????此時(shí)系統(tǒng)開辟了一個(gè)External session,用戶可以自主創(chuàng)建 , 重要:最大數(shù)為6
3.??????當(dāng)一個(gè)程序運(yùn)行的時(shí)候,該程序所占的區(qū)域?yàn)閕nternal session, 相當(dāng)于程序的內(nèi)存區(qū)域
?
?
Memory
1.????????ABAP memory? 屬于一個(gè)External session 的內(nèi)存區(qū)域
2.????????SAPmemory???????屬于一個(gè) terminal session 的內(nèi)存區(qū)域
?
在一個(gè)External session中 ,程序A將數(shù)據(jù)存放至ABAP memory中,程序B可以從中取出存放的數(shù)據(jù).
?
在同一個(gè)terminalsession(同一個(gè)操作用戶)的前提下,程序A數(shù)據(jù)存放到 SAP memory中,程序B可以共享內(nèi)存中的數(shù)據(jù).
?
?
在同一個(gè)External session中,? (Externalsession相當(dāng)于一個(gè)堆棧)
Insertion
程序A 調(diào)用 程序B? ,? 程序B 調(diào)用 程序C
此時(shí) internal session 從上到下的位置為 C – B -- A
?
Restart
程序A 調(diào)用 程序B,? 程序A會(huì)在棧頂被拿掉, 被程序B占據(jù)位置
?
?
注意:例如,在restart情況下,堆棧中已經(jīng)有程序A, B, C 三個(gè)程序,C在棧頂,?此時(shí)程序C調(diào)用了使用程序D所創(chuàng)建的TCODE,此時(shí)程序D將占據(jù)整個(gè)窗口,與此同時(shí),堆棧將全部被清空,ABAP memory也會(huì)被clear.
總結(jié)
- 上一篇: 看好电影,学标准英语
- 下一篇: ABAP--如何在选择屏幕上输出ALV