ABAP Subscreen and tabstrip controls

Subscreen是screen上的一块区域,用来动态加载其他类型为subscreen的screen,subscreen区域上不能放其他的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 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中创建subscreen area,object name用来在call subscreen时,区分不同的subscreen area。为了使用subscreen,你必须在main screen的PBO和PAI中调用它,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也不会传输到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 group的function module把需要的数据传给function group。这保证了在subscreen的PBO之前,subscreen已经得到了需要的数据。在main screen的PAI中,顺序是相反的。在subscreen的PAI之后通过调用function group的function module把数据传给function module。数据的互相传递是通过function group的global data来实现的。传向function group的数据必须把FM参数的值赋给global data,传向calling program的数据则需要把global data的值赋给FM的参数。

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

l         在application components中需要改变screen environment(比如menus,pushbuttons,header data等等)。Tabstrip的surrounding screen必须是保持不变的。

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

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

Tabstrip control和batch input是兼容的。

Tabstrip control包括单独的tab page,每个page都有自己的page title。Tabstrip control为page title只提供一行。当tab pages比较多时,page title不能全部放在一行中,可以通过scroll bar来浏览剩余的tab pages。一个page element由tab title,subscreen area和subscreen组成。从技术角度来讲tabtitle就相当于pushbutton。Page element的内容是通过subscreen来实现的。给每一个page element分配一个subscreen area用来call subscreen。除了object name,starting position和static 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 control的object name属性分配一个name,在ABAP中通过CONTROL声明同样name的object,类型为TABSTRIP。TABSTRIP类型在type pool CXTAB中定义,ACTIVETAB field存储当前激活的tabstrip的tab title的function code。Tabstrip的tab pages的缺省数量为2。从技术角度来讲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分配给相关的tab pages的reference object属性。如果你为每一个tab page分配了不同的subscreen area,可以在front end scroll between tabpages locally。要做到这点,需要在send main screen的同时把所有的subscreen也send到front end。所有的tab title的funct type也必须是P。这样在不同的tabpages间切换时,fronend和application server之间没信息交互。当用户触发main screen的PAI时,所有subscreens的PAI也会被触发。这就意味着所有的field checks都在运行。可以把tabstrip看成是一个large screen。Local scrolling tabstrip适用于display transaction。Scroll 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。

处理过程中system只check显示的subscreen的fields。实现这种tabstrip scrolling的步骤:

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

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

l         在flow logic中必须通过一个variable来确定要call的subscreen

在PAI block中你必须调用一个function module,用来根据function code为TABSTRIP control object的ACTIVETAB字段赋值。在PBO,在subscreen调用之前必须有一个module用来根据ACTIVETAB的值为subscreen相应的variable赋值。必须给这个variable一个initial value,用来第一屏幕调用时使用。可以通过screen table来隐藏一个tab page(screen-active = 0)。应该在tabstrip control之前实现它,以保证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来创建tabstrip control,这样相应的program objects都会被自动创建,可以提高开发效率。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lvzhqi/archive/2009/08/12/4436903.aspx

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值