既存システムの調査をしていると、「この画面は標準ですか、アドオンですか」という問いに答える場面が必ず来ます。仕様書が残っていないことも珍しくありません。ここでは、アドオンが何をしているかを外側から順に追っていく手順をまとめます。
1. トランザクションの実体を見る
出発点はSE93です。トランザクションコードを入力して表示すると、そのトランザクションが何を起動するのかが分かります。ここで種類を確認するのが第一歩です。
| 種類 | 起動するもの | 追いかけ方 |
|---|---|---|
| ダイアログトランザクション | プログラムと画面番号 | SE80/SE38でプログラムを開き、指定された画面から追う |
| レポートトランザクション | レポートプログラム(と変数) | プログラムを開く。変数が固定されていることもある |
| パラメータトランザクション | 別のトランザクションと、画面項目への初期値 | 初期値に何が設定されているかを読む |
2. パラメータトランザクションの初期値を読む
SE93で開いたら、ABAPプログラムではなく別のトランザクションを呼ぶ形になっていた、というケースがあります。実際に調べたトランザクションは、レポート起動用の標準トランザクションを呼び、画面項目への初期値としてレポート名とレポートタイプを渡していました。
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など)で指定する
- 組み立てた操作の列を使って、対象のトランザクションやプログラムを呼び出す
追うときの順序
- SE93でトランザクションの種類と、起動するものを確認する
- パラメータトランザクションなら、初期値から本当の対象(プログラムか、Report Writerなどの別オブジェクトか)を特定する
- 自前の画面があるなら、画面 → ユーザコマンド → 呼び分けの順にたどる
- 呼び出し先があるなら、それを単体で同じ条件で実行して、エラーが再現するかを見る
アドオンの調査は、いきなりコードを読み始めると時間がかかります。「どこまでがアドオンで、どこからが標準か」の境目を先に見つけると、読む量が一気に減ります。境目が分かれば、エラー対応も標準側の切り分けに持ち込めます。
この記事に出てきた名前
| 名前 | 種類 | 何のためのもの |
|---|---|---|
| SE93 | トランザクション | トランザクションコードの定義を表示する。何を起動するかが分かる |
| SE38/SE80 | トランザクション | ABAPプログラムやその画面を表示する |
| Dynpro | 仕組みの名前 | SAPの画面のこと。プログラムと画面番号の組で識別される |
| パラメータトランザクション | トランザクションの種類 | 別のトランザクションを呼び、画面項目に初期値を入れて起動する |
| Report Writer | 機能の名前 | 設定で帳票を組み立てる仕組み。ABAPプログラムとは別のオブジェクトとして管理される |
| BDC | 方式の名前 | 画面への入力操作をプログラムから再現して、別の処理を実行する |
| SCC4/SE06 | トランザクション | クライアント・システムの変更可否を設定する |