ABAPのSY-BATCHとは?バックグラウンド実行の判定と使い方

ABAPレポートを画面から実行したときと、バックグラウンドジョブで実行したときで、メッセージやファイル処理の方法を変えたいことがあります。その判定に使えるシステム項目が SY-BATCH です。

SY-BATCHの値と意味

SY-BATCHの値 意味 典型的な実行例
'X' ABAPプログラムがバックグラウンドで実行されている SM36などで登録したジョブ
初期値(空白) バックグラウンド実行ではない 選択画面からの対話実行

SY-BATCH はプログラムが自分で設定するフラグではなく、ABAP実行環境が設定するシステム項目です。バックグラウンド実行時は 'X'、それ以外は初期値になります。判定するときは、値が 'X' かどうかを明示しておくと意図を読み取りやすくなります。

ABAPでの判定方法と実行例

最小限の判定は次のとおりです。

IF sy-batch = 'X'.
  " バックグラウンド実行時の処理
ELSE.
  " バックグラウンド以外の処理
ENDIF.

動作を確認するには、次のテスト用レポートを対話実行し、同じレポートをバックグラウンドジョブでも実行します。

REPORT z_demo_sy_batch.

START-OF-SELECTION.
  IF sy-batch = 'X'.
    WRITE: / '実行形態: バックグラウンド'.
  ELSE.
    WRITE: / '実行形態: バックグラウンド以外'.
  ENDIF.

対話実行では一覧画面に結果が表示されます。ジョブ実行では、一覧出力が作成されればSM37からスプールを確認できます。ジョブの状態やエラーはSM37のジョブログでも確認してください。スプールやジョブログに表示される内容は、プログラムの出力方法によって異なります。

どんなときに分岐させるか

  • 画面への進捗表示:対話実行時だけ進捗バーを表示し、バックグラウンドでは必要な結果をログなどに残す。
  • 利用者への確認:確認ポップアップに依存せず、ジョブ実行時の処理方針を事前に決める。
  • ファイル処理:PC上のファイルを扱う処理をバックグラウンドでそのまま呼ばず、実行環境に合う入出力方法を使う。

たとえば進捗表示の処理を囲むだけなら、次のように書けます。ただし、対話実行であっても実際にSAP GUIが利用できるかは別に確認が必要です。

IF sy-batch IS INITIAL.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 50
      text       = '処理中'.
ENDIF.

SY-BATCHで判定するときの注意点

初期値は「SAP GUIがある」という意味ではない

SY-BATCH が初期値でも、プログラムの呼び出し方によっては利用者のSAP GUIが使えません。GUI_UPLOAD、GUI_DOWNLOAD、ファイル選択ダイアログなどを呼ぶ前には、バックグラウンド判定だけに頼らず、GUIの利用可否を確認します。PC上のファイルを扱う処理とアプリケーションサーバー上のファイルを扱う処理は分けて設計してください。

SY-BINPTとは用途が違う

SY-BATCH はバックグラウンド処理に関する項目です。一方、SY-BINPT はバッチインプットの処理中かどうかを示します。「バッチ」という語が共通でも、同じ判定には使えません。

分岐だけでエラー通知は完成しない

バックグラウンドでは利用者が画面を見ていないため、画面メッセージだけに頼ると異常を追跡しにくくなります。ジョブログ、スプール、アプリケーションログ、業務データの更新結果のうち、運用担当者が何を確認するかを決めておきます。SY-BATCH は実行形態の判定に使うもので、ジョブの登録や結果確認を自動で行うものではありません。

動作確認の手順

  1. テスト用レポートを対話実行し、「バックグラウンド以外」が表示されることを確認します。
  2. 同じレポートをF9またはSM36からバックグラウンド実行します。
  3. SM37でジョブを検索し、状態とジョブログを確認します。レポートの一覧出力が作成されていればスプールも確認します。

まとめ

ABAPの SY-BATCH は、バックグラウンド実行時に 'X' になります。画面表示や確認ダイアログなどの処理を分ける入口として便利ですが、初期値だけでSAP GUIの存在は判断できません。実行形態とGUIの利用可否を区別し、ジョブ実行後に確認できる結果も設計しましょう。

ジョブが長く終わらない場合

SY-BATCHは実行形態を示すだけで、処理の遅延原因は分かりません。SM37でジョブのステータスとログを確認し、実行中ならSM50・SM66でワークプロセスの状態を調べます。ファイルを扱うジョブでは、アプリケーションサーバー上のパスと権限も確認してください。

参考・関連記事

関連記事

PAGE TOP