!--a11y-->

単純なモジュールコールは Dynpro 制御ロジックに表示される順序に従って処理されます。しかし、Dynpro 言語の構文を使用すると、MODULE 命令と FIELD 命令を合わせて使用することで一定の条件に依存する PAI モジュールコールを作成することもできます。条件は、単一の項目にも項目グループにも適用することができます。条件モジュールコールを使用すると、特にデータベーステーブルと通信を行うモジュールで、プログラムの実行時間を短縮することができます。
下記の命令によって、確実に一定の条件が適用される場合にのみ PAI モジュールが呼び出されるようにすることができます。
FIELD <f> MODULE <mod> ON INPUT|REQUEST|*-INPUT.
各オプションには次のような効果があります。
キ ON INPUT
項目に初期値以外の値がある場合にのみ ABAP モジュールが呼び出されます。初期値は項目のデータ型によって決定され、文字項目ではスペース、数値項目ではゼロです。ユーザが画面に初期値と同じ値を入力した場合も、モジュールは呼び出されません(ON REQUEST では、このような場合にも呼び出しがトリガされます) 。
キ ON REQUEST
ユーザが項目に何らかの入力を行った場合にのみ、モジュール <mod> が呼び出されます。これには、ユーザが既存値を同じ値で上書きした場合や、明示的に初期値を入力した場合も含まれます。
一般に、ON REQUEST 条件は、すべての形態の " マニュアル入力" でトリガされます。ユーザ入力と同様、下記のメソッドによる値の入力でもモジュールが呼び出されます。
– エレメント属性 PARAMETER-ID (SPA/GPA パラメータ)
– エレメント属性 HOLD DATA
– CALL TRANSACTION ...USING
– 特定のグローバル項目の自動設定
キ ON *-INPUT
ユーザが項目の最初の文字として "*" を入力し、スクリーンペインタでその項目に属性 *-entry が設定されている場合にのみ ABAP モジュールが呼び出されます。入力項目がプログラムに渡されると * は削除されます。* は、ON INPUT 条件の初期項目のように機能します。
MODULE の使用時は、データ移送制御の FIELD 命令の機能も適用されます。
確実に、複数の画面項目が一定の条件に一致した場合にのみ 1 つ以上の PAI モジュールが呼び出されるようにするには、制御ロジックでコールを結合し、処理チェーンを構成する必要があります。処理チェーンは次のように定義します。
CHAIN.
...
ENDCHAIN.
CHAIN と ENDCHAIN との間の制御ロジック命令はすべて処理チェーンに属します。さまざまな FIELD 命令の項目が結合され、共有条件内で使用することができます。
CHAIN.
FIELD: <f1>,
<f2>,...
MODULE
<mod1> ON CHAIN-INPUT|CHAIN-REQUEST.
FIELD:
<g1>, <g2>,...
MODULE
<mod2> ON CHAIN-INPUT|CHAIN-REQUEST.
...
ENDCHAIN.
オプション ON CHAIN-INPUT と ON CHAIN-REQUEST は、個別の項目の場合に使用するオプション ON INPUT および ON REQUEST と同様に機能します。ただし、チェーン内の先行する FIELD 命令にある項目のいずれか 1 つ以上が条件に一致する場合にモジュールが呼び出されるという点が異なります。このため、項目 <fi> のいずれか 1 つが条件に合致すると、<mod1> が呼び出されます。<mod2> は、項目 <fi> または <gi> のいずれかが条件に一致すると呼び出されます。
処理チェーン内では、個別の FILD 命令を MODULE 命令と組み合わせて、チェーン内の単一の項目に条件を設定することができます。
CHAIN.
FIELD: <f1>,
<f2>,...
FIELD <f> MODULE
<mod1> ON INPUT|REQUEST|*-INPUT
|CHAIN-INPUT|CHAIN-REQUEST.
MODULE <mod2> ON
CHAIN-INPUT|CHAIN-REQUEST.
ENDCHAIN.
<mod1> は、Dynpro 項目 <f> が個別の項目に指定された条件に一致すると呼び出されます。<mod2> は、項目 <fi> または <f> のいずれか 1 つが条件に一致すると呼び出されます。FIELD <f> とともにオプション ON CHAIN-INPUT か ON CHAIN-REQUEST を使用した場合は、条件がチェーン全体に適用され、モジュール <mod1> と <MOD2> の両方が呼び出されます。
Dynpro 項目のさまざまな組合せに対して条件を適用した場合は、組合せごとに別々の処理チェーンを設定し、その中からそれぞれ異なるモジュールを呼び出す価値があります。
処理チェーンの使用時は、データ移送制御の FIELD 命令の機能も適用されます。処理チェーン内では、FIELD 命令まで Dynpro 項目の移送は行われません。処理チェーンはそれに含まれる FIELD 命令に対する機能が他にもあります。この詳細については、有効性チェックのセクションを参照してください。
カーソルが特定の Dynpro エレメントに置かれた場合にのみモジュールが呼び出されるように指定することができます。これには次の命令を使用します。
MODULE <mod> AT CURSOR-SELECTION.
ユーザアクションの機能コードが機能タイプ S の CS である場合は、常にモジュール<mod> が呼び出されます。この命令を使用する場合は、機能コード CS を機能キー F2 に割り当てることが最良です。この命令は、マウスのダブルクリックにも割り当てることもできます。
このモジュールは、制御ロジックでの発生順に呼び出されます。自動入力チェックのバイパスは行われません。データは、FIELD 命令によって定義された順序に従って Dynpro 項目から移送されます。機能コードは空白で、SY-UCOMM 項目にも OK_CODE 項目にも影響がありません。この MODULE 命令は、FIELD 命令と結合することもできます。
FIELD <f> MODULE <mod> AT CURSOR-SELECTION.
また、項目が複数の場合は、以下のようになります。
CHAIN.
FIELD: <f1>,
<f2>,...
MODULE
<mod> AT CURSOR-SELECTION.
ENDCHAIN.
カーソルが入出力項目 <f> か、処理チェーンの入出力項目<fi> に置かれている場合にのみ、モジュール <mod> が呼び出されます。この命令は、入出力項目にのみ適用します。
複数の組合せのコール階層は以下のようになります。
キ FIELD と組み合わされている MODULE... AT CURSOR-SELECTION 命令が実行されると、FIELD がない命令は実行されません。
キ FIELD を使用する命令が同一の Dynpro 項目 <f> に対して複数回発生した場合は、最初の命令のみが実行されます。
キ FIELD のない命令が複数回発生した場合は、最後の命令のみが実行されます。
これは命令が、CHAIN ... ENDCHAIN ブロック内と外のどちらで発生するかには関与しません。

条件モジュールコール
PROGRAM DEMO_DYNPRO_ON_CONDITION.
DATA:
OK_CODE LIKE SY-UCOMM,
INPUT1(20), INPUT2(20), INPUT3(20),
FLD(20).
CALL SCREEN 100.
MODULE INIT_SCREEN_100 OUTPUT.
SET
PF-STATUS 'STATUS_100'.
ENDMODULE.
MODULE CANCEL INPUT.
LEAVE
PROGRAM.
ENDMODULE.
MODULE CURSOR INPUT.
GET CURSOR
FIELD FLD.
MESSAGE
I888(BCTRAIN) WITH TEXT-001 FLD.
ENDMODULE.
MODULE MODULE_1 INPUT.
MESSAGE
I888(BCTRAIN) WITH TEXT-002.
ENDMODULE.
MODULE MODULE_2 INPUT.
MESSAGE
I888(BCTRAIN) WITH TEXT-003.
ENDMODULE.
MODULE MODULE_* INPUT.
MESSAGE
I888(BCTRAIN) WITH TEXT-004 INPUT3.
ENDMODULE.
MODULE C1 INPUT.
MESSAGE
I888(BCTRAIN) WITH TEXT-005 '1'.
ENDMODULE.
MODULE C2 INPUT.
MESSAGE
I888(BCTRAIN) WITH TEXT-005 '2' TEXT-006 '3'.
ENDMODULE.
Dynpro 100 の次画面 ( 静的定義) は同じ Dynpro です。これは次のようなレイアウトになります。
Dynpro 項目 INPUT1 、INPUT2 および INPUT3 は、入力項目に割り当てられます。押しボタンの機能コードは EXECUTE です。
GUI
ステータス STATUS_100
では、アイコン
(F12)
が機能コード CANCEL
、機能タイプ E
で有効になります。機能キー F2
も機能コード CS
および機能タイプ S
で有効になります。F8
キーは、機能コード EXECUTE
で有効になり、特に機能タイプは指定されていません。
この Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
MODULE
INIT_SCREEN_100.
PROCESS AFTER INPUT.
MODULE
CANCEL AT EXIT-COMMAND.
CHAIN.
FIELD:
INPUT1, INPUT2.
MODULE
MODULE_1 ON CHAIN-INPUT.
FIELD INPUT3
MODULE MODULE_* ON *-INPUT.
MODULE
MODULE_2 ON CHAIN-REQUEST.
ENDCHAIN.
FIELD
INPUT1 MODULE C1 AT CURSOR-SELECTION.
CHAIN.
FIELD:
INPUT2, INPUT3.
MODULE C2
AT CURSOR-SELECTION.
ENDCHAIN.
MODULE
CURSOR AT CURSOR-SELECTION.
このプログラムは情報メッセージを使用して、ユーザのインタラクションに続いて呼び出されるモジュールと移送されるデータを表示します。
キ 入力項目 1 または 2 のいずれか 1 つが初期値でない場合は、どのようなユーザインタラクションに対してもモジュール MODULE_1 が呼び出されます。
キ 3 つの入力項目のいずれか 1 つが変更された場合は、どのようなユーザインタラクションに対しても モジュールMODULE_2 が呼び出されます。
キ 入力項目 3 に * エントリがある場合は、どのようなユーザインタラクションに対しても モジュールMODULE_* が呼び出されます。
キ ユーザが F2 を選択するか、画面上のテキスト項目をダブルクリックした場合は、モジュール CURSOR が呼び出されます。
キ ユーザが F2 を選択するか、入力項目 1 をダブルクリックした場合は、モジュール C1 が呼び出されます。
キ ユーザが F2 を選択するか、入力項目 2 または 3 をダブルクリックした場合は、モジュール CURSOR が呼び出されます。MODULE ... AT CURSOR SELECTION 命令が 2 回発生し、最後のものだけが処理されるため、モジュール C2 が実行されることはありません。