2017-01-22 11 views
0

タブを動的に変更したい選択画面があります。私の例では、フラグ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のみタブ名を設定解除した後

After program start

は、サブ画面は下にない変更されます。私は私が必要と仮定し、私はTAB3に切り替えて、それを回避するには

After unsetting P_FLG1

...

Switch to tab 3

...とバック

After getting back to tab 2

何かを呼び出す、例えばMODIFY SCREENの後の汎用モジュールで、何らかのイベント(多分PAI?)を実行することができましたが、それに関する情報を見つけることに失敗しました。

フラグを設定/解除した直後にサブ画面を更新するにはどうすればよいですか?

答えて

4

これは一般的な問題です。レジスタの最初のタブを無効/非表示にすると、最初のカードの従属画面は、ユーザーが別のカードを選択するまでそのまま残ります。レジスタは本質的に、ボタンバーが上にある従属画面領域であり、含まれている画面が何かによって変更されない場合、デフォルトが表示されます。 here(ページのほぼ中央)と記載された「動的割り当て」を使用すると、より良い結果が得られる場合があります。これで問題が解決しない場合は、チェックボックスを変更した後にカードの変更をエミュレートする必要があります。もちろん、簡単な解決策は、3枚目のカードを正面に動かすことです。

+0

男の天才! 「Dynamic Assignment」で説明したように、 'screen-active = 1 'の後に' tab-dynnr =' 0010''と 'tab-dynnr = '0011''を追加すると、レジスタを再編成する必要はありませんでした。ありがとう! – Jagger

関連する問題