この記事を読むメリット
- 入出庫伝票一覧(T-CODE:MB51)を例に、明示的な拡張ポイントをソースから探せるようになる
- 暗黙的な拡張オプションを表示して、FORM の先頭に処理を差し込む手順が分かる
- 拡張実装の有効化と削除の手順が分かる
SAP の標準プログラムのソースには、独自の処理を差し込める位置があらかじめ用意されています。この記事では、その位置(拡張オプション)のうち、ソースに ENHANCEMENT-POINT と書かれた 明示的な拡張ポイント と、FORM の先頭・末尾などに最初からある 暗黙的な拡張オプション を扱います。
入出庫伝票一覧(T-CODE:MB51)を例に、次の 3 つを実際の画面で 1 画面ずつ解説します。対象は ABAP を学び始めた開発者の方です。
- 拡張ポイント・暗黙的な拡張オプションを 探す方法
- 見つけた位置に 拡張実装(ソースコードプラグイン)を登録して有効化する手順
- 作った拡張実装を 削除する手順
博士!入出庫伝票一覧の選択画面に、独自の入力チェックを足したいって相談されたんです。
うむ。標準のソースには、処理を差し込める拡張ポイントが用意されておるぞい。明示的なものと暗黙的なものの両方を説明していくぞい!
この記事のポイント
前提
- 確認した環境: この記事の画面は、SAP S/4HANA の SAP GUI for HTML の画面です(2026年10月)。
- 使うトランザクション: T-CODE:SE93、T-CODE:SE38、T-CODE:SE19。
- 作るもの: 拡張実装
ZLAB_EI_MB51。ローカルオブジェクトとして作ります。
拡張ポイントの仕組み
SAP のヘルプでは、次のように説明されています。
| 言葉 | 意味 |
|---|
| 拡張オプション | プログラムなどの開発オブジェクトの中で、拡張できる位置です。明示的なものと暗黙的なものがあります |
| 明示的な拡張オプション | ソースに明示的に書かれた位置です。ENHANCEMENT-POINT(その位置に処理を差し込む)と ENHANCEMENT-SECTION(その区間を置き換える)の 2 つがあります |
| 暗黙的な拡張オプション | 開発者が準備しなくても、拡張フレームワークが用意している位置です。手続き(FORM など)の先頭と末尾、インクルードの最終行の後などにあります |
| 拡張スポット | 明示的な拡張オプションをまとめて管理する入れ物です。暗黙的な拡張オプションには拡張スポットがありません |
| 拡張実装 | 拡張を管理するオブジェクトです。差し込む処理(ソースコードプラグイン)は、ENHANCEMENT と ENDENHANCEMENT の間に書きます |
- 拡張は、拡張フレームワークが管理する追加で、修正(モディフィケーション)をせずに標準の動きを変えるものです。
ENHANCEMENT-POINT に STATIC が付いているものはデータ宣言を足すため、付いていないものは処理(実行されるコード)を足すためのものです。
- 1 つの拡張オプションに、複数の拡張実装のソースコードプラグインを割り当てられます。
探し方1: プログラムのソースで ENHANCEMENT-POINT を検索する
たとえば、入出庫伝票一覧の選択画面に、会社独自の入力チェックを足したいという要望を受けた場面を考えます。まず入出庫伝票一覧のプログラムを調べ、そのソースで ENHANCEMENT-POINT を検索します。
1. T-CODE:SE93 でプログラムを調べる
コマンドフィールドに SE93 と入力して Enter キーを押します。「トランザクション更新」画面でトランザクションコードを入力し、「照会」を押します。
画面の見方
- トランザクションコード: 調べたいトランザクションコードを入力します。
- 照会: トランザクションの定義を表示します。
この例では MB51 を入力します。
画面の見方
- プログラム: トランザクションに割り当てられたプログラムの名前です。
この例では、内容説明は「入出庫伝票一覧」、プログラムは RM07DOCS です。
2. T-CODE:SE38 でプログラムを開く
コマンドフィールドに /nSE38 と入力して Enter キーを押します(/n を付けると、別のトランザクションの画面からでも移れます)。「ABAP エディタ: 第一画面」でプログラム名を入力し、「照会」を押します。
画面の見方
- プログラム: 開くプログラムの名前です。
- 照会: ソースを表示します。
この例では RM07DOCS を入力します。
3. ENHANCEMENT-POINT を検索する
ツールバーの検索ボタン(虫めがね)を押すと、「検索/置換」画面が開きます。
画面の見方
- 検索語句: 探す文字列を入力します。
- メインプログラム: 検索する範囲をメインプログラムにします。
- 続行: 検索を始めます。
この例では ENHANCEMENT-POINT と入力します。
4. 検索結果を見る
「プログラム内一括検索」画面に、見つかった拡張ポイントが並びます。
画面の見方
- プログラム/拡張: 拡張ポイントが書かれているプログラム(インクルード)の名前です。
- 拡張ポイントの行: 行番号、拡張ポイントの名前、
SPOTS の後ろに拡張スポットの名前が並びます。
- STATIC: データ宣言を足すための拡張ポイントに付く指定です。
この例では、RM07DOCS に 15 か所、インクルード RM07DOCS_CONTROL に 1 か所の拡張ポイントが見つかります。ここでは、②の rm07docs_01(拡張スポット es_rm07docs)を使います。行をダブルクリックすると、ソースのその位置が開きます。
STATIC はデータ宣言を足すためのものなので、処理を足すときは STATIC の付いていない拡張ポイントを選ぶとよいでしょう。
5. 拡張ポイントの前後のソースを読む
画面の見方
- ENHANCEMENT-POINT の行: ここに処理を差し込めます。
- 拡張ポイントの直後の処理: 拡張ポイントの次に書かれている処理です。
- 拡張: 拡張モードに切り替えるボタンです。
この例では、rm07docs_01 はイベント AT SELECTION-SCREEN の中にあり、直後で汎用モジュール MMIM_ENTRYCHECK_MAIN(内容説明: Input Checks Reporting MM-IM)を呼んでいます。SAP のヘルプによると、ソースコードプラグインは ENHANCEMENT-POINT の位置に挿入されます。
差し込む位置を決める前に、このように前後のソースを読んで、どのタイミングで実行されるかを確かめておくとよいでしょう。
登録の仕方1: 明示的な拡張ポイントに拡張実装を作る
1. 拡張モードに切り替える
ツールバーの「拡張」を押すと、エディタが拡張モードに切り替わります。
画面の見方
- 画面タイトル: 今のエディタのモードと対象が表示されます。
- ENHANCEMENT-POINT の行: 実装を作る拡張ポイントです。この行をクリックしてカーソルを置きます。
この例では、画面タイトルは「ABAP エディタ: 変更 拡張の対象 RM07DOCS」です。
2. 実装の登録を選ぶ
カーソルを拡張ポイントの行に置いたまま、メニューから「編集」→「拡張操作」→「実装の登録」を選びます。
画面の見方
- 編集: 編集のメニューです。
- 拡張操作: 拡張に関する操作のメニューです。
- 実装の登録: カーソルのある拡張オプションに実装を作ります。
カーソルが拡張オプションの行に無いと、ステータスバーに「拡張オプションにカーソルを合わせて登録してください」と表示されます。
3. 拡張実装を新しく作る
「拡張実装の選択または登録」画面が開きます。
画面の見方
- 拡張実装の一覧: 拡張実装の一覧です。
- 指定された拡張実装の選択: 一覧で選んだ拡張実装に、新しい実装を追加します。
- 拡張実装の登録: 新しい拡張実装を作ります。
この例では、すでに 6 つの拡張実装が並んでいます。ここでは「拡張実装の登録」を押します。
画面の見方
- 拡張実装: 作る拡張実装の名前です。
- テキスト (短): 拡張実装の説明です。
- 拡張の登録: 拡張実装を作ります。
この例では、拡張実装を ZLAB_EI_MB51、テキストを「入出庫伝票一覧の選択画面チェック(学習用)」とします。
「オブジェクトディレクトリエントリ登録」画面が開くので、保存先を決めます。
画面の見方
- Object: 作るオブジェクトの種類です。
- ローカルオブジェクト: 保存先をローカルオブジェクトにします。
この例では、オブジェクトの種類は ENHO と表示されます。学習用なので「ローカルオブジェクト」を押します。
4. 作った拡張実装を選ぶ
ステータスバーに「拡張実装 ZLAB_EI_MB51 が登録されました」と表示され、「拡張実装の選択または登録」画面の一覧に、作った拡張実装が加わります。
画面の見方
- 作った拡張実装の行: 今回作った拡張実装です。
- 指定された拡張実装の選択: 選んだ拡張実装で実装を作ります。
5. ソースコードプラグインに処理を書く
拡張ポイントの直後に、ENHANCEMENT と ENDENHANCEMENT の枠(ソースコードプラグイン)が入ります。
画面の見方
- 画面タイトル: 編集している拡張実装の名前が表示されます。
- ソースコードプラグイン:
ENHANCEMENT の行(始まり)から ENDENHANCEMENT の行(終わり)までです。間の行に処理を書きます。
この例では、ENHANCEMENT 1 ZLAB_EI_MB51. の行に「”inactive version」と表示されます。処理を書く場所には、コメントを 1 行入れています。SAP のヘルプによると、ENHANCEMENT と ENDENHANCEMENT の行そのものは直接入力・編集できず、ワークベンチが作ります。
6. 有効化する
ツールバーの「拡張」(拡張の有効化)を押します。
画面の見方
- 拡張(拡張の有効化): 拡張実装を有効化します。
- 拡張の保存: 拡張実装を保存します。
有効化するオブジェクトを選ぶ画面が開きます。
画面の見方
- 拡張実装の行: 有効化するオブジェクトの行です。
- 続行: 印を付けたオブジェクトを有効化します。
この例では、オブジェクトの種類 ENHO の ZLAB_EI_MB51 のほかにも有効化されていないオブジェクトが一覧に並び、ZLAB_EI_MB51 にだけ印が付いています。今回作ったものだけに印が付いていることを確かめてから続行するとよいでしょう。
画面の見方
- ENHANCEMENT の行: 有効化されたかどうかが行の末尾に表示されます。
- ステータスバー: 処理の結果を示すメッセージが表示されます。
この例では、行の末尾が「”active version」に変わり、ステータスバーに「オブジェクト有効化」と表示されます。
探し方2: 暗黙的な拡張オプションを表示する
明示的な拡張ポイントが目的の位置に無いときは、暗黙的な拡張オプションを探すとよいでしょう。拡張モードのまま、メニューから「編集」→「拡張操作」→「暗黙的な拡張オプションを表示」を選びます。
1. 暗黙的な拡張オプションを表示する
画面の見方
- 拡張操作: 拡張に関する操作のメニューです。
- 暗黙的な拡張オプションを表示: ソースの中に、暗黙的な拡張オプションの位置を表示します。
ソースの中に、""""""""…$"$\SE:(番号) … という行が表示されます。これが暗黙的な拡張オプションの位置です。
画面の見方
- FORM の終了の位置: FORM の末尾(
ENDFORM の直前)にある暗黙的な拡張オプションです。
- FORM の行: 手続き(FORM)の始まりです。
- FORM の開始の位置: FORM の先頭にある暗黙的な拡張オプションです。
この例では、「FORM DETAIL_LIST, 終了」と「FORM OUTPUT_LIST, 開始」が表示されています。RM07DOCS 全体では、FORM の開始・終了のほか、構造の定義など、インクルードの終わり、既存のソースコードプラグインの開始・終了にも表示されます。
登録の仕方2: 暗黙的な拡張オプションに拡張実装を作る
ここでは、FORM output_list(ソースのコメントは「Print the main list (hierarchical)」)の先頭に処理を足す例で説明します。
1. 拡張モードを選ぶ
③の「FORM OUTPUT_LIST, 開始」の行にカーソルを置き、「登録の仕方1」の手順 2 と同じく「編集」→「拡張操作」→「実装の登録」を選びます。「拡張モード選択」画面が開きます。
画面の見方
- 宣言: データ宣言などを足すときに選びます。
- コード: 処理(ソースコード)を足すときに選びます。
- 情報: 宣言とコードの違いの説明を表示します。
「情報」を押すと、次の説明が表示されます。
この説明によると、2 つの違いは次のとおりです。
- 宣言: 無条件に呼び出される「静的」な拡張です。たとえばデータ宣言を追加したり置換したりできます。クライアントとは無関係に呼び出され、システムの全クライアントで可視になります。
- コード: 現在のスイッチ設定に応じて呼び出される「動的」な拡張です。
- サブルーチン・メソッド・ローカルクラスの定義は、「動的」な拡張実装には書けず、「静的」な拡張実装にだけ書けます。
この例では、処理を足すので「コード」を押します。
2. 処理を書いて有効化する
この例では、「コード」を押すと、同じ拡張実装 ZLAB_EI_MB51 の 2 つ目のソースコードプラグインとして枠が入ります。
画面の見方
- FORM の開始の位置: 実装を作った暗黙的な拡張オプションです。
- 2 つ目のソースコードプラグイン:
ENHANCEMENT 2 の行から ENDENHANCEMENT の行までです。間の行に処理を書きます。
- 拡張(拡張の有効化): 拡張実装を有効化します。
この例では、ENHANCEMENT 2 ZLAB_EI_MB51. と番号 2 が付きます。「登録の仕方1」の手順 6 と同じく有効化すると、2 つのソースコードプラグインとも「”active version」になります。
結果の確認
T-CODE:SE19 で拡張実装を照会すると、どこに実装を作ったかを一覧で確かめられます。「BAdI ビルダ: 実装の第一画面」の上半分「実装の編集」で、「新規 BAdI」を選んで拡張実装の名前を入力し、「照会」を押します。「拡張実装エレメント」タブを開きます。
画面の見方
- 拡張実装のステータス: 拡張実装が有効化されているかどうかの表示です。
- 拡張された開発オブジェクト: 拡張したプログラムです。
- 明示的な拡張ポイントの行: 拡張スポットの欄に名前が入っています。
- 暗黙的な拡張オプションの行: 拡張スポットの欄が空です。
この例では、ステータスは「有効」、拡張された開発オブジェクトは RM07DOCS です。③の拡張実装ポイントは \PR:RM07DOCS\EX:RM07DOCS_01\EI、④は \PR:RM07DOCS\FO:OUTPUT_LIST\SE:BEGIN\EI と表示されます。SAP のヘルプにあるとおり、暗黙的な拡張オプションには拡張スポットがありません。
後片付け: 拡張実装を削除する
学習やテストのために作った拡張実装は、確かめ終わったら削除しておくとよいでしょう。
1. T-CODE:SE19 で拡張実装を削除する
T-CODE:SE19 の「実装の編集」で拡張実装の名前を入力し、ツールバーの「実装削除」を押します。
画面の見方
- 拡張実装: 削除する拡張実装の名前です。
- 実装削除: 拡張実装を削除します。
画面の見方
- 実装: 削除する拡張実装の名前です。
- 続行: 削除します。
画面の見方
- ステータスバー: 処理の結果を示すメッセージが表示されます。
この例では「拡張実装 ZLAB_EI_MB51 が削除されました」と表示されます。
うまくいかないときに確かめること
- 「拡張オプションにカーソルを合わせて登録してください」と表示される: カーソルが拡張ポイントや暗黙的な拡張オプションの行にありません。行をクリックしてから「実装の登録」を選びましょう。
- ソースコードプラグインの行に「”inactive version」と表示されている: まだ有効化されていません。「登録の仕方1」の手順 6 のとおり有効化しましょう。
まとめ
- 明示的な拡張ポイントは、プログラムのソースで
ENHANCEMENT-POINT を検索して探します。暗黙的な拡張オプションは、拡張モードで「暗黙的な拡張オプションを表示」を選んで探します。
- 拡張モードで位置にカーソルを置き、「実装の登録」で拡張実装を作り、
ENHANCEMENT〜ENDENHANCEMENT の間に処理を書いて有効化します。
- 作った拡張実装は、T-CODE:SE19 の「実装削除」で削除できます。
ENHANCEMENT-POINT を検索する方法と、暗黙的な拡張オプションを表示する方法があるんですね!
うむ。処理は ENHANCEMENT と ENDENHANCEMENT の間に書いて、有効化するのじゃ。