!--a11y-->

入力項目の内容を ABAP プログラムに移送するまで、プログラムの PAI モジュールの入力チェックを実行することはできません。この場合は論理式を使用して入力した値をチェックします。後続のモジュールを呼び出す前に、ユーザに間違ったエントリの修正を許可する必要があります。
これは、ABAP 命令 FIELD および CHAIN とともに呼び出された PAI モジュールから警告 ( タイプ W) またはエラー ( タイプ E) のメッセージを送信して実行することができます。
下記の FIELD 命令を使用して呼び出したモジュール <mod> から、警告またはエラーメッセージを送信したとします。
FIELD <f> MODULE <mod>.
この場合は、現在の画面の対応する入力項目 ( のみ) が再度入力可能になり、ユーザは新たに値を入力することができます。項目のチェックが 1 回のみの場合、FIELD 命令の直後に PAI 処理が続行され、先行モジュールの再呼出はありません。
下記の FIELD 命令を使用して呼び出したモジュール <mod> から、警告またはエラーメッセージを送信したとします。
CHAIN.
FIELD: <f1>, <f2>,...
MODULE <mod1>.
FIELD: <g1>, <g2>,...
MODULE <mod2>.
...
ENDCHAIN.
この場合は、同じ処理チェーンに属する Dynpro の全項目 (FIELD 命令に一覧表示された項目すべて) が再び入力可能になります。これ以外の項目は入力可能になりません。処理チェーンに MODULE 命令が発生した場合は、添付されている FIELD が 1 つのみであっても、必ずチェーン内の全項目 ( 影響が及ぶ項目に限らず) が再度入力可能になり、ユーザは新たな値を入力することができます。処理チェーンの項目のチェックが 1 回のみの場合、FIELD 命令の直後に PAI 処理が続行され、先行モジュールの再呼出はありません。
チェーンの外側で FIELD 命令を使用した場合、警告やエラーメッセージが表示されると単一項目のみが入力可能になります。CHAIN 命令と ENDCHAIN 命令の間で使用した場合は、項目セットを制御します。FIELD 命令で制御される全項目が、PBO 処理をバイパスして、Dynpro に移送して返されます。これは、メッセージが画面に表示される前に項目内容に対して加えられたすべての変更を意味します。これは、情報にも適用されます。
同一の項目を複数の FIELD または CHAIN 命令にインクルードすることが必要な場合もあります。対応するモジュールのいずれか 1 つが警告メッセージやエラーメッセージを送信した場合、PAI 処理はユーザが修正した値によって再開されます。このようなときに、問題になった項目が以前の FIELD や CHAIN 命令にすでにインクルードされている場合は、単純に対応する FIELD や CHAIN 命令で処理を再開することができません。
エラーが発生した項目が含まれる FIELD 命令および CHAIN 命令のすべてが反復されます。エラーが発生し、最後に画面に表示されたときにユーザが変更した項目が含まれる FIELD 命令や CHAIN 命令の最初の発生時に戻って PAI 処理が再開されます。
PROCESS AFTER INPUT.
FIELD f1 MODULE m1.
FIELD f2 MODULE m2.
CHAIN.
FIELD: f1, f2, f3.
FIELD: f4, f5, f1.
MODULE m3.
MODULE m4.
ENDCHAIN.
CHAIN.
FIELD: f6.
MODULE m5.
ENDCHAIN.
CHAIN.
FIELD f4.
MODULE m6.
ENDCHAIN.
モジュール M6 に警告やエラーメッセージが含まれる場合、画面が再度表示され、その後、項目 F4 の最初の発生場所である最初の CHAIN 命令およびモジュール M3 から再開されます。
データ移送制御および条件モジュールコールの FIELD 命令と CHAIN 命令の機能はすべて、警告メッセージやエラーメッセージと組み合わせて使用することもできます。項目それぞれの内容は、その項目が発生した FIELD 命令で移送されます。処理チェーンの条件モジュールで警告メッセージやエラーメッセージが発生した場合、画面の再表示時にそのチェーン内のすべての項目が入力可能になります。ただし、これらの項目のすべてが移送されるわけではありません。
FIELD 命令や CHAIN 命令にリンクされていないモジュールで警告メッセージやエラーメッセージが発生した場合、画面上の項目のいずれも入力可能にはなりません。この場合ユーザはプログラムを終了することのみ可能ですが、プログラムに無条件モジュールコールをインクルードしている場合に限られます。

ダイアログモジュールの入力チェック
PROGRAM demo_dynpro_field_chain.
DATA: ok_code TYPE
sy-ucomm,
input1 TYPE i, input2 TYPE i, input3 TYPE
i,
input4 TYPE i, input5 TYPE i, input6 TYPE
i,
sum TYPE i.
CALL SCREEN 100.
MODULE init_screen_100
OUTPUT.
CLEAR: input1, input2, input3, input4, input5, input6.
SET PF-STATUS 'STATUS_100'.
ENDMODULE.
MODULE cancel
INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE module_1
INPUT.
IF input1 < 50.
MESSAGE e888(sabapdocu) WITH text-001 '50'
text-002.
ENDIF.
ENDMODULE.
MODULE module_2
INPUT.
IF input2 < 100.
MESSAGE e888(sabapdocu) WITH text-001 '100'
text-002.
ENDIF.
ENDMODULE.
MODULE module_3
INPUT.
IF input3 < 150.
MESSAGE e888(sabapdocu) WITH text-001 '150'
text-002.
ENDIF.
ENDMODULE.
MODULE chain_module_1
INPUT.
IF input4 < 10.
MESSAGE e888(sabapdocu) WITH text-003 '10'
text-002.
ENDIF.
ENDMODULE.
MODULE chain_module_2
INPUT.
CLEAR sum.
sum = sum +:
input4, input5, input6.
IF sum <= 100.
MESSAGE e888(sabapdocu) WITH text-004 '100'
text-002.
ENDIF.
ENDMODULE.
MODULE execution
INPUT.
MESSAGE i888(sabapdocu) WITH text-005.
ENDMODULE.
Dynpro 100 の次画面 ( 静的定義) は 100 です。このレイアウトは次のとおりです。

Dynpro 項目 INPUT1 から INPUT6 は、入力項目に割り当てられます。押しボタンの機能コードは EXECUTE です。
GUI
ステータス STATUS_100
では、アイコン
(F12)
が機能コード
CANCEL
、機能タイプ E
で有効になっています。さらに機能キー F8
が機能コード EXECUTE
に、機能タイプ <blank>
で割り当てられています。
この Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
MODULE init_screen_100.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
FIELD input1 MODULE module_1.
FIELD input2 MODULE module_2.
FIELD input3 MODULE module_3.
CHAIN.
FIELD input4.
MODULE chain_module_1.
FIELD input5.
FIELD input6 MODULE chain_module_2.
ENDCHAIN.
MODULE EXECUTION.
このプログラムは、ダイアログモジュールで入力項目をチェックする方法を示しています。
項目 INPUT1 から INPUT3 は、モジュール MODULE_1 から MODULE_3 でそれぞれ別個にチェックされます。ユーザが対応する値を入力しない限り、その項目を入力可能にして画面の表示が繰り返されます。
項目 INPUT4 から INPUT6 は、処理チェーンでまとめてチェックされます。INPUT4 が条件 CHAIN_MODULE_1 を満たしていない場合、3 つの項目すべてが再び入力可能になります。3 つの項目が CHAIN_MODULE_2 の条件を満たしていない場合も同じです。
EXECUTION モジュールは、情報メッセージを表示しますが、6 つの項目すべてがそれぞれに適用される条件を満たすまで実行されません。