NetWeaver ABAP Platformでは、プログラムといったリポジトリオブジェクトを直接変更せずに、予め意図的に用意された間口にコーディングしてカスタマ領域で新しいリポジトリオブジェクトを開発することにより、既存の機能を拡張する仕組みが用意されております。
このトピックでは、NetWeaver ABAPリリース7.0 (SAP NetWeaver 2004s)以降から導入された新しいテクニックの拡張フレームワークと従来の拡張テクニックを取り上げてそれぞれ説明します。
拡張フレームワーク
拡張フレームワークとは
拡張フレームワーク(Enhancement Framework)とは、、従来の拡張テクニック(カスタマExitやクラシックBAdiなど)をオブジェクト指向の手法で改良したフレームワークです。
拡張フレームワークでサポートされる拡張仕組は、「BAdiによるオブジェクトプラグイン」と「Enhancement Optionによるソースコードプラグイン」に大別します。
ここのBAdiは従来のクラシックBAdiと区別して、新規BAdiと呼ばれます。クラシックBAdiから新規BAdiに自動的に変換することができます。
拡張フレームワークでサポートされる拡張仕組は、「BAdiによるオブジェクトプラグイン」と「Enhancement Optionによるソースコードプラグイン」に大別します。
ここのBAdiは従来のクラシックBAdiと区別して、新規BAdiと呼ばれます。クラシックBAdiから新規BAdiに自動的に変換することができます。
拡張フレームワークの構成
拡張フレームワークを構成しているコンポーネントには下記のようなものがあります。
•Enhacement Spot
•Enhancement Implementaion
•Enhancement Option
•Enhacement Spot
•Enhancement Implementaion
•Enhancement Option
Enhacement Spot
Enhancement Implementaion
Enhancement Implementaionは、拡張実装を表します。オブジェクトプラグインとしてのBAdiによる拡張実装と、ソースコードプラグインとしてのEnhancement Optionによる拡張実装とも含められます。
Enhancement Option
ソースコードプラグイン を記述する位置はEnhancement Option によって管理されています。
Enhancement Option には、「ソース中の位置」「拡張タイプ(動的/静的、Point/Section)」などの属性があります。
Enhancement Option には、「ソース中の位置」「拡張タイプ(動的/静的、Point/Section)」などの属性があります。
Enhancement Option には、明示的なものと暗黙的なものがあります。
暗黙的なものとは、すべてのリポジトリオブジェクトにあらかじめ組み込まれたもので、Enhancement Spot を必要としません。
明示的なものとは、開発者が独自に作成するもので、Enhacement Point文やEnhancement Section文などを使用し、明示的に作成位置を指定します。
Enhancement Point は「挿入型」の拡張で、指定した行位置に拡張コードが挿入されます。
Enhancement Section は「置換型」の拡張で、指定した行範囲のコードが拡張コードで置換されます。
暗黙的なものとは、すべてのリポジトリオブジェクトにあらかじめ組み込まれたもので、Enhancement Spot を必要としません。
明示的なものとは、開発者が独自に作成するもので、Enhacement Point文やEnhancement Section文などを使用し、明示的に作成位置を指定します。
Enhancement Point は「挿入型」の拡張で、指定した行位置に拡張コードが挿入されます。
Enhancement Section は「置換型」の拡張で、指定した行範囲のコードが拡張コードで置換されます。
拡張の定義
拡張をサポートさせるには、拡張できるようにさせたいソースコードに事前に拡張の仕掛けを組み込む必要があります。
拡張フレームワークには以下三つの拡張方法が用意されています。
拡張フレームワークには以下三つの拡張方法が用意されています。
- BAdiによる拡張
- 明示的Enhancement Optionによる拡張
- 暗黙的Enhancement Optionによる拡張
「暗黙的Enhancement Optionによる拡張」は、サブルーチンや、汎用モジュールといったリポジトリオブジェクトのソース実装の開始及び終了の場所に全て予め組み込まれていますので、個別定義する必要がありません。
BADIによる拡張仕掛けを作成
以下の手順で、BADIによる拡張仕掛けを作成することができます。
- クラスビルダでBAdi用インタフェースを作成
- Enhancement Spotを作成
SE80を利用します - Enhancement Spot Defineを作成
SE80を利用します
Create BAdiを選択し、先ほど作成済のBAdi用インタフェースを指定 - 拡張するソースコードにGET BADI、CALL BADIを実装
明示的Enhancement Optionによる拡張仕掛けを作成
以下の手順で、明示的Enhancement Optionによる拡張仕掛けを作成することができます。
- 拡張するソースコードにEnhancement-Point文又はEnhancement-Sectionを記述
- 保存してウィザードに従いEnhancement Optionを作成
Enhancement Optionを管理するEnhancement Spotも同時に作成
従来の拡張技術
新しい拡張技術の拡張フレームワークができるまでには、以下の古い拡張が使われてきました。
- カスタマExit
- 汎用モジュールExit
- メニューExit
- Dynpro Exit
- クラシックBADI
クラシックBADIは汎用モジュールExit に取って代わったものとして、リリース4.6d 以降導入された技術です。リリース4.6までには、拡張技術としてカスタマExitしか使えない時代でした。