!--a11y-->

画面順序のサンプルトランザクションとして、トランザクション 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 つのダイアログモジュールが呼び出されます。
トランザクション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 を呼び出します。保存するかどうかを聞かれるので、答 (SAVE 、EXIT 、またはCANC) を項目 OK_CODE に返します画面 210 の静的次画面は 210 です。ただし、処理ロジック ( モジュールUSER_COMMAND_210) では常に次画面が動的に 0 に設定されているので、コントロールはサブルーチンに戻されます。