タブを動的に変更したい選択画面があります。私の例では、フラグp_flg1
が設定されている場合はtab1
が表示され、それ以外の場合はtab2
が表示され、もう1つが無効になります。パラメータp_flg1
を設定解除した後に変更されますが何タブ内のサブスクリーンがリフレッシュされない
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.
は、タブの名前ではなく、その下にサブ画面です。私がtab3
に切り替えて戻った場合にのみ変更されます。
プログラムを起動した後。 P_FLG1
のみタブ名を設定解除した後
は、サブ画面は下にない変更されます。私は私が必要と仮定し、私はTAB3に切り替えて、それを回避するには
...
...とバック
何かを呼び出す、例えばMODIFY SCREEN
の後の汎用モジュールで、何らかのイベント(多分PAI?)を実行することができましたが、それに関する情報を見つけることに失敗しました。
フラグを設定/解除した直後にサブ画面を更新するにはどうすればよいですか?
男の天才! 「Dynamic Assignment」で説明したように、 'screen-active = 1 'の後に' tab-dynnr =' 0010''と 'tab-dynnr = '0011''を追加すると、レジスタを再編成する必要はありませんでした。ありがとう! – Jagger