本文へスキップ

全体像

アドオンの処理を追う方法

仕様書の無いアドオンが何をしているかを、トランザクションの実体、呼び出し先のプログラム、BDCによる裏実行という順に追う方法をまとめました。Report Writerを呼ぶパラメータトランザクションの見分け方も解説します。


既存システムの調査をしていると、「この画面は標準ですか、アドオンですか」という問いに答える場面が必ず来ます。仕様書が残っていないことも珍しくありません。ここでは、アドオンが何をしているかを外側から順に追っていく手順をまとめます。

1. トランザクションの実体を見る

出発点はSE93です。トランザクションコードを入力して表示すると、そのトランザクションが何を起動するのかが分かります。ここで種類を確認するのが第一歩です。

トランザクションの種類と読み方
種類起動するもの追いかけ方
ダイアログトランザクションプログラムと画面番号SE80/SE38でプログラムを開き、指定された画面から追う
レポートトランザクションレポートプログラム(と変数)プログラムを開く。変数が固定されていることもある
パラメータトランザクション別のトランザクションと、画面項目への初期値初期値に何が設定されているかを読む

2. パラメータトランザクションの初期値を読む

SE93で開いたら、ABAPプログラムではなく別のトランザクションを呼ぶ形になっていた、というケースがあります。実際に調べたトランザクションは、レポート起動用の標準トランザクションを呼び、画面項目への初期値としてレポート名とレポートタイプを渡していました。

SE93の初期値の例
D_SREPOVARI-REPORT     = Z004
D_SREPOVARI-REPORTTYPE = RW

ここでのポイントはレポートタイプです。RWはReport Writerを指します。つまり、この「Z004」はABAPプログラムではなく、Report Writer側のオブジェクト(レポートグループ)です。SE38でZ004を探しても見つからないのは当然で、探す場所が違うということになります。

なお、SE93の初期値そのものを変えて回避しようとすると、「リポジトリ、クライアント非依存のカスタマイジングへの変更はできません」と言われることがあります。これはシステム・クライアントの変更可否の設定(SCC4、SE06)によるもので、その環境では変更してはいけないという意思表示です。回避策を探す前に、なぜその設定になっているかを確認したほうが安全です。

3. 画面から処理の流れを追う

自前の画面を持つアドオンは、画面(Dynpro)とその後ろのモジュールを順にたどると構造が見えます。私が調べたアドオンは、残高照会・売掛金・買掛金の3種類の処理を1つの画面から選ばせる作りで、選んだ処理に応じて別の帳票プログラムを呼び分けていました。

追っていくと見えた構造
アドオンのプログラム
  └ 画面 0100(出力先プリンタ、会社コード、会計年度・期間、取引先 …)
      └ ユーザコマンド処理
          └ 選んだ処理の判定
              ├ 処理1 → 残高確認書(売掛金・買掛金)のプログラム
              ├ 処理2 → 売掛金 取引先別・勘定別明細のプログラム
              └ 処理3 → 買掛金 取引先別・勘定別明細のプログラム

結論としては、このアドオンは処理そのものを持っておらず、既存の帳票プログラムを裏で実行するラッパーでした。こうした構造は珍しくありません。「入力画面をまとめたい」「複数の帳票を続けて出したい」という要望に対して、既存の機能を呼び出す形で作られます。

4. BDCで裏実行していないかを見る

呼び分けの先を見ると、呼び出し先の画面に値をセットして実行し、戻ってくる、という処理が並んでいました。これはBDC(バッチインプット)と呼ばれる方式で、画面に人が入力するのと同じ操作をプログラムから行います。

  • 画面番号と、その画面の項目に入れる値を順にセットする
  • 実行や戻るといった操作を、ファンクションコード(/08、/03など)で指定する
  • 組み立てた操作の列を使って、対象のトランザクションやプログラムを呼び出す

追うときの順序

  1. SE93でトランザクションの種類と、起動するものを確認する
  2. パラメータトランザクションなら、初期値から本当の対象(プログラムか、Report Writerなどの別オブジェクトか)を特定する
  3. 自前の画面があるなら、画面 → ユーザコマンド → 呼び分けの順にたどる
  4. 呼び出し先があるなら、それを単体で同じ条件で実行して、エラーが再現するかを見る

アドオンの調査は、いきなりコードを読み始めると時間がかかります。「どこまでがアドオンで、どこからが標準か」の境目を先に見つけると、読む量が一気に減ります。境目が分かれば、エラー対応も標準側の切り分けに持ち込めます。

この記事に出てきた名前

名前種類何のためのもの
SE93トランザクショントランザクションコードの定義を表示する。何を起動するかが分かる
SE38/SE80トランザクションABAPプログラムやその画面を表示する
Dynpro仕組みの名前SAPの画面のこと。プログラムと画面番号の組で識別される
パラメータトランザクショントランザクションの種類別のトランザクションを呼び、画面項目に初期値を入れて起動する
Report Writer機能の名前設定で帳票を組み立てる仕組み。ABAPプログラムとは別のオブジェクトとして管理される
BDC方式の名前画面への入力操作をプログラムから再現して、別の処理を実行する
SCC4/SE06トランザクションクライアント・システムの変更可否を設定する

わからない用語は SAP用語辞典 で調べられます。