コンテンツフレーム起動

制御ロジックの入力チェック 文書を SAP ライブラリストラクチャに組み込む

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 が呼び出されません。

 

 

 

 

コンテンツフレーム終了