使用する
BAPI開発者は、特定のBAPIの要件に従って、最初にBAPIインタフェースでExtensionInおよび/またはExtensionOutパラメータを指定する必要があります。また、BAPI汎用モジュールで最大2つのBAdIを指定する必要があります。これにより、お客様はこのBAPIを使用して3種類すべての拡張機能を実装できます。
開発者は、どのSAPデータベーステーブルに顧客フィールドが適切に追加されるか、他のテーブルの既存のフィールドがBAPIに含まれるかを予測することで、顧客をさらにサポートすることもできます。
プロセス
以下の例は、BAPI開発者が特定のケースに対して実行する必要のあるアクションを説明しています。この例では、拡張可能なBAPI TravelAgency.CreateFromDataを設計し、データベーステーブルSTRAVELAGに特定の拡張機能を提供します。
活動は次の5つのステップに分けることができます。
BAPIインターフェースでの拡張パラメーターの作成
BAPIに設定された要件に応じて、BAPI開発者は、BAPI汎用モジュールのインタフェースで、データインポート用の1つの拡張パラメータ( ExtensionIn)および/またはデータエクスポート用の1つの拡張パラメータ( ExtensionOut )を作成します。次のガイドラインに従う必要があります。
-
拡張パラメーターの命名規則は、インポート・パラメーターの拡張の場合はExtensionIn、エクスポート・パラメーターの拡張の場合はExtensionOutです。
-
拡張パラメータは、テーブルパラメータとして定義する必要があります。
-
拡張パラメータは、常に参照構造BAPIPAREXに基づいています。
-
BAPIで使用されるすべてのBAPIテーブル拡張と、それぞれのBAPIパラメータへのそれらの割り当ては、拡張パラメータのドキュメントに記述されている必要があります。
BAPIテーブル拡張の定義
このステップは、顧客が独自のフィールドと既存のフィールドで賢明に拡張できるBAPIの基礎となるSAPテーブルについて考える場合にのみ必要です。その場合は、トランザクションSE11を使用して、適切に拡張できるすべてのSAPテーブルのデータ構造としてBAPIテーブル拡張を登録します。BAPIテーブル拡張を作成するときは、次のガイドラインに従う必要があります。
-
BAPIテーブル拡張の命名規則はBAPI_TE_<table_name>です。構造名の長さの制限のためにこの命名規則に従うことができない場合は、テーブル拡張とBAPIのドキュメントでこれを明示的に指定する必要があります。
-
拡張するテーブルごとに1つのBAPIテーブル拡張を作成します。ただし、各テーブルは1つのテーブル拡張子しか持てないことに注意してください。したがって、複数のBAPIが同じテーブルを使用する場合、それらはテーブル拡張を共有する必要があります。
例外:
BAPIに同じデータベーステーブルを参照する2つ以上のパラメータがある場合、これらのBAPIパラメータごとに個別のBAPIテーブル拡張が作成されます。この場合の命名規則は、BAPI_TE<table_name><consecutive_number>です。この例では、テーブル拡張はBAPI_TE_STRAVELAG1、BAPI_TE_STRAVELAG2などと呼ばれます。
-
BAPIテーブル拡張の構造には、BAPIテーブル拡張が関連するテーブルの識別されたすべてのキー項目が含まれている必要があります。テーブル拡張には、キーフィールド以外のフィールドは含まれていません。
上記の例では、BAPIテーブル拡張はBAPI_TE_STRAVELAGと呼ばれ、キーAGENCYNUMを持っている必要があります。
BAPI汎用モジュール呼び出し
すべてのBAPI汎用モジュールは、以下の構造を持つことができます。
したがって、最も複雑なケースでは、BAPI開発者は、次の3つの場所で汎用モジュールの顧客拡張を許可する必要があります。
-
BAdI 1
このBAdIは、BAPIにExtensionInパラメーターがある場合にのみ必要です。このBAdIを使用すると、 ExtensionInパラメータを含め、BAPIに渡されるすべてのデータをチェックすることができます。BAdIには、次のパラメーターが必要です。
-
すべてのBAPIインポートパラメータとテーブルはインポートとして渡されます。特に、ExtensionInパラメーターはBAdIで使用可能である必要があります。
-
BAdIは、BAPIがBAdIで発生したエラーを報告できるように、エクスポートとしてReturnパラメーターを返す必要があります。
-
アプリケーションで必要な場合は、追加のパラメータをインポートまたはエクスポートとしてBAdIに渡すこともできます。
-
-
ExtensionInから読み取る
この手順は、顧客が独自のフィールドをSAPテーブルに追加した場合、または既存のフィールドをBAPIに含めた場合にのみ必要であり、開発者は、ExtensionInで渡された拡張機能が追加のテーブルフィールドに自動的に書き込まれるようにします。これは、対応するデータベーステーブルに顧客拡張を直接書き込むために顧客プログラミングが必要ないことを意味します。
特に、Create()、Add <sub-object>()、およびSaveReplica()BAPIの場合は、拡張フィールドのこの自動入力をプログラムする必要があります。
コンテナからのデータレコードの抽出は、次の2つのステップで実行されます。
-
コンテナ形式は、最初に、対応するBAPIテーブル拡張によって必要な一時構造に変換されます。値はコンテナーとBAPIテーブル拡張の両方で同じシーケンスを持っているため、これは単一のMOVEコマンドで実装できます。
-
次に、この構造を使用して、追加のデータベースフィールドにMOVE-CORRESPONDINGを入力します。これを行うには、対応するキー値を使用して、値が挿入されるデータベース内の行を決定する必要があります。
プロセス全体は、次のように疑似コーディングで記述できます。
したがって、 MOVE-CORRESPONDINGコマンドはこの場合にのみ機能するため、顧客がBAPIテーブル拡張に追加したフィールドが拡張テーブルのフィールドと正確に一致する場合にのみ、テーブル拡張を自動的に入力することができます。
具体的な例では、次のコーディングが行われます。
例外:
内部番号が割り当てられたCreate()BAPIの場合、キーの値はBAPIがいつ呼び出されたかがまだわからないため、コンテナに含めることはできません。結果として、BAPIで生成されたキー値は、コンテナが抽出された後にテーブル拡張に明示的に割り当てる必要があります。この場合、上記の例を次のように変更します。
-
-
BAdI 2
このBAdIは、 ExtensionInで渡されたデータをさらに処理したり、データベースを操作したりすることが顧客に許可されている場合に必要です。顧客がBAPIのエクスポートパラメータを拡張した場合は、2番目のBAdIを使用してExtensionOutパラメータを入力する必要があります。BAdIには、次のパラメーターが必要です。
-
BAdIには、 ExtenionInを含むすべてのBAPIインポートパラメータがインポートとして与えられます。BAPI汎用モジュールのテーブルパラメータは、BAdIのテーブルのままです。
-
BAdIは、 ExtensionOutとReturnパラメーターをエクスポートとして返す必要があります。
-
アプリケーションで必要な場合は、追加のパラメータをインポートまたはエクスポートとしてBAdIに渡すこともできます。
-
BAPI呼び出しの前にExtensionInを入力する
SAPが提供するコーディングがBAPIを呼び出す場合、開発者は、呼び出す前に、 ExtensionInパラメータに拡張機能を自動的に入力するかどうかを決定する必要があります。この場合、 ExtensionInの入力は明示的にプログラムする必要があります。ExtensionInを埋めるための具体的なデータフローは、「お客様によるアクション」で説明されています。
BAPI呼び出し後のExtensionOutの評価
SAPが提供するコーディングでBAPIが呼び出された場合、開発者はExtensionOutパラメーターが自動的に評価されるようにすることができます。ただし、このタイプの評価はまれなケースでのみ予測できることに注意してください。