Select語句的使用java
關鍵字into後能夠加 structure(結構體), internal table(內表) 和 fieldlist(字段列表)程序員
Authority 權限數據庫
程序員能夠根據權限對象建立權限實例session
而basic 負責將權限分配給其餘用戶編輯器
At selection-screenide
在選擇屏幕中輸入值後,點擊屏幕左上角的運行按鈕 或 按回車鍵時,能夠對輸入的數據進行有效性校驗.模塊化
重點: at selection-screen最大的做用是檢查當前用戶是否具備對輸入數據進行操做的權限函數
程序中 oop
第一個事件塊是 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.