ABAP:]バックグラウンドジョブDEBUG
T-CD:SM37からバックグラウンドジョブをデバッグ実行可能です。
SM37のジョブ一覧画面でコマンドフィールドに"JDBG"と入力するだけでお手軽です。
画面イメージとかは下記Wikiを参照して下さい。
http://wiki.scn.sap.com/wiki/display/ERPFI/Debug+program+used+in+background
標準ではジョブ実行となってしまう処理をトレースするのに非常に便利です。
バックグラウンド実行プログラムをdebugする!
代表的な裏技は全部で3つ。
方法①②はコピープログラム作成が前提です。同じプログラムを何度もデバッグする場合に向いています。
また、直接コードを修正するので注意が必要であり、ブラックボックスである標準プログラムには向きません。
方法③は、一番簡易で現実的な方法です。標準プログラム、アドオンプログラム問わず最も効率的な方法です。
方法① SY-BATCH行をコメントアウト
バックグラウンド実行プログラムには以下のようなコードがあります。
CHECK SY-BATCH IS NOT INITIAL.
バックグラウンド実行プログラムが、バックグラウンド実行しかできないのはこのコードがあるからです。
SY-BATCHはバックグラウンド実行の場合に「X」が格納されます。もし、ここに「X」が格納されていれば、
そのプログラムは「バックグラウンド実行されている」ことになりますし、
ブランクであれば「オンライン実行」されているということになります。
先ほどの1行で、SY-BATCHが空白でないこと、つまりバックグラウンド実行でプログラムが動かされていることを、
このコードで制限しているわけです。
ので、このコードがなければバックグラウンド実行のみが許可されているプログラムでもオンライン実行が可能になり、
デバッグができるようになります。
したがって、「SY-BATCH」が含まれる行をコメントアウトすればデバッグができるようになります。
※システム項目?という方はこちら。
方法② SY-BATCHに「X」を入れる
前述したように、バックグラウンド実行しかできないプログラムは、SY-BATCHの値によって制限しています。
つまり、SY-BATCHに「X」を格納する記述をすれば、オンライン実行が可能となりデバッグができるようになります。
コメントアウトの方が楽かと思いますので、①を推奨します。
方法③ デバッグ中に「SY-BATCH」の値書き換え
(1)プログラムをSE38から実行
(2)/h でデバッグ起動
(3)実行後に「SY-BATCH」の値を「X」に書き換え
こうすることで、動的にオンライン実行の状態を再現することができます。
SM37のジョブ一覧画面でコマンドフィールドに"JDBG"と入力するだけでお手軽です。
画面イメージとかは下記Wikiを参照して下さい。
http://wiki.scn.sap.com/wiki/display/ERPFI/Debug+program+used+in+background
標準ではジョブ実行となってしまう処理をトレースするのに非常に便利です。
バックグラウンド実行プログラムをdebugする!
代表的な裏技は全部で3つ。
方法①②はコピープログラム作成が前提です。同じプログラムを何度もデバッグする場合に向いています。
また、直接コードを修正するので注意が必要であり、ブラックボックスである標準プログラムには向きません。
方法③は、一番簡易で現実的な方法です。標準プログラム、アドオンプログラム問わず最も効率的な方法です。
方法① SY-BATCH行をコメントアウト
バックグラウンド実行プログラムには以下のようなコードがあります。
CHECK SY-BATCH IS NOT INITIAL.
バックグラウンド実行プログラムが、バックグラウンド実行しかできないのはこのコードがあるからです。
SY-BATCHはバックグラウンド実行の場合に「X」が格納されます。もし、ここに「X」が格納されていれば、
そのプログラムは「バックグラウンド実行されている」ことになりますし、
ブランクであれば「オンライン実行」されているということになります。
先ほどの1行で、SY-BATCHが空白でないこと、つまりバックグラウンド実行でプログラムが動かされていることを、
このコードで制限しているわけです。
ので、このコードがなければバックグラウンド実行のみが許可されているプログラムでもオンライン実行が可能になり、
デバッグができるようになります。
したがって、「SY-BATCH」が含まれる行をコメントアウトすればデバッグができるようになります。
※システム項目?という方はこちら。
方法② SY-BATCHに「X」を入れる
前述したように、バックグラウンド実行しかできないプログラムは、SY-BATCHの値によって制限しています。
つまり、SY-BATCHに「X」を格納する記述をすれば、オンライン実行が可能となりデバッグができるようになります。
コメントアウトの方が楽かと思いますので、①を推奨します。
方法③ デバッグ中に「SY-BATCH」の値書き換え
(1)プログラムをSE38から実行
(2)/h でデバッグ起動
(3)実行後に「SY-BATCH」の値を「X」に書き換え
こうすることで、動的にオンライン実行の状態を再現することができます。