用法
主に、画面の属性を変更させるために使用する。
照会モードでは入力不可とするが入力可能モードでは入力可能とする、ラジオボタンAが選択された場合はラジオボタンBに関連する項目は非表示とするなど。
サンプル
LOOP AT SCREEN INTO WA_SCREEN. IF ( WA_SCREEN-NAME = 'RAD_A' ) AND ( RAD_A = 'X' ). WA_SCREEN-INPUT = '1'. MODIFY SCREEN. ENDIF. ENDLOOP.
属性を変更する場合は、値を代入の上MODIFY SCREENで変更すること。
SCREENの構造と項目
過去のバージョンではデータ型グループで定義されていたようだが、現在は構造SCREENで定義されている。
コンポーネント | 長さ | 型 | プロパティ | 内容説明 |
NAME | 132 | C | Name | 名称 |
GROUP1 | 3 | C | Group1 | 修正グループ |
GROUP2 | 3 | C | Group2 | 修正グループ |
GROUP3 | 3 | C | Group3 | 修正グループ |
GROUP4 | 3 | C | Group4 | 修正グループ |
REQUIRED | 1 | C | Required-entry field | 必須項目 |
INPUT | 1 | C | Input | 入力可能項目 |
OUTPUT | 1 | C | Output | 表示項目 |
INTENSIFIED | 1 | C | Intensified | 強調項目 |
INVISIBLE | 1 | C | Invisible | 非表示エレメント |
LENGTH | 1 | X | visLength | 項目長 |
ACTIVE | 1 | C | Input/Output/Invisible | 有効項目 |
DISPLAY_3D | 1 | C | Two-dimensional | ボックス |
VALUE_HELP | 1 | C | Input help | 入力ヘルプキー |
REQUEST | 1 | C | - | 入力あり |
VALUES_IN_COMBO | 1 | C | Dropdown listbox | 値ヘルプあり |
これらの属性を取り扱うことはできるが、あまり込み入ったことをするとヤヤコシイことになるので、入力可否の制御くらいにしておいた方が無難かと思う。
----------------------------------------------------------------------------------------------------------------
属性の動的設定
画面の各項目には属性のセットがあり、スクリーンペインタでDynpro を定義する際に固定されます。ABAP プログラムの実行時に、特定の命令を使用して、各画面項目の属性の一部を事前定義された構造 screen に読み込むことができます。その後、これらの属性で画面項目を変更することができます。
構造 'screen'
プログラムでこの構造を宣言する必要はありません。ダイアログモジュールでの画面処理中に、screen にアクセスすることができます。
コンポーネント |
長さ |
データ型 |
意味 |
属性 |
surname |
132 |
C |
画面項目の名称 |
名称 |
group1 |
3 |
C |
モディフィケーショングループ 1 |
グループ 1 |
group2 |
3 |
C |
モディフィケーショングループ 2 |
グループ 2 |
group3 |
3 |
C |
モディフィケーショングループ 3 |
グループ 3 |
group4 |
3 |
C |
モディフィケーショングループ 4 |
グループ 4 |
required |
1 |
C |
項目は入力必須 |
必須項目 |
input |
1 |
C |
項目は入力可能 |
エントリ |
output |
1 |
C |
項目は表示専用 |
出力 |
intensified |
1 |
C |
項目は強調表示 |
強調表示 |
invisible |
1 |
C |
項目は非表示 |
非可視 |
length |
1 |
X |
項目長 |
表示長 |
active |
1 |
C |
項目は有効 |
入力/出力/非表示 |
display_3d |
1 |
C |
3 次元ボックス |
2 次元 |
value_help |
1 |
C |
入力ヘルプボタン表示 |
入力ヘルプ |
request |
1 |
C |
入力あり |
- |
最後の列には、スクリーンペインタの画面項目の該当する属性が含まれています。
Dynpro のPBO イベント時に ABAP プログラムで構造 screen を変更し、ABAP プログラムの画面エレメントを変更することができます。変更されたエレメントにより、1 回の画面呼出について画面項目の静的属性が上書きされます。screen とともに使用することができるのは、以下の命令のみです。
LOOP AT SCREEN. ... MODIFY SCREEN. ... ENDLOOP.
LOOP AT SCREEN は独立した命令です。内部テーブルでのループと混同しないでください。
コンポーネント NAME には、画面項目の名称が指定されます。コンポーネント GROUP1 から GROUP4 には、3 文字のコードを指定することができます。これらのコードを使用すると、画面項目を最大で 4 つのモディフィケーショングループに含めることができます。1 つの画面項目は、複数の異なるモディフィケーショングループに属することができます。モディフィケーショングループは構造 screen の追加キー項目のようなもので、これを使用して、グループ内のすべてのエレメントの属性を同時に変更することができます。スクリーンペインタでエレメントをモディフィケーショングループに静的に割り当てますが、これはプログラムで動的に上書きすることができます。
残りのコンポーネントは、画面項目の表示属性を変更したり、有効化/無効化したりするために使用されます。LENGTH 以外のすべてのコンポーネントでは、1 は有効を表し、0 は無効を表します。
ACTIVE、INPUT、OUTPUT、および INVISIBLE
コンポーネント ACTIVE、INPUT、OUTPUT、およびINVISIBLE の間には、特定の階層化されたルールがあります。また、それぞれの静的設定に応じて異なる影響をもたらします。
ACTIVE コンポーネントには、対応するエレメント属性はありません。代わりに、このコンポーネントによって、コンポーネント INPUT、OUTPUT、および INVISIBLE が変更されます。
PBO の開始時には、属性の静的設定に関係なく、ACTIVE は常に 1 に設定されます。ACTIVE を 0 に設定すると、自動的に INPUT = 0、OUTPUT = 0、および INVISIBLE = 1 に設定されます。現在の Dynpro エレメントの INPUT、OUTPUT、および INVISIBLE の設定への変更は無視されます。逆に、INPUT = 0、OUTPUT = 0、および INVISIBLE = 1 と設定すると自動的に ACTIVE が 0 に設定され、現在の画面エレメントの ACTIVE へのその他の割当はすべて無視されます。設定 ACTIVE = 1 には、属性へのその他の影響はありません。ACTIVE コンポーネントの唯一の目的は、1 回の割当によって画面項目を無効化することです。Dynpro 制御ロジックで FIELD 命令にリンクされているモジュール呼出は、該当する項目が SCREEN-ACTIVE = 0 の場合でも、必ず実行されることに特に注意してください。無効な項目に対してモジュールが処理されないようにするには、FIELD 命令と MODULE 命令を別個に指定する必要があります。
ACTIVE、INPUT、OUTPUT、およびINVISIBLE には 8 とおりの組合せがあります。各組合せは、それぞれ以下のような影響を画面項目に及ぼします。
ACTIVE |
入力 |
OUTPUT |
INVISIBLE |
動作 |
1 |
1 |
1 |
0 |
非表示が静的に設定されていても、画面項目が表示されます。 項目内容が表示されます。 入力が静的に設定されていなくても、入力可能です。ただし、出力専用が静的に設定されている場合は、入力不可です。 |
1 |
1 |
0 |
0 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 項目内容は表示されません。 入力が静的に設定されていなくても、入力可能です。 |
1 |
0 |
1 |
0 |
非表示が静的に設定されていても、画面項目が表示されます。 項目内容が表示されます。 入力が静的に設定されていても、入力不可です。 |
1 |
0 |
0 |
0 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 項目内容は表示されません。 入力が静的に設定されていても、入力不可です。 |
1 |
1 |
1 |
1 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 項目内容は表示されません。 入力が静的に設定されていなくても、入力可能です。ユーザ入力は、アスタリスク (*) でマスキングされます。 |
1 |
1 |
0 |
1 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 出力は、アスタリスク (*) でマスキングされます。 入力が静的に設定されていなくても、入力可能です。ユーザ入力は、アスタリスク (*) でマスキングされます。 |
1 |
0 |
1 |
1 |
画面項目は無効です。 静的属性に関係なく、画面項目は表示されません。 |
0 |
0 |
0 |
1 |
画面項目は無効です。 静的属性に関係なく、画面項目は表示されません。 |
項目が出力専用として静的に定義されている場合、設定INPUT = 1 による影響はありません。これらの項目については、常に INPUT は 0 です。アスタリスク (*) によるユーザ入力のマスキングは、ユーザパスワードを入力するために使用することができます。
項目を非表示にすると行全体が非表示になる場合、自動的に画面が小さくなります。ただし、静的 Dynpro 属性の実行時圧縮オフを選択することで、この属性を切り替えることができます。
REQUIRED
REQUIRED = 1 と設定すると、入力可能項目が必須項目になります。すべての必須項目に値を入力しないと、画面を終了できません。タイプ E の機能コード、および AT EXIT-COMMAND オプションを含むモジュールは例外です。
DISPLAY_3D
DISPLAY_3D = 0 と設定すると、入出力項目の 3 次元フレームが削除されます。DISPLAY_3D = 1 を使用して、出力専用属性が設定されているテキスト項目や画面項目に 3 次元効果を生成することはできません。
VALUE_HELP
VALUE_HELP を 0 または 1 に設定すると、入力ヘルプボタンがそれぞれオフまたはオンに切り替わります。
INTENSIFIED
INTENSIFIED = 1 と設定すると、入力項目の項目内容が黒から赤に変わります。出力項目の内容は、黒から青に変わります。
LENGTH
LENGTH コンポーネントは、入出力項目と出力専用項目に静的に定義された出力長 (表示長) よりも短い値に設定することができます。このコンポーネントを使用すると、これらの項目の出力長を短くすることができます。他の画面エレメントは、短くすることも長くすることもできません。
REQUEST
入力可能項目に REQUEST = 1 と設定した場合、PAI イベントにおける影響はユーザが項目内容を変更した場合と同じになります。すなわち、ユーザが実際に項目を変更したかどうかに関係なく、ON REQUEST または ON CHAIN-REQUEST を使用した条件モジュール呼出が実行されます。REQUEST は、自動的に 0 にリセットされます。
例
この例では、基本的な画面モディフィケーションについて説明します。プログラムDEMO_DYNPRO_MODIFY_SCREEN を使用して、可能なモディフィケーションをすべて示します。
動的な画面モディフィケーション
REPORT demo_dynpro_modify_simple. DATA: ok_code TYPE sy-ucomm, save_ok TYPE sy-ucomm. DATA flag(1) TYPE c. CALL SCREEN 100. MODULE status_0100 OUTPUT. SET PF-STATUS 'SCREEN_100'. LOOP AT SCREEN. IF screen-group1 = 'MOD'. IF flag = ' '. screen-input = '0'. ELSEIF flag = 'X'. screen-input = '1'. ENDIF. MODIFY SCREEN. ENDIF. ENDLOOP. ENDMODULE. MODULE cancel. LEAVE PROGRAM. ENDMODULE. MODULE user_command_0100 INPUT. save_ok = ok_code. CLEAR ok_code. CASE save_ok. WHEN 'TOGGLE'. IF flag = ' '. flag = 'X'. ELSEIF flag = 'X'. flag = ' '. ENDIF. ENDCASE. ENDMODULE.
Dynpro 100 の静的定義による次Dynpro は 100 です。この Dynpro は以下のようなレイアウトになります。
入出力項目は、ABAP ディクショナリの構造DEMO_CONN からコピーされています。下部の 4 つの入出力項目は、モディフィケーショングループ MOD に割り当てられています。
Dynpro 制御ロジックは以下のようになります。
PROCESS BEFORE OUTPUT.
MODULE status_0100.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
MODULE user_command_0100.
GUI ステータスSCREEN_100 で、機能コード TOGGLE が押ボタンとリンクされます。
プログラムが呼び出された際に、下部の 4 つの入出力項目は入力可能として表示されません。これは、最初に変数 flag に空白が含まれているためです。TOGGLE を使用して、入力可能ステータスのオン/オフを切り替えることができます。