使用する
この例では、顧客はBAPITravelAgency.CreateFromDataを使用したいと考えています。このBAPIはデータベーステーブルSTRAVELAGに基づいており、顧客はSAPが提供するバージョンに3つのフィールドを追加したいと考えています。
拡張データベーステーブル
SAPが提供するデータベーステーブルを拡張するために、顧客は最初に顧客固有のフィールドを含むデータ構造を作成します。この例では、これは構造TRAVELAGであり、PLANETYPEとCOMPANYの2つのフィールドがあります。
この構造は、データベーステーブルとBAPIテーブル拡張の両方に含まれています。これにより、データベーステーブルとテーブル拡張の拡張機能が常に同一になります。
データベーステーブルは、顧客固有のフィールドのデータ構造を持つINCLUDEを含むAPPEND構造を追加することによって拡張されます。APPEND構造を使用して、拡張機能が常にテーブルの最後に表示されるようにします。
次の図は、拡張テーブルを示しています。
BAPIテーブル拡張
BAPIテーブル拡張前述のように、BAPIテーブル拡張は、顧客によるBAPIの拡張を可能にするヘルプ構造です。これらは、得意先拡張コンセプトで使用されるすべてのSAPデータベーステーブルに存在する必要があります。これらのBAPIテーブル拡張は、データインポート中に、顧客拡張をコンテナ( ExtensionIn)からBAPIインターフェイスにコピーし、データベーステーブルの追加フィールドに入力するために使用されます。データのエクスポート中に、BAPIテーブル拡張機能を使用して、顧客テーブル拡張機能からデータをコピーし、 ExtensionOutパラメーターに配置します。BAPIテーブル拡張が使用される場所とそれらを正確に使用する方法は、BAPI開発者によるアクションで説明されています。
BAPIテーブル拡張は、トランザクションSE11を使用してABAPディクショナリにデータ構造として登録されます。これらは通常、次のコンポーネントで構成されています。
-
SAPによって事前定義された重要な部分。これは、BAPIテーブル拡張が参照するデータベーステーブルのキーフィールドです。したがって、SAPは、キー部分のみを持ち、データ部分を持たないBAPIテーブル拡張を提供しています。
-
APPEND手法によって顧客が決定し、追加の項目を含むデータ部分。顧客がSAPテーブルにテーブルフィールドを追加したい場合、これらのテーブルフィールドはINCLUDEとしてAPPENDに挿入されます。したがって、顧客はその後、SAPが提供する「初期」テーブル拡張にデータ部分を追加します。
BAPIテーブル拡張機能を使用する場合は、次のガイドラインに従う必要があります。
-
BAPIテーブル拡張の命名規則はBAPI_TE_<table_name>です。構造名の長さの制限のためにこの命名規則に従うことができない場合は、テーブル拡張とBAPIのドキュメントでこれを明示的に指定する必要があります。
-
BAPI開発者が拡張できると考えるデータベーステーブルごとに、個別のBAPIテーブル拡張を作成する必要があります。ただし、各テーブルは1つのテーブル拡張子しか持てないことに注意してください。したがって、複数のBAPIが同じテーブルを使用する場合、それらはテーブル拡張を共有する必要があります。
例外:
BAPIに同じデータベーステーブルを参照する2つ以上のパラメータがある場合、これらのBAPIパラメータごとに個別のBAPIテーブル拡張が作成されます。この場合の命名規則は、BAPI_TE<table_name><consecutive_number>です。この例では、BAPIテーブル拡張はBAPI_TE_STRAVELAG1、BAPI_TE_STRAVELAG2などと呼ばれます。
-
BAPIテーブル拡張の構造には、BAPIテーブル拡張が関連するテーブルの識別されたすべての項目(キー項目)が含まれている必要があります。これは、拡張データベーステーブルのどの行がBAPIに拡張を保存するかを決定する唯一の方法です。
-
APPENDに含まれるデータ構造は、データベースの拡張に使用されるものと同じである必要があります。これは、追加のテーブルフィールドが自動的に入力されるようにする唯一の方法です。
-
得意先は、BAPIテーブル拡張でデータ型CHARおよび類似のデータ型の項目のみを使用することができます。この制限は、拡張パラメータの参照構造BAPIPAREXによるものです。「対応する移動」によってSAPフィールドが上書きされるため、BAPIテーブル拡張のAPPENDにある標準テーブルのフィールドを使用することはできません。
-
BAPIテーブル拡張のデータ部分は、最大960文字の長さにすることができます。
次の図は、この例でBAPIテーブル拡張がどのように見えるかを示しています。データ部分の場合、APPENDに含まれるINCLUDE構造が、データベーステーブルの拡張に使用されるものと同じであることが重要です。この場合、これは、PLANETYPEとCOMPANYの2つの項目を持つ構造TRAVELAGです。
拡張パラメータとBAPI
拡張パラメータとBAPIBAPIインタフェースの2つの拡張パラメータ( ExtensionInとExtensionOut)は、拡張をBAPI汎用モジュールに渡すか、汎用モジュールから呼び出し元プログラムにコンテナ形式で転送するために使用されます。
拡張パラメータは、常にデータ構造BAPIPAREXに基づいています。これは、BAPIと呼び出し側プログラムの間で拡張機能をやり取りするために使用されるデータレコードの形式を決定します。
次の図は、BAPIPAREX構造を示しています。
個々のフィールドの目的は次のとおりです。
-
構造
STRUCTUREフィールドには、それぞれのデータレコードが参照するBAPIテーブル拡張の名前が含まれます。次に、テーブル拡張は1つのデータベーステーブルにのみ割り当てられるため、プログラムはデータレコードを保存する拡張テーブルを決定できます。
-
VALUEPART1からVALUEPART4
拡張コンテナの各データレコードには、テーブル拡張の名前に加えて、キー値と追加のテーブルフィールドに挿入される値が含まれています。データレコードのデータが書き込まれるデータベーステーブルの行を決定するには、キー値を渡す必要があります。
例外:
これらの値はBAPI自体で生成されるため、内部番号割当を使用してCreate()BAPIでキー値を渡すことはできません。Create()BAPIの場合の続行方法の詳細については、既存のデータベーステーブルに基づく拡張のアクションを参照してください。
したがって、VALUEPART1からVALUEPART4のフィールドには、テーブルの行を識別するキー値と、テーブルに挿入されるデータフィールドの両方が含まれます。キー値とデータのVALUEPART1からVALUEPART4への割り当ては、VALUEPARTフィールドに連続して入力することによって実行されます。VALUEPART1は、最初にデータレコードのすべてのキーフィールドを保存します。VALUEPART1(長さ240)にまだ容量がある場合は、最初の顧客固有のテーブル項目の値もVALUEPART1に保存されます。これは、VALUEPART1の容量がなくなるまで、さらにテーブルフィールドで続行されます。データレコード内のすべての値がコンテナに含まれるまで、プロセスはVALUEPART2からVALUEPART4まで続行されます。
上記の例を続けると、拡張コンテナは次のようになります。
最初のデータレコードの値「BOEING747」と「LUFTHANSA」は、BAPI_TE_STRAVELAGで指定されたデータベーステーブルSTRAVELAGの追加フィールドに書き込まれます。値が挿入されるテーブル行は、キー「4711」で識別されます。
インポートコンテナからのデータのチェックとさらなる処理、およびエクスポートコンテナの入力は、その後、BAPI開発者によって提供されたBAdIで行われます。