Tabstrip冻结

Tabstrip冻结,tabs,abap,dynpro,Tabs,Abap,Dynpro,我在Dynpro上设置了一个标签。我有两个标签。 在每个选项卡上,我都设置了一个子屏幕 0100-主屏幕 0110-子屏幕一 0120-子屏幕2 tabstrip是使用这些属性定义的 选项卡: Title strip Reference subscreen Function code Function type Subscreen One SUB1 STP_CTGRY_TAB P Subscreen Two SUB1

我在Dynpro上设置了一个标签。我有两个标签。 在每个选项卡上,我都设置了一个子屏幕

0100-主屏幕
0110-子屏幕一
0120-子屏幕2

tabstrip是使用这些属性定义的

选项卡:

Title strip    Reference subscreen  Function code  Function type
Subscreen One  SUB1                 STP_CTGRY_TAB  P
Subscreen Two  SUB1                 TRAN_TAB       P
Title strip    Reference subscreen  Function code  Function type
Subscreen One  SUB1                 STP_CTGRY_TAB  P
Subscreen Two  SUB2                 TRAN_TAB       P
子屏幕(子屏幕区域):

dynpro 0100流量逻辑为:

 PROCESS BEFORE OUTPUT.
   MODULE pbo.
   CALL SUBSCREEN sub1 INCLUDING sy-repid dynnr.
 PROCESS AFTER INPUT.
   CALL SUBSCREEN sub1.
   MODULE pai.
PROCESS BEFORE OUTPUT.
  MODULE pbo.
  CALL SUBSCREEN sub1 INCLUDING sy-repid dynnr.
PROCESS AFTER INPUT.
  CALL SUBSCREEN sub1.
  MODULE pai.
PROCESS BEFORE OUTPUT.
  MODULE pbo.
  CALL SUBSCREEN sub1 INCLUDING sy-repid '0110'.
  CALL SUBSCREEN sub2 INCLUDING sy-repid '0120'.
PROCESS AFTER INPUT.
  CALL SUBSCREEN sub1.
  CALL SUBSCREEN sub2.
  MODULE pai.
在程序级别,我声明

CONTROLS mytabstrip TYPE TABSTRIP.
DATA: ok_code          LIKE sy-ucomm,
  dynnr            TYPE sy-dynnr.
在主屏幕0100 PBO处:

IF mytabstrip-activetab IS INITIAL OR dynnr IS INITIAL.
  mytabstrip-activetab = 'STP_CTGRY_TAB'.
  dynnr = '0110'.
ENDIF.
在主屏幕0100 PAI:

CASE ok_code.
 WHEN 'STP_CTGRY_TAB'.
  dynnr = '0110'.
  mytabstrip-activetab = ok_code.
 WHEN 'TRAN_TAB'.
  dynnr = '0120'.
  mytabstrip-activetab = ok_code.
ENDCASE.
如果我调试我的程序并设置断点,tabstrip就会工作。但是,如果我运行程序并更改tabstrip的选项卡,子屏幕似乎会冻结并重叠应显示的子屏幕。总而言之,选项卡上的所有更改都不起作用

我忘记密码了吗?有谁能帮我解决我可能错过的问题吗?

原因:

  • 2个选项卡的功能类型使用值“p”定义,这意味着tabstrip使用“本地分页”工作,因此它需要使用2个子屏幕区域,每个子屏幕都指向一个不同的子屏幕,以便选项卡上的操作按预期工作

  • tabstrip有两种用法

  • 对所有选项卡使用一个子屏幕(“服务器分页”) 因此,如果用户单击选项卡,则必须加载每个新数据

  • 每个选项卡使用一个子屏幕(“本地分页”) 整个数据将在程序开始时加载。
    注意:在屏幕布局编辑器中,您必须将参数
    FctType
    设置为
    P-本地GUI函数。

决议:

如果要使用服务器分页(1),请将函数类型设为空,如下所示:

Title strip    Reference subscreen  Function code  Function type
Subscreen One  SUB1                 STP_CTGRY_TAB  
Subscreen Two  SUB1                 TRAN_TAB       
dynpro 0100流量逻辑为:

 PROCESS BEFORE OUTPUT.
   MODULE pbo.
   CALL SUBSCREEN sub1 INCLUDING sy-repid dynnr.
 PROCESS AFTER INPUT.
   CALL SUBSCREEN sub1.
   MODULE pai.
PROCESS BEFORE OUTPUT.
  MODULE pbo.
  CALL SUBSCREEN sub1 INCLUDING sy-repid dynnr.
PROCESS AFTER INPUT.
  CALL SUBSCREEN sub1.
  MODULE pai.
PROCESS BEFORE OUTPUT.
  MODULE pbo.
  CALL SUBSCREEN sub1 INCLUDING sy-repid '0110'.
  CALL SUBSCREEN sub2 INCLUDING sy-repid '0120'.
PROCESS AFTER INPUT.
  CALL SUBSCREEN sub1.
  CALL SUBSCREEN sub2.
  MODULE pai.
在PBO和PAI模块中,定义ABAP代码以将DYNNR和MYTABSTRIP-ACTIVETAB变量初始化为正确的值,如初始问题所示

如果要使用本地分页(2),请执行以下操作:

选项卡:

Title strip    Reference subscreen  Function code  Function type
Subscreen One  SUB1                 STP_CTGRY_TAB  P
Subscreen Two  SUB1                 TRAN_TAB       P
Title strip    Reference subscreen  Function code  Function type
Subscreen One  SUB1                 STP_CTGRY_TAB  P
Subscreen Two  SUB2                 TRAN_TAB       P
子屏幕(子屏幕区域):

dynpro 0100流量逻辑为:

 PROCESS BEFORE OUTPUT.
   MODULE pbo.
   CALL SUBSCREEN sub1 INCLUDING sy-repid dynnr.
 PROCESS AFTER INPUT.
   CALL SUBSCREEN sub1.
   MODULE pai.
PROCESS BEFORE OUTPUT.
  MODULE pbo.
  CALL SUBSCREEN sub1 INCLUDING sy-repid dynnr.
PROCESS AFTER INPUT.
  CALL SUBSCREEN sub1.
  MODULE pai.
PROCESS BEFORE OUTPUT.
  MODULE pbo.
  CALL SUBSCREEN sub1 INCLUDING sy-repid '0110'.
  CALL SUBSCREEN sub2 INCLUDING sy-repid '0120'.
PROCESS AFTER INPUT.
  CALL SUBSCREEN sub1.
  CALL SUBSCREEN sub2.
  MODULE pai.
在本地分页场景中,PBO和PAI模块中不需要ABAP代码来在选项卡之间切换,因为它是在SAP GUI上本地处理的


此处的更多信息:

因此,扩展您已经完成的步骤并将其标记为答案。