!--a11y-->

PAI イベントでは、Dypro が一連の入力チェックを実行します。このチェックは、ABAP プログラムにデータが転送される前、および制御ロジックが処理される前に実行されます。自動入力チェックの前に、特殊な機能タイプを使用して単一のダイアログモジュールの無条件呼出を実行することができます。通常は、このダイアログモジュールをチェックのバイパス、および Dynpro の直接終了に使用します。
自動入力チェックによってエラーが見つかった場合は、画面のステータスバーにメッセージが表示され、その項目は入力可能状態に保持されます。ユーザは、エントリを修正して、PAI のトリガをやり直します。実際の PAI 処理は、エラーがなくなるまで起動されません。
自動入力チェックは、以下の順序で実行されます。
スクリーンペインタで項目が必須項目として定義されている場合、ユーザが値を入力しないと PAI 処理が起動できません。
画面の入力項目に入力された値は対応する Dynpro 項目のデータ書式と一致している必要があります。たとえば、日付項目の書式 (DATS 型) は、8 文字で YYYYMMDD の書式が設定されています。この文字はすべて数字である必要があります。MM は 12 以下、DD は 31 以下とします。また、指定された日付が、月に対して有効であるかどうかもチェックされます。
スクリーンペインタで ABAP
ディクショナリ項目を
コピーして項目を作成した場合は、Dynpro
で以下に関するチェックが行われます。
キ
値が別のデータベーステーブルに対する外部キー関係を満たしているかどうか、すなわち、チェックテーブルに
外部キーとして記載されているかどうかがチェックされます。これは、スクリーンペインタでその入力に
外部キー属性が設定されている場合にのみチェックされます。入力チェックは入力ヘルプと同じである必要はありません。プログラマは、入力ヘルプに表示される値のすべてが外部キーチェックを渡すようにする責任があります。
キ
値が項目の
ドメインの
固定値のいずれかであること。つまり、ABAP
ディクショナリでの基盤となるドメインの定義がチェックされます。ドメインの固定値は、入力ヘルプとして使用することもできます。ただし、ドメインの値テーブルはチェックされません。値テーブルは、ドメインを参照する項目のチェックテーブルのデフォルト値としてのみ使用されます。

自動入力チェック
PROGRAM DEMO_DYNPRO_AUTOMATIC_CHECKS.
DATA:
OK_CODE LIKE SY-UCOMM,
DATE TYPE D.
TABLES SDYN_CONN.
CALL SCREEN 100.
MODULE INIT_SCREEN_100 OUTPUT.
SET
PF-STATUS 'STATUS_100'.
ENDMODULE.
MODULE CANCEL INPUT.
LEAVE
PROGRAM.
ENDMODULE.
MODULE PAI INPUT.
MESSAGE
I888(BCTRAIN) WITH TEXT-001.
ENDMODULE.
Dynpro 100 の次画面 ( 静的定義) は 100 です。このレイアウトは次のとおりです。
プログラムの日付項目 DATE は入力項目日付に割り当てられています。これ以外の入力項目は CARRID 、CONNID 、および ABAP ディクショナリ構造 SDYN_CONN の MARK コンポーネントです。項目はすべて必須項目です。押しボタンの機能コードは EXECUTE です。
GUI
ステータス STATUS_100
では、アイコン
(F12)
が機能コード CANCEL
、機能タイプ E
で有効になっています。さらに機能キー F8
が機能コード EXECUTE
に割り当てられています。
この Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
MODULE
INIT_SCREEN_100.
PROCESS AFTER INPUT.
MODULE
CANCEL AT EXIT-COMMAND.
MODULE
PAI.
ユーザが入力項目のすべてに有効値を入力しないと、PAI モジュールを呼び出すことができません。
キ 入力項目のすべてに値が入力される必要があります。
キ 日付エントリは正しい書式で行う必要があります。
キ 航空会社は、チェックテーブル SCARR に収録されている必要があります。
キ フライト番号は、チェックテーブル SPFLI で対応する航空会社に存在している必要があります。
キ 選択 MARK は、ドメイン S_FLAG の固定値のいずれかである必要があります。
モジュールコールが AT EXIT-COMMAND
を使用してプログラムされているため、ユーザは、すべての値を正しく入力していなくても中止 (
、F12)
を使用して画面を終了することができます。