!--a11y-->

FIELD 命令には PAI 処理で Dynpro 項目の値のチェックに使用できる特殊なバリアントが 2 つあります。ただし、このメソッドは無効になり、現在は使用されておりません。互換性の保持のみを目的としてサポートされています。
以下のように、Dynpro 項目を値一覧に照らしてチェックすることができます。
FIELD <f> VALUES (<v1>, <v2>,...).
一覧内の個別のエントリ <vi> には次の書式を設定することができます。
キ [NOT] <val>
キ [NOT] BETWEEN <val1> AND <val2>
チェックは、単一項目 <val> に対しても、<val1> から <val2> までの範囲に対しても行うことができます。比較項目には、データ型 CHAR または NUMC の値範囲が必要で、引用符で囲み、大文字で入力する必要があります。チェックに失敗するとエラーメッセージが表示され、対応する項目が再び入力可能項目になります。
<f> の入力ヘルプも、FIELD 命令の値一覧を使用することができます。これによってユーザは正しい値のみを入力できるようになります。
VALUE オプションの使用時は、データ移送制御の FIELD 命令の機能も適用されます。
以下のように、Dynpro 項目をデータベーステーブルの内容に照らしてチェックすることができます。
FIELD <f> SELECT *
FROM <dbtab>
WHERE
<k1> = <f1> AND <k2> =
<f2> AND...
[INTO <tables_area>]
WHENEVER
[NOT] FOUND SEND ERRORMESSAGE|WARNING
[<num>
[WITH <h1>...
<h4>]].
これは FIELD 命令と SELECT 命令を結合します。SELECT 命令の構文は、上記のように正確に入力する必要があります。WHERE 条件には、等号 (=) 以外の比較演算子は使用できません。EQ も使用できません。WHERE 条件では、データベーステーブル<dbtab> の一次キー <ki> の項目が、Dynpro 項目 <fi> に照らしてチェックされます。一致するエントリが見つかった場合は、Dynpro 項目のテーブル作業領域に入力することができます。これは ABAP ディクショナリからの転送によって定義されています。また、検索の結果に応じてエラーメッセージや警告メッセージを送信することもできます。この場合は、<f> の入力項目が再び入力可能になります。
<num> を使用すると、プログラムの最初の命令の MESSAGE-ID で指定されたメッセージクラスからメッセージ番号を指定することができます。この場合、メッセージクラスの長さは 2 文字 に限られます。メッセージクラスを指定しない場合は、デフォルトのメッセージが表示されます。WITH を使用すると、メッセージ内の任意のプレースホルダ (&) にリテラルまたは Dynpro 項目を渡すことができます。
<f> の入力ヘルプも、FIELD 命令の値一覧を使用することができます。これによって、ユーザは正しい値のみを入力できるようになります。
SELECT 命令は、FIELD 命令と組み合わせなくても、Dynpro 制御ロジックに使用することができます。これによって、ABAP モジュールを呼び出さずにデータベーステーブルの内容を Dynpro 項目に入力できるようになります。SELECT の使用時は、データ移送制御の FIELD 命令の機能も適用されます。

制御ロジックの入力チェック
PROGRAM demo_dynpro_value_select MESSAGE-ID dw.
DATA: ok_code TYPE
sy-ucomm,
carrier TYPE spfli-carrid,
connect TYPE spfli-connid.
CALL SCREEN 100.
MODULE init_screen_0100
OUTPUT.
SET PF-STATUS 'STATUS_100'.
ENDMODULE.
MODULE cancel
INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE module_1
INPUT.
MESSAGE i888(sabapdocu) WITH text-001 carrier
text-002
connect.
ENDMODULE.
MODULE module_2
INPUT.
MESSAGE i888(sabapdocu) WITH text-001 carrier
text-002
connect.
ENDMODULE.
Dynpro 100 の次画面 ( 静的定義) は 100 です。このレイアウトは次のとおりです。

プログラム項目 CARRIER と CONNECT は、入力項目に割り当てられます。押しボタンの機能コードは EXECUTE です。
GUI
ステータス STATUS_100
では、アイコン
(F12)
が機能コード
CANCEL
、機能タイプ E
で有効になっています。さらに機能キー F8
が機能コード EXECUTE
に割り当てられています。
この Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
MODULE init_screen_0100.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
FIELD carrier VALUES (NOT 'AA', 'LH', BETWEEN 'QF' AND
'UA').
MODULE module_1.
FIELD connect SELECT *
FROM spfli
WHERE
carrid = carrier AND connid = connect
WHENEVER
NOT FOUND SEND ERRORMESSAGE 107
WITH
carrier connect.
MODULE module_2.
ユーザは、MODULE_1 が呼び出される前に VALUES に続く一覧にある CARRIER の値を入力する必要があります。MODULE_1 が呼び出されたときには、まだ CONNECT が移送されていません。
次に、CONNECT にはデータベーステーブル SPFLI に一次キーの一部として CARRIER とともに存在している値のみを入力することができます。別の値を入力すると、メッセージクラス AT のエラーメッセージ 107 がステータスバーに表示されます。
" キー & & のエントリが見つかりませんでした"
正しい値が入力されるまで、CONNECT が移送されず、モジュール MODULE_2 が呼び出されません。