ABAP Subscreen and tabstrip controls

Subscreenscreen上的一块区域,用来动态加载其他类型为subscreenscreensubscreen区域上不能放其他的screen elements。在屏幕上显示的subscreen是独立的,subscreen是在另一屏幕中显示的一块独立区域。Subscreen的另外一个用途是不同的programs可以使用相同的subscreens,为了实现这一点你必须在主程序中执行相应的screen programs,可以在一个main screen中使用多个subscreens,也可以在运行时动态调用subscreen。可以在下列情况下使用subscreen

l         In screen enhancements(screen exit)

l         Within other screen objects(tabstrip controls)

l         In the modification assistant

l         In web transactions

subscreen area不够大时,可以使用scrollbar来滚动显示。Subscreen arearesize属性决定了其是否可以在横向和竖向可以被改变。可以通过minimum size属性来确定什么时候subscreen area不能被resizeContext menu属性可以为subscreenoutput field分配context menuSubscreen有以下限制:

l         CALL SUBSCREENLOOP ENDLOOP CHAIN ENDCHAIN里不被允许。

l         Subscreen不能有OK_CODE字段

l         在同一个main screen中,所有的包括subscreenobject name必须是唯一的

l         Subscreen不能有AT EXIT-COMMAND MODULE

l         subscreenmodules中不能有SET TITLEBAR SET PF-STATUS SET SCREENLEAVE SCREEN语句

可以在screen painter中创建subscreen areaobject name用来在call subscreen时,区分不同的subscreen area。为了使用subscreen,你必须在main screenPBOPAI中调用它,CALL SUBSCREEN <subscreenarea>用来告诉systemsubscreenPBOPAI processing block作为main screen PBOPAI的一部分。SubscreenABAP module的写法与正常screen一样。Flow logic中的fieldsABAP program中的global field

       如果subscreenmain program不在同一个module pool中,在main program中的global datasubscreen中是不可见的,subscreen中的field也不会传输到main program中。必须自己实现data transfer,例如通过function module export import data,在subscreen中使用适当的move语句。如果想在不同的main program中使用相同的subscreens,你可以把这些subscreens封装到function group中,通过function module来实现data transport。这一技术用来实现customer subscreen(screen enhancement)。在call subscreen之前通过调用function groupfunction module把需要的数据传给function group。这保证了在subscreenPBO之前,subscreen已经得到了需要的数据。在main screenPAI中,顺序是相反的。在subscreenPAI之后通过调用function groupfunction module把数据传给function module。数据的互相传递是通过function groupglobal data来实现的。传向function group的数据必须把FM参数的值赋给global data,传向calling program的数据则需要把global data的值赋给FM的参数。

       TABSTRIP用来把一个应用的不同部分以友好宜用的方式展现在一个屏幕上,以下情况不适用于tabstrip

l         application components中需要改变screen environment(比如menuspushbuttonsheader data等等)Tabstripsurrounding screen必须是保持不变的。

l         Application components必须以特定的顺序执行,而tabstripapplication components的顺序是不受限制的。

l         Components是动态处理的,一个tab page的用户输入可以使其他tab page立即出现

Tabstrip controlbatch input是兼容的。

Tabstrip control包括单独的tab page,每个page都有自己的page titleTabstrip controlpage title只提供一行。当tab pages比较多时,page title不能全部放在一行中,可以通过scroll bar来浏览剩余的tab pages。一个page elementtab titlesubscreen areasubscreen组成。从技术角度来讲tabtitle就相当于pushbuttonPage element的内容是通过subscreen来实现的。给每一个page element分配一个subscreen area用来call subscreen。除了object namestarting positionstatic size,还有其他一些特殊的属性。Tabstrip control的创建包括三个步骤:

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 controlobject name属性分配一个name,在ABAP中通过CONTROL声明同样nameobject,类型为TABSTRIPTABSTRIP类型在type pool CXTAB中定义,ACTIVETAB field存储当前激活的tabstriptab titlefunction codeTabstriptab pages的缺省数量为2。从技术角度来讲tab title就是pushbutton,它有nametextfctcodefcttypeTabtitle可以有function type ‘’P。如果function type’’PAI就会被激活,tab titlefunction code就会被transportcommand field中。如果function typeP,可以在不同的pages之间scroll,但是并不会激活PAI,如果想在tabstrip中放两个以上的pages,需要将pushbutton拖动到tabstriptab title area中。你必须给每一个tabpage分配一个subscreen area,可以为每一个tab page拖动一个subscreen area也可以把一个subscreen area分配给不同的tab pages,通过把subscreen areaname分配给相关的tab pagesreference object属性。如果你为每一个tab page分配了不同的subscreen area,可以在front end scroll between tabpages locally。要做到这点,需要在send main screen的同时把所有的subscreensendfront end。所有的tab titlefunct type也必须是P。这样在不同的tabpages间切换时,fronendapplication server之间没信息交互。当用户触发main screenPAI时,所有subscreensPAI也会被触发。这就意味着所有的field checks都在运行。可以把tabstrip看成是一个large screenLocal scrolling tabstrip适用于display transactionScroll locally tabstrip的程序步骤:

l         给每一个tab page分配一个subscreen area

l         flow logic中调用所有的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应当active

l         PBO中程序来显示相应的screen

处理过程中systemcheck显示的subscreenfields。实现这种tabstrip scrolling的步骤:

l         所有的tab pages必须共享一个subscreen area

l         所有的tab title必须是function type ‘’

l         flow logic中必须通过一个variable来确定要callsubscreen

PAI block中你必须调用一个function module,用来根据function codeTABSTRIP control objectACTIVETAB字段赋值。在PBO,在subscreen调用之前必须有一个module用来根据ACTIVETAB的值为subscreen相应的variable赋值。必须给这个variable一个initial value,用来第一屏幕调用时使用。可以通过screen table来隐藏一个tab pagescreen-active = 0)。应该在tabstrip control之前实现它,以保证screen environmentconstant的。

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来创建tabstrip control,这样相应的program objects都会被自动创建,可以提高开发效率。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值