ABAP Subscreen and tabstrip controls
Subscreen是screen上的一塊區(qū)域,用來動態(tài)加載其他類型為subscreen的screen,subscreen區(qū)域上不能放其他的screen elements。在屏幕上顯示的subscreen是獨(dú)立的,subscreen是在另一屏幕中顯示的一塊獨(dú)立區(qū)域。Subscreen的另外一個用途是不同的programs可以使用相同的subscreens,為了實(shí)現(xiàn)這一點(diǎn)你必須在主程序中執(zhí)行相應(yīng)的screen programs,可以在一個main screen中使用多個subscreens,也可以在運(yùn)行時動態(tài)調(diào)用subscreen??梢栽谙铝星闆r下使用subscreen:
l???????? In screen enhancements(screen exit)
l???????? Within other screen objects(tabstrip controls)
l???????? In the modification assistant
l???????? In web transactions
當(dāng)subscreen area不夠大時,可以使用scrollbar來滾動顯示。Subscreen area的resize屬性決定了其是否可以在橫向和豎向可以被改變??梢酝ㄟ^minimum size屬性來確定什么時候subscreen area不能被resize。Context menu屬性可以為subscreen的output field分配context menu。Subscreen有以下限制:
l???????? CALL SUBSCREEN在LOOP ENDLOOP CHAIN ENDCHAIN里不被允許。
l???????? Subscreen不能有OK_CODE字段
l???????? 在同一個main screen中,所有的包括subscreen的object name必須是唯一的
l???????? Subscreen不能有AT EXIT-COMMAND MODULE
l???????? 在subscreen的modules中不能有SET TITLEBAR SET PF-STATUS SET SCREEN和LEAVE SCREEN語句
可以在screen painter中創(chuàng)建subscreen area,object name用來在call subscreen時,區(qū)分不同的subscreen area。為了使用subscreen,你必須在main screen的PBO和PAI中調(diào)用它,CALL SUBSCREEN <subscreenarea>用來告訴system把subscreen的PBO和PAI processing block作為main screen PBO和PAI的一部分。Subscreen的ABAP module的寫法與正常screen一樣。Flow logic中的fields是ABAP program中的global field。
?????? 如果subscreen和main program不在同一個module pool中,在main program中的global data在subscreen中是不可見的,subscreen中的field也不會傳輸?shù)絤ain program中。必須自己實(shí)現(xiàn)data transfer,例如通過function module export import data,在subscreen中使用適當(dāng)?shù)膍ove語句。如果想在不同的main program中使用相同的subscreens,你可以把這些subscreens封裝到function group中,通過function module來實(shí)現(xiàn)data transport。這一技術(shù)用來實(shí)現(xiàn)customer subscreen(screen enhancement)。在call subscreen之前通過調(diào)用function group的function module把需要的數(shù)據(jù)傳給function group。這保證了在subscreen的PBO之前,subscreen已經(jīng)得到了需要的數(shù)據(jù)。在main screen的PAI中,順序是相反的。在subscreen的PAI之后通過調(diào)用function group的function module把數(shù)據(jù)傳給function module。數(shù)據(jù)的互相傳遞是通過function group的global data來實(shí)現(xiàn)的。傳向function group的數(shù)據(jù)必須把FM參數(shù)的值賦給global data,傳向calling program的數(shù)據(jù)則需要把global data的值賦給FM的參數(shù)。
?????? TABSTRIP用來把一個應(yīng)用的不同部分以友好宜用的方式展現(xiàn)在一個屏幕上,以下情況不適用于tabstrip:
l???????? 在application components中需要改變screen environment(比如menus,pushbuttons,header data等等)。Tabstrip的surrounding screen必須是保持不變的。
l???????? Application components必須以特定的順序執(zhí)行,而tabstrip對application components的順序是不受限制的。
l???????? Components是動態(tài)處理的,一個tab page的用戶輸入可以使其他tab page立即出現(xiàn)
Tabstrip control和batch input是兼容的。
Tabstrip control包括單獨(dú)的tab page,每個page都有自己的page title。Tabstrip control為page title只提供一行。當(dāng)tab pages比較多時,page title不能全部放在一行中,可以通過scroll bar來瀏覽剩余的tab pages。一個page element由tab title,subscreen area和subscreen組成。從技術(shù)角度來講tabtitle就相當(dāng)于pushbutton。Page element的內(nèi)容是通過subscreen來實(shí)現(xiàn)的。給每一個page element分配一個subscreen area用來call subscreen。除了object name,starting position和static size,還有其他一些特殊的屬性。Tabstrip control的創(chuàng)建包括三個步驟:
l???????? Define the tab area
l???????? Define the tab titles如果必要的話:add further tab titles
l???????? Assign a subscreen area to each page element
在screen painter中將tabstrip control拖動到screen中,給tabstrip control的object name屬性分配一個name,在ABAP中通過CONTROL聲明同樣name的object,類型為TABSTRIP。TABSTRIP類型在type pool CXTAB中定義,ACTIVETAB field存儲當(dāng)前激活的tabstrip的tab title的function code。Tabstrip的tab pages的缺省數(shù)量為2。從技術(shù)角度來講tab title就是pushbutton,它有name,text,fctcode和fcttype。Tabtitle可以有function type ‘’或P。如果function type是’’,PAI就會被激活,tab title的function code就會被transport到command field中。如果function type是P,可以在不同的pages之間scroll,但是并不會激活PAI,如果想在tabstrip中放兩個以上的pages,需要將pushbutton拖動到tabstrip的tab title area中。你必須給每一個tabpage分配一個subscreen area,可以為每一個tab page拖動一個subscreen area也可以把一個subscreen area分配給不同的tab pages,通過把subscreen area的name分配給相關(guān)的tab pages的reference object屬性。如果你為每一個tab page分配了不同的subscreen area,可以在front end scroll between tabpages locally。要做到這點(diǎn),需要在send main screen的同時把所有的subscreen也send到front end。所有的tab title的funct type也必須是P。這樣在不同的tabpages間切換時,fronend和application server之間沒信息交互。當(dāng)用戶觸發(fā)main screen的PAI時,所有subscreens的PAI也會被觸發(fā)。這就意味著所有的field checks都在運(yùn)行??梢园裻abstrip看成是一個large screen。Local scrolling tabstrip適用于display transaction。Scroll locally tabstrip的程序步驟:
l???????? 給每一個tab page分配一個subscreen area
l???????? 在flow logic中調(diào)用所有的screen
l???????? 給所有的tab title分配function type P
如果subscreen中沒有任何可顯示的element,那么這個tab page就會被隱藏。如果所有的subscreen都沒有可顯示的element,那么整個tabstrip control就會被隱藏。
PROCESS BEFORE OUTPUT.
?????? CALL SUBSCREEN subarea1
????????????? INCLUDING sy-cprog ‘0101’.
?????? CALL SUBSCREEN subarea2
????????????? INCLUDING sy-cprog ‘0102’.
?????? CALL SUBSCREEN subarea3
????????????? INCLUDING sy-cprog ‘0103’.
PROCESS AFTER INPUT.
?????? CALL SUBSCREEN subarea1
?????? CALL SUBSCREEN subarea2
?????? CALL SUBSCREEN subarea3
CONTROLS my_tab_strip TYPE TABSTRIP.
如果所有page element共享一個subscreen area,程序通過function code來決定顯示那一個subscreen。這一過程分為兩個步驟:
l???????? PAI中,通過用戶選擇的tabtitle決定哪個page element應(yīng)當(dāng)active
l???????? 在PBO中程序來顯示相應(yīng)的screen。
處理過程中system只check顯示的subscreen的fields。實(shí)現(xiàn)這種tabstrip scrolling的步驟:
l???????? 所有的tab pages必須共享一個subscreen area
l???????? 所有的tab title必須是function type ‘’
l???????? 在flow logic中必須通過一個variable來確定要call的subscreen
在PAI block中你必須調(diào)用一個function module,用來根據(jù)function code為TABSTRIP control object的ACTIVETAB字段賦值。在PBO,在subscreen調(diào)用之前必須有一個module用來根據(jù)ACTIVETAB的值為subscreen相應(yīng)的variable賦值。必須給這個variable一個initial value,用來第一屏幕調(diào)用時使用。可以通過screen table來隱藏一個tab page(screen-active = 0)。應(yīng)該在tabstrip control之前實(shí)現(xiàn)它,以保證screen environment是constant的。
PROCESS BEFORE OUTPUT.
?????? MODULE fill_dynnr.
?????? CALL SUBSCREEN subarea
????????????? INCLUDEING SY-CPROG dynnr.
PROCESS AFTER INPUT.
?????? CALL SUBSCREEN subarea.
?????? MODULE user_command.
CONTROLS my_tab_strip TYPE tabstrip.
DAYA ok_code TYPE sy-ucomm,
????? Dynnr TYPE sy-dynnr.
MODULE fill_dynnr OUTPUT.
?????? CASE my_tab_strip-activetab.
????????????? WHEN ‘PC1’.
???????????????????? Dynnr = ‘0101’.
????????????? WHEN ‘PC2’.
???????????????????? Dynnr = ‘0102’.
????????????? WHEN ‘PC3’.
???????????????????? Dynnr = ‘0103’.
????????????? WHEN OTHERS.
???????????????????? Dynnr = ‘0101’.
???????????????????? My_tab_strip-activetab = ‘PC1’.
?????? ENDCASE.
ENDMODULE.
MODULE user_command INPUT.
?????? CASE ok_code.
?????? WHEN ‘PC1’ OR ‘PC2’ OR ‘PC3’.
????????????? My_tab_strip-activetab = ok_code.
?????? ENDCASE.
ENDMODULE.
可以通過tabstrip control wizard來創(chuàng)建tabstrip control,這樣相應(yīng)的program objects都會被自動創(chuàng)建,可以提高開發(fā)效率。
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/lvzhqi/archive/2009/08/12/4436903.aspx
總結(jié)
以上是生活随笔為你收集整理的ABAP Subscreen and tabstrip controls的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP 货币转换中的转换因子
- 下一篇: 《SAP高级应用开发》---Idoc学习