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