ABAP SCREEN BASIC

SAP programming model

Single-screen transaction

l         Input screen and data screen組合在一個window

l         Create, changedisplay模式自由切換

l         Direct access to each object

l         System retains context after saving

ABAP program types:

l         Executable program(type 1)可以通過ABAP EDITOR直接運行,一個processing blocks set按照預先定義好的順序執行。可以使用標準的selection screen。主要用來顯示list

l         Module pool(type M)爲了使module pool可以被執行你必須至少定義一個transaction code用來指定initial screen。可以通過screen attributes來靜態指定screen的調用順序或者通過程序代碼來動態指定screen的調用順序

還有一些類型的程序並不能夠被直接執行,它們用來作爲modularization units的容器,被其他可執行程序調用。只要你調用這些程序中的任一module,系統都會把整個主程序調用到當前的internal session中。

l         Function Group(Type F)包括function moduleslocal data declarationsscreens

l         Include Program(Type I)可以包括任何ABAP Statements

l         Interface Pool (Type J)包括global interfaceslocal data declarations

l         Class Pool(Type K)包括global classeslocal data declarations

爲了使程序更容易被理解並提高代碼的可複用性,建議在程序中使用include programScreen用來輸入和顯示數據,它能夠很好的與data dictionary結合在一塊兒,可以進行輸入數據的一致性檢查,screen中又很多組件可以爲用戶提供友好的交互界面,比如push buttons, tabstrip controls, table controls等等。Screen中的以下動作都會觸發screenPAI,比如:entering data, choosing a menu entry or clicking a pushbutton等。所有的screen elements: text filed, input/output field, status icon, group box, radio button, checkboxpushbutton都具有general attributes, Dictionary attributes, program attributesdisplay attributes。對於element: subscreen , tabstrip controltable control具有general attributes和跟它們本身相關的special attributes。可以把一個screenattributes分爲以下幾類:

l         Statically definable cannot be changed dynamically本能被動態改變的屬性

l         Statically definable can be changed dynamically 可以被動態改變的屬性

l         Can only be defined dynamically只能被動態改變的屬性

Screen是用戶和ABAP program交互的途徑。

Screen包括screen image和他的flow logic。嚴格來說它是控制screen image處理的程序。Screen有四個組件:screen maskscreen attributeselement listflow logicFlow logic包含flow logic代碼但不是abap語句。Screen是其他screen elements的容器。大於9000screen number是爲sap system customer保留的。Screen number 10001010是爲dictionary tablemaintenance screenselection screen of executable準備的。Screen type決定了screen的使用目的,其他的一些特殊attributescomponents是由這個attribute決定的。Next screen attribute決定了screen執行的固定順序。

Screen attributes:

l         Admin

Program Screen no Short desc. Screen group Changes Generation Status Original lang. Dev Class

l         Type

Norma Sub screen Modal dialog box Selection screen

l         Size

Static Maintained occupied

Dynamic: Starting at size

l         Sequence

Next screen

l         Settings

Cursor position Hold data Fixed font Runtime compression Context menu form

創建screen的步驟

l         Set the general screen attributes

l         Design the screen layout

l         Set the field attributes

l         Write the flow logic

創建screen的途徑:

l         object navigator中通過右鍵,選擇Create->screen

l         abap editor寫入代碼call screen <num>然後雙擊<num>

可以在next screen field中設置next screenscreen number。如果你把next screenscreen number設爲0,當這個screen完成處理後其又會被重新調用。

通常使用ABAP Dictionary中的field description來定義screen element,也可以使用程序中的field description來定義,當然前提條件是這個程序已經創建。你可以把key word textstemplates結合在一起使用或者單獨使用。Screen elements的屬性在screen painter中有六個視圖用來維護。在screen painter中你使用的是external data types。他們與dictionary中的data type相對應,系統在format column中顯示external data type。對於沒有ABAP dictionary referenceelements必須手工設置external data typeExternal data typeABAP internal data type的對應關係:

http://help.sap.com/saphelp_47x200/helpdata/en/d1/801b50454211d189710000e8322d00/frameset.htm

screenPBOPAI事件中有自己的keywords。可以在一個屏幕中調用多個module,通過SY-DYNNR來判斷當前的screen numberPBOmodule必須在MODULE…OUTPUT中定義,PAImodule必須在MODULE INPUT中定義。在screen processing程序中有不同的system processorsABAP processor控制module中的program flowDYNP processor控制screenflow logic並負責準備要在screen上顯示的數據。在處理過程中,通過TABLESDATA定義的數據是可以見的。系統通過screenelement list來識別,取得數據顯示在屏幕上並把用戶修改後的數據傳回去。數據的copy是必需的,因爲screenprogram是兩個不同的processor。一個system program用來專門完成copy過程。在處理過程中ABAPDYNP同名的字段會被比較。爲了使screen和它的program能進行信息交互,他們必須舉用相同名字的變量。在所有PBO processing blocks結束後,程序中的字段內容並會被copy到屏幕中相同名字的字段中。在第一個PAI module執行之前,所有的屏幕中的字段內容並會被copy到程序中相同名字的字段中。建議使用自己的結構來作爲屏幕和程序之間交互的介質,以保證互相傳輸的信息正是你想要的。在PBO開始的時候,runtime會把當前screen的靜態屬性和動態屬性寫到ABAPsystem table中,這個tableline typescreen。下面是screen structure的結構:SCREEN-NAME SCREEN-GROUP1 SCREEN-GROUP2 SCREEN-GROUP3 SCREEN-GROUP4 SCREEN-LENGTH SCREEN-INPUT SCREEN-OUTPUT SCREEN-REQUIRED SCREEN-INTENSIFIED SCREEN-INVISIBLE SCREEN-ACTIVE 動態修改screen elements的屬性是暫時的。在screen system table中會爲每一個screen element創建一行。Screen system table是在PBO之前初始化的,會有專門的system programscreen element的靜態屬性copyscreen system table中。你就可以在PBO的一個module中動態修改這些屬性了,如下:

LOOP AT SCREEN.

    

     MODIFY SCREEN.

ENDLOOP.

‘1’代表屬性被設置,’0’代表沒有設置。

可以通過SCREEN-NAMESCREEN-GROUP1SCREEN-GROUP4來確定要設置那些element的屬性。

通過在screen painter中設置modification group可以同時設置多個screen element的屬性,可以在element list或者screen painterlayout editor中設置elementmodification group

LOOP AT SCREEN WHEREREAD TABLE SCREEN是不支持的。需要注意的是如果在screen painter中被靜態的設置爲INVISIBLE那麼通過SCREEN-ACTIVE =1不能將其設置爲VISIBLE,只能通過INVISIBLE=0。然而如果在screen painter中設置爲VISIBLE那麼可以通過SCREEN-ACTIVE=0將其設置爲INVISIBLE。它與下面的三條語句效果相同SCREEN-INVISIBLE=1 SCREEN-INPUT=0 SCREEN-OUTPUT=0,複雜的transaction有多個screen組成,initial screen是在定義transaction code時定義的,其他的screen的順序是由客戶輸入決定的,next screenscreen attributes中靜態定義,在程序中可以通過set screen xxxoverrideSet screen暫時改變了screennext screen attributeScreen必須是同一個

ProgramscreenNext screen在當前screen處理結束後或者leave screen語句之後處理,可以使用LEAVE TO SCREEN XXX語句效果同SET SCREEN XXX. LEAVE SCREEN.。可以通過call screen來插入一個screen sequence,相當於把另外一個layer加入到了stack中,需要注意的是通過這種方式創建的layer需要在之後被刪除掉。可以在插入的screen sequence之後通過靜態設定next screen屬性或動態把next screen設爲0來實現。爲了中斷當前screen的處理跳到另外一個新的screen,可以通過call screen <xxx>來實現,<xxx>必須是同一個程序的screen。在程序中,系統創建了一個stack,這個stack必須在程序結束前被destroyed。爲了繼續執行CALL SCREEN之後的語句可以使用SET SCRENN 0.LEAVE SCREENLEAVE TO SCREEN 0來實現。如果你在call chain之外使用上面的語句,程序就會結束,control就會返回到調用它的語句之後。可以通過LEAVE PROGRAMterminate一個程序。可以通過CALL SCREEN STARTING ATENDING AT來設置screen的位置和大小。但是其中的screen必須被設置爲modal dialog screen。如果沒有ENDING AT語句dialog box的大小就有screenused size屬性確定。如果用ENDING AT指定了screen的大小但是沒有足夠的空間這個screen就會帶有scrollbars。屏幕顯示時通常cursor就會被放置在第一個輸入字段上,可以通過screencursor position屬性將其定位到其他不同的字段。可以通過語句SET CURSOR FIELD <object_name> OFFSET <position>PBO事件中來設置cursor的位置。<object_name>既可以是字段的名稱也可以是變量名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章