コンテンツフレーム起動

画面順序: トランザクション例 文書を SAP ライブラリストラクチャに組み込む

画面順序のサンプルトランザクションとして、トランザクション DEMO_SCREEN_FLOW を使用することができます。このトランザクションはパッケージ SABAPDOCU にあり、システムと共に提供されます。トランザクション DEMO_SCREEN_FLOW でフライトデータの照会および変更が可能です。

機能

DEMO_SCREEN_FLOW では 3 つの画面が使用されます。画面 100 200 により順序が構成されます。画面 210 はモーダルダイアログボックスで、特定の状況においてのみ呼び出されます。画面順序はたとえば以下のように示すことができます。

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

システムで作業するユーザに、以下の順序で表示されます。

        画面 100

ユーザは航空会社とフライト番号を入力してから、ENTER を押してフライトデータを要求するか、またはトランザクションを終了します。

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

        画面 200

入力項目にフライトの詳細が表示されます。ユーザは画面上で変更を入力します。

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

        画面 210

変更を保存せずに前画面または終了を使用して画面 200 を終了しようとしたときのみ、モーダルダイアログボックスが表示されます。変更を保存するか、または取り消します。

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

このトランザクションは、画面順序の実装方法を知るよい例です。画面 200 でモーダルダイアログボックスがどう呼び出されるかを見てみます。

画面制御ロジック

BACK または EXIT 機能コードを処理する際、PAI モジュールは、フライトの詳細が画面表示されてから、または最後に保存されてから、変更されたかどうかをチェックする必要があります。変更されている場合には、画面 210 がモーダルダイアログボックスとして呼び出されます。画面 200 の制御ロジックの次の部分は、以下のようになります。

*---------------------------------------------------------------*
*   Screen 200: Flow logic                                      *
*&--------------------------------------------------------------*
PROCESS AFTER INPUT.

   MODULE exit_0200 AT EXIT-COMMAND.
   ...
   MODULE user_command_0200.

PAI イベントで 2 つのダイアログモジュールが呼び出されます。

ABAP コード

トランザクションDEMO_SCREEN_FLOW のユーザインタフェースには、画面を終了する 3 つの機能、前画面、終了、および取消があります。画面 200 では、取消を使用した場合のみ、直接画面を終了させることができます。機能コードがモジュール EXIT_200 において処理されます。次画面が動的に 100 に設定され、画面 200 LEAVE SCREEN 命令により直ちに終了されます。

*&---------------------------------------------------------------*

*&   Module EXIT_0200 INPUT

*&---------------------------------------------------------------*

MODULE exit_0200 INPUT.
   CASE ok_code.
WHEN 'CANC'.
   CLEAR ok_code.
       SET SCREEN 100. LEAVE SCREEN.
ENDCASE.
ENDMODULE.

画面 200 の残りの機能コードは、モジュール USER_COMMAND_200 において処理されます。

        SAVE 機能により、データベース更新がトリガされます。

        EXIT および BACK 機能により、SAFETY_CHECK ルーチンの呼出がトリガされます。このサブルーチンは画面上に保存されていないデータがあるかどうかチェックし、必要であれば画面 210 を呼び出します。

*&---------------------------------------------------------------*

*&   Module USER_COMMAND_0200 INPUT

*&---------------------------------------------------------------*

MODULE user_command_0200 INPUT.
   CASE ok_code.
WHEN 'SAVE'.
       UPDATE spfli.
       IF sy-subrc = 0.
         MESSAGE s001 WITH spfli-carrid spfli-connid.
ELSE.
         MESSAGE a002 WITH spfli-carrid spfli-connid.
ENDIF.
  CLEAR ok_code.

WHEN 'EXIT'.
   CLEAR ok_code.
       PERFORM safety_check USING rcode.
       IF rcode = 'EXIT'. SET SCREEN 0. LEAVE SCREEN. ENDIF.
    WHEN 'BACK'.

   CLEAR ok_code.
       PERFORM safety_check USING rcode.
       IF rcode = 'EXIT'. SET SCREEN 100. LEAVE SCREEN. ENDIF.
  ENDCASE.
ENDMODULE.

ユーザが終了 ( 機能コード EXIT) を選択すると、画面順序は SET SCREEN 0 を使用して動的に終了され、トランザクションは終了します。ユーザが前画面 ( 機能コード BACK) を選択すると、次画面は命令 SET SCREEN 100 を使用して動的に変更されます。

サブルーチン SAFETY_CHECK において、現在の画面の値が古い値に照らしてチェックされます。値が一致した場合には、保存は必要ないので、ルーチンは終了します。

*---------------------------------------------------------------*

*  Subroutine SAFETY_CHECK                   *

*---------------------------------------------------------------*

FORM safety_check USING rcode.
   LOCAL ok_code.
   rcode = 'EXIT'.
   CHECK spfli NE old_spfli.
   CLEAR ok_code.
   CALL SCREEN 210 STARTING AT 10 5.
  CASE ok_code.

WHEN 'SAVE'.        UPDATE spfli.
WHEN 'EXIT'.
WHEN 'CANC'.CLEAR spfli.
ENDCASE.
ENDFORM.

値が異なる場合には、SAFETY_CHECK がモーダルダイアログボックス210 を呼び出します。保存するかどうかを聞かれるので、答 (SAVEEXIT 、またはCANC) を項目 OK_CODE に返します画面 210 の静的次画面は 210 です。ただし、処理ロジック ( モジュールUSER_COMMAND_210) では常に次画面が動的に 0 に設定されているので、コントロールはサブルーチンに戻されます。

 

 

 

コンテンツフレーム終了