TABSCRIP 两种类型 scrolling in the application server和scrolling in sapgui的区别

本文深入探讨了TabScript的两种不同实现方式,并解释了它们如何影响屏幕交互和性能。通过具体示例,展示了如何区分这两种类型的TabScript,并讨论了按钮操作是否触发特定事件。进一步提供了一个简单的测试程序来验证分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前已经讲过如何使用tabscrip了,但实际上tabscrip有两种类型,虽然我们用的比较多的是第一种类型scrolling in the  application server但在无需和服务器交互的情况下,我们会选择后面一种,很明显这样能省去交互的时间。

但是,这两种类型是不容易区分的。 

      个人认为,如果tabscrip下的至少有一个subscreen area被多个tab共享,那么这样tabscrip算是前一种,原因是call subscreen的时候必须带有参数,这个时候必然和服务器交互,自然就会触发该屏幕的PAI以及下一屏幕的PBO。

      如果tabscrip下的所有TAB都有自身独立的subscreen area,我认为,这样的tabscrip算是后一种类型,原因是当前屏幕的PBO在call subscreen的时候就已经将该tabscrip下所有的tab里面的信息显示出来了,只是要通过切换tab浏览这显示出来的结果,切换tab的时候并未和application server发生交互,自然就不会触发该屏幕的PAI。

通过上面的分析,你发现原来屏幕的按钮是不一定会触发PAI的,这点在tabscrip中就体现出来了。

 

以下是我写的一个简单测试程序,这里有两个tab共享了同一个subscreen area,所以该tabscrip属于第一种类型,也就是scrolling in the application server类型,因此切换TAB的时候会触发PAI事件:

 

主程序:

*&----------------------------------------------------------------*
*& Report ztest_pillar                                            *
*&----------------------------------------------------------------*

REPORT ztest_pillar.
DATA sus_num TYPE LENGTH 4.
DATA ok_code TYPE sy-ucomm.
CONTROLS tabstrip1 TYPE TABSTRIP.

INITIALIZATION.
tabstrip1-activetab = 'TAB3'.
sus_num = '0110'.




START-OF-SELECTION.
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.                 " CANCEL  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.
  DATA lv_save TYPE sy-ucomm.
  lv_save = ok_code.
  CLEAR ok_code.
CASE lv_save.
  WHEN 'TAB1'.
    tabstrip1-activetab = 'TAB1'.
    sus_num = '0110'.
  WHEN 'TAB2'.
    tabstrip1-activetab = 'TAB2'.
    sus_num = '0120'.
  WHEN 'TAB3'.
    tabstrip1-activetab = 'TAB3'.
  WHEN OTHERS.

ENDCASE.
ENDMODULE.                 " STATUS_0100  OUTPUT

 

 

 

 

屏幕100逻辑流:

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
  CALL SUBSCREEN: SUB1 INCLUDING SY-REPID sus_num,
                  SUB2 INCLUDING SY-REPID '0130'.
PROCESS AFTER INPUT.
 MODULE cancel at exit-command .
 call subscreen: sub1, sub2.

 

几个子屏幕分别是:0110 0120 0130,这里就不列出其逻辑流了 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值