日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABAP屏幕基础

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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屏幕基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。