Abap 选项卡中的子屏幕未刷新

Abap 选项卡中的子屏幕未刷新,abap,Abap,我有一个选择屏幕,我想在其中动态更改选项卡。在我的示例中,如果设置了标志p_flg1,则应显示tab1,否则将显示tab2,并停用另一个 REPORT zzz. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE tit1. PARAMETERS: p_flg1 TYPE abap_bool AS CHECKBOX USER-COMMAND md DEFAULT abap_true. "Master data SELECTION-

我有一个选择屏幕,我想在其中动态更改选项卡。在我的示例中,如果设置了标志
p_flg1
,则应显示
tab1
,否则将显示
tab2
,并停用另一个

REPORT zzz.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE tit1.
  PARAMETERS:
    p_flg1 TYPE abap_bool AS CHECKBOX USER-COMMAND md DEFAULT abap_true. "Master data
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF TABBED BLOCK tab FOR 20 lines.
  SELECTION-SCREEN TAB (54) tab1 USER-COMMAND tab1 DEFAULT SCREEN 010.
  SELECTION-SCREEN TAB (54) tab2 USER-COMMAND tab2 DEFAULT SCREEN 011.
  SELECTION-SCREEN TAB (54) tab3 USER-COMMAND tab3 DEFAULT SCREEN 900.
SELECTION-SCREEN END OF BLOCK tab.

SELECTION-SCREEN BEGIN OF SCREEN 010 AS SUBSCREEN.
  PARAMETERS:
    p_flg2 TYPE abap_bool AS CHECKBOX.
SELECTION-SCREEN END OF SCREEN 010.

SELECTION-SCREEN BEGIN OF SCREEN 011 AS SUBSCREEN.
  PARAMETERS:
    p_text TYPE text.
SELECTION-SCREEN END OF SCREEN 011.

SELECTION-SCREEN BEGIN OF SCREEN 900 AS SUBSCREEN.
  PARAMETERS:
    p_flg3 TYPE abap_bool AS CHECKBOX.
SELECTION-SCREEN END OF SCREEN 900.

INITIALIZATION.
tit1 = 'Tit1'.
tab1 = 'Tab1'.
tab2 = 'Tab2'.
tab3 = 'Tab3'.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name = 'TAB1'.
      IF p_flg1 = abap_true.
        screen-active = 1.
      ELSE.
        screen-active = 0.
      ENDIF.
    ELSEIF screen-name = 'TAB2'.
      IF p_flg1 = abap_true.
        screen-active = 0.
      ELSE.
        screen-active = 1.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.
但是,在取消设置参数
p_flg1
后,更改的只是选项卡名称,而不是其下的子屏幕。只有当我切换到
选项卡3
并返回时,它才会更改

启动程序后

取消设置
p_FLG1
后,仅更改选项卡名称,而不更改其下的子屏幕

要解决这个问题,我必须切换到Tab3

…然后回来

我假设我需要调用一些东西,例如
MODIFY SCREEN
之后的函数模块,以执行一些事件(可能是PAI?),但是我没有找到任何关于该事件的信息


设置/取消设置标志后,如何立即刷新选项卡下的子屏幕?

这是一个常见问题-如果禁用/隐藏寄存器的第一个选项卡,则第一张卡的子屏幕将保持不变,直到用户选择其他卡。寄存器本质上是一个子屏幕区域,顶部有一个按钮栏,如果所包含的屏幕未被更改,则显示默认值。使用所述的“动态分配”可能会得到更好的结果(约为页面中心)。如果这不起作用,您可能必须在更改复选框后模拟卡片更改。当然,简单的解决方案是将第三张(静态)卡移到前面…

这是一个常见问题-如果禁用/隐藏寄存器的第一个选项卡,则第一张卡的子屏幕将保持不变,直到用户选择不同的卡。寄存器本质上是一个子屏幕区域,顶部有一个按钮栏,如果所包含的屏幕未被更改,则显示默认值。使用所述的“动态分配”可能会得到更好的结果(约为页面中心)。如果这不起作用,您可能必须在更改复选框后模拟卡片更改。当然,简单的解决办法是将第三张(静态)卡片移到前面…

天才男人!如“动态分配”中所述,在
screen active=1
之后添加
tab dynnr='0010'
tab dynnr='0011'
,无需重新组织寄存器即可完成作业。谢谢真是个天才!如“动态分配”中所述,在
screen active=1
之后添加
tab dynnr='0010'
tab dynnr='0011'
,无需重新组织寄存器即可完成作业。谢谢