コンテンツフレーム起動

無条件のモジュールコール 文書を SAP ライブラリストラクチャに組み込む

PAI イベントでは、自動項目チェックの後、PAI モジュールがDynpro 制御ロジックでの発生順に呼び出されます。したがって、Dynpro 上での入力が自動チェックをパスするまで、最初の呼出は実行されません。特に、すべての必須項目に値が入力されていなければならず、また ABAP ディクショナリの項目に定義された値一覧やチェックテーブルとの照合によるチェックにパスしなければなりません。 

場合によっては、単に画面を終了するためだけでも、ユーザが大量のデータを入力しなければならないことがあります。このような状況を回避するため、特別なモジュールコール付の特殊な機能コードを使用することができます。このモジュールコールでは、Dynpro 上でのユーザの入力内容にかかわらず、モジュールが呼び出されます。

タイプ E の機能コード

Dynpro 上の押ボタンと GUI ステータスのエレメントのどちらの機能コードにも、機能タイプ E を割り当てることができます。押ボタンに対してこの割当を行うには、スクリーンペインタで 機能タイプ属性を E に設定します。GUI ステータスの場合は、メニューペインタでジャンプ オブジェクト一覧 機能一覧 を選択し、必要な機能コードを選択して機能タイプとして E を指定します。

ユーザがステータスで押ボタンまたは機能を選択すると、自動項目チェックが回避され、Dynpro 制御ロジックで特殊モジュールが呼び出されます。特殊モジュールコールが存在しない場合は、通常の PAI 処理が再開され、その結果、自動項目チェックが実行されることになります。

基本的に、タイプ E の機能はユーザが Dynpro を終了できるようにします。そのため、前画面 このグラフィックは添付のテキストに説明されています (F3) 、終了 このグラフィックは添付のテキストに説明されています (Shift + F3) 、および取消 このグラフィックは添付のテキストに説明されています (F12) には、通常、タイプ E の機能が割り当てられます。

タイプ E 機能の PAI モジュールコール

ユーザがタイプ E の機能を選択すると、Dynpro 制御ロジックは次の命令に直接ジャンプします。

MODULE <mod> AT EXIT-COMMAND.

この命令は、Dynpro 制御ロジックのどこに置かれているかにかかわりなく、Dynpro 上の項目内容に対する自動チェックより先に直ちに実行されます。モジュール<mod> の実行前には、OK-CODE 項目の内容が同名の ABAP 項目に移送されます。しかし、その他の Dynpro 項目 はこの段階ではプログラムに移送されません。AT EXIT-COMMAND オプションを指定した MODULE 命令が複数ある場合は、最初の命令のみ実行されます。AT EXIT-COMMAND オプションを指定した MODULE 命令がない場合は、通常の PAI 処理が再開されます。

タイプ E 以外の機能コードを持つ機能をユーザが選択した場合は、MODULE <mod> AT EXIT-COMMAND 命令は実行されません。

タイプ E 機能の PAI モジュール

MODULE ... AT EXIT-COMMAND 命令は、通常、自動入力チェックを行わずに現在の Dynpro を終了する目的で使用されます。そのため、現在の Dynpro 、コールチェーン、またはプログラム全体のどれを終了するかに応じて、LEAVE 命令の適切なバリアントを組み込むんで MODULE ... AT EXIT-COMMAND 命令をプログラミングするようにします。このモジュールで Dynpro が終了されないと、モジュールの完了後に通常の PAI 処理が再開されます。つまり、自動項目チェックが実行され、通常の PAI モジュールが呼び出されて、FIELDS 命令に定義された順序にしたがって Dynpro からプログラムにデータが送り返されます。

例

無条件のモジュールコール

PROGRAM DEMO_DYNPRO_AT_EXIT_COMMAND.

DATA: OK_CODE LIKE SY-UCOMM,
      SAVE_OK LIKE OK_CODE,
      INPUT1(20), INPUT2(20).

CALL SCREEN 100.

MODULE INIT_SCREEN_0100 OUTPUT.
  SET PF-STATUS 'STATUS_100'.
ENDMODULE.

MODULE CANCEL INPUT.
  MESSAGE I888(BCTRAIN) WITH TEXT-001 OK_CODE INPUT1 INPUT2.
  IF OK_CODE = 'CANCEL'.
    CLEAR OK_CODE.
    LEAVE PROGRAM.
  ENDIF.
ENDMODULE.

MODULE BACK INPUT.
  MESSAGE I888(BCTRAIN) WITH TEXT-002 OK_CODE INPUT1 INPUT2.
  IF OK_CODE = 'BACK'.
    CLEAR: OK_CODE, INPUT1, INPUT2.
    LEAVE TO SCREEN 100.
  ENDIF.

ENDMODULE.

MODULE EXECUTE1 INPUT.
  MESSAGE I888(BCTRAIN) WITH TEXT-003 OK_CODE INPUT1 INPUT2.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
ENDMODULE.

MODULE EXECUTE2 INPUT.
  MESSAGE I888(BCTRAIN) WITH TEXT-004 OK_CODE INPUT1 INPUT2.
  IF SAVE_OK = 'EXECUTE'.
    MESSAGE S888(BCTRAIN) WITH TEXT-005.
  
ENDIF.
ENDMODULE.

Dynpro 100 の次画面 ( 静的定義) は同じ Dynpro です。このレイアウトは次のようなものです。

このグラフィックは添付のテキストに説明されています

入力項目には INPUT1 INPUT2 という名称が割り当てられています。この 2 つの項目はいずれも必須項目です。押ボタンの機能コードは EXECUTE CANCEL です。CANCEL には機能タイプ E が設定されています。

GUI ステータス STATUS_100 では、前画面 このグラフィックは添付のテキストに説明されています (F3) アイコンが機能コード BACK で、取消 このグラフィックは添付のテキストに説明されています (F12) アイコンが機能コード CANCEL でそれぞれ有効になっています。どちらも機能タイプ E が設定されています。機能コード EXECUTE は機能キー F8 に割り当てられています。この機能コードには機能タイプ E は設定されていません。

この Dynpro 制御ロジックは次のとおりです。

PROCESS BEFORE OUTPUT.
  MODULE INIT_SCREEN_0100.

PROCESS AFTER INPUT.
  MODULE EXECUTE1.
  MODULE CANCEL AT EXIT-COMMAND.
  MODULE BACK AT EXIT-COMMAND.
  MODULE EXECUTE2.

このプログラムでは、情報およびステータスメッセージによって、ユーザのインタラクションのあとに呼び出されるモジュールと移送されるデータが示されます。

         ユーザが必須項目にデータを入力しないで実行を選択すると、自動項目チェックによってエラーメッセージが表示されます。

         ユーザが必須項目にデータを入力したあとに実行を選択すると、Dynpro 項目がすべてプログラムに移送され、モジュール EXECUTE1 EXECUTE2 が呼び出されます。

         ユーザが取消を選択すると、必須項目へのデータの入力が行われているかどうかにかかわりなく、OK_CODE 項目が移送され、CANCEL モジュールが呼び出されます。CANCEL モジュールによって、プログラムが終了します。

         ユーザが前画面を選択すると、必須項目へのデータの入力が行われているかどうかにかかわりなく、OK_CODE 項目が移送され、CANCEL モジュールが呼び出されます。ただし、この場合は、機能コードが BACK であるためプログラムは終了しません。その代わり、自動項目チェックが実行されます。必須項目にデータが入力されていれば、モジュールEXECUTE1 EXECUTE2 が呼び出されます。

BACK モジュールは呼び出されません。なぜなら、AT EXIT-COMMAND オプションを指定したモジュールが複数ある場合、最初のモジュールのみが呼び出されるためです。上の例の場合、機能コード BACK CANCEL モジュールで処理されます。その後、AT EXIT-COMMAND オプションを指定したモジュール命令は 1 つだけとなるので、命令の位置は重要ではなくなります。

 

 

 

 

 

コンテンツフレーム終了