选项卡中的子屏幕未刷新
Subscreen in tab not getting refreshed
我有一个选择屏幕,我想在其中动态更改选项卡。在我的示例中,如果设置了标志 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
后改变的只是选项卡名称,而不是其下的子屏幕。只有当我切换到 tab3
并返回时它才会改变。
启动程序后。
取消设置后 P_FLG1
只有选项卡名称发生变化,它下面的子屏幕没有变化。
要解决这个问题,我必须切换到 Tab3...
...然后返回
我假设我需要调用一些东西,例如MODIFY SCREEN
之后的一个功能模块,用于执行某个事件(也许是 PAI?),但是我没有找到任何相关信息。
在 setting/unsetting 标志后立即刷新选项卡下的子屏幕,我需要做什么?
这是一个常见问题 - 如果您 disable/hide 注册的第一个选项卡,则第一张卡片的子屏幕会保留在原位,直到用户选择另一张卡片。寄存器本质上是一个子屏幕区域,顶部有一个按钮栏,如果包含的屏幕没有被某些东西改变,则显示默认值。使用 "Dynamic Assignment" 描述的 here(大约在页面中心),您可能会得到更好的结果。如果这不起作用,您可能必须在更改复选框后模拟卡片更改。当然,简单的解决方案是将第三张(静态)卡移到前面...
我有一个选择屏幕,我想在其中动态更改选项卡。在我的示例中,如果设置了标志 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
后改变的只是选项卡名称,而不是其下的子屏幕。只有当我切换到 tab3
并返回时它才会改变。
启动程序后。
取消设置后 P_FLG1
只有选项卡名称发生变化,它下面的子屏幕没有变化。
要解决这个问题,我必须切换到 Tab3...
...然后返回
我假设我需要调用一些东西,例如MODIFY SCREEN
之后的一个功能模块,用于执行某个事件(也许是 PAI?),但是我没有找到任何相关信息。
在 setting/unsetting 标志后立即刷新选项卡下的子屏幕,我需要做什么?
这是一个常见问题 - 如果您 disable/hide 注册的第一个选项卡,则第一张卡片的子屏幕会保留在原位,直到用户选择另一张卡片。寄存器本质上是一个子屏幕区域,顶部有一个按钮栏,如果包含的屏幕没有被某些东西改变,则显示默认值。使用 "Dynamic Assignment" 描述的 here(大约在页面中心),您可能会得到更好的结果。如果这不起作用,您可能必须在更改复选框后模拟卡片更改。当然,简单的解决方案是将第三张(静态)卡移到前面...