2017-08-07 4 views
1

次のプログラムがあります。TABBED BLOCKが使用されている場合、欄外のフィールドチェックは無視されます

REPORT zz_tab_strip_obligatory. 

SELECTION-SCREEN BEGIN OF TABBED BLOCK tab FOR 20 LINES. 
SELECTION-SCREEN TAB (54) tab1 USER-COMMAND tab1 DEFAULT SCREEN 100. 
SELECTION-SCREEN TAB (54) tab2 USER-COMMAND tab2 DEFAULT SCREEN 200. 
SELECTION-SCREEN END OF BLOCK tab. 

SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. 
PARAMETERS: 
    p1 TYPE i. 
SELECTION-SCREEN END OF SCREEN 100. 

SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN. 
PARAMETERS: 
    p2 TYPE i OBLIGATORY. 
SELECTION-SCREEN END OF SCREEN 200. 

INITIALIZATION. 
    tab1 = 'Tab1'. 
    tab2 = 'Tab2'. 

最初のタブには必須フィールドはありません。もう一方はもう一方は行います。

私が抱えている問題は、ユーザーが2番目のタブに行かず、代わりにF8ですぐにプログラムを起動すると、パラメータp2の義務チェックがまったく実行されないということです。 AT SELECTION-SCREENのようなイベントはすべて、表示されている従属画面の現在のタブのエゴに対してのみ実行されているようです。

回避策はありますか?私の現在の解決策は、悲しいことに、OBLIGATORYのキーワードを取り除き、START-OF-SELECTION(私の実際のプログラムには多くのタブがある)の後にチェックをしています。

答えて

1

選択画面の義務的な問題に対する直接的な解決策はないと思います。 Hereも同様のトピックです。ただし、すべての必須パラメータを内部テーブルに格納することができます。 Start-of-selectionでそれらをループしてチェックします。

DATA: BEGIN OF gt_obl_fields OCCURS 0, 
    fname TYPE char10, 
    ftext type char50, 
END OF gt_obl_fields. 

INITIALIZATION. 
tab1 = 'Tab1'. 
tab2 = 'Tab2'. 

gt_obl_fields-fname = 'P2'. 
gt_obl_fields-ftext = text-001. 
APPEND gt_obl_fields. 
"... 
START-OF-SELECTION. 
    LOOP AT gt_obl_fields . 
    ASSIGN (gt_obl_fields-fname) TO FIELD-SYMBOL(<fs_field>). 
    IF <fs_field> IS ASSIGNED AND <fs_field> IS INITIAL.. 
     CONCATENATE gt_obl_fields-ftext 'field must be filled!' INTO data(lv_message). 
     MESSAGE lv_message TYPE 'E'. 
    ENDIF. 
    ENDLOOP. 
+2

回答ありがとうございますが、これが私が実際に回避策としてやっていることです。 'OBLIGATORY'マークアップを取り除かなくても、他の方法ではこれを扱うことができないと信じるのは難しいです。 – Jagger

関連する問題