使用する
BAPI Create()は、SAPビジネスオブジェクトタイプのインスタンスを1つ作成します。同様に、BAPI CreateMultiple()は、ビジネスオブジェクトタイプの複数のインスタンスを同時に作成します。
問題のビジネスオブジェクトタイプに対してCreate()というワークフローメソッドがすでに存在する場合は、BAPIにCreateFromData()という名前を使用できます。Create()は、このBAPIの推奨名です。
BAPIのCreate()およびCreateMultiple()は、クラスメソッド(インスタンスに依存しない)です。
Create() BAPIごとに、作成されたビジネスオブジェクトインスタンスを削除またはキャンセルできるメソッドを提供する必要があります。これを行うには、ビジネスアプリケーションの慣例に応じて、以下のBAPIのいずれかを実装する必要があります。
-
Delete()、データベースからビジネスオブジェクトインスタンスを削除します
-
Cancel()、これはビジネスオブジェクトインスタンスをキャンセルします
特徴
BAPIインターフェース
パラメータのインポート
インポートパラメータを定義するときは、次の点に注意する必要があります。
-
汎用モジュールのBAPIのインポートパラメータには、インスタンスを一意に識別するために必要なデータが含まれています。すべてのビジネスキー情報を提供できますが、それを導き出すことができなければなりません。これらはクラスメソッドであるため、BORキー項目を汎用モジュールまたはBAPIのパラメータにすることはできません。
-
BAPIには、テスト実行を実行できるようにするTestRunパラメーターも必要です。このパラメーターに値「X」が含まれている場合、BAPIは正常に実行されますが、結果は更新タスクに書き込まれません。このようにして、BAPI BapiService.TransactionCommitの実行後、すべての結果(たとえば、アプリケーションログなど)を評価できますが、BAPIはデータベースを変更していません。
-
変更を必要とせずに顧客がBAPIのインポートパラメータを拡張できるようにする場合は、パラメータExtensionInを作成する必要があります。
-
変更パラメーターを作成して、インスタンスを作成するための値を識別し、BAPIが呼び出されたときにこれらの値を初期値と区別することができます。変更に関連するフィールドにフラグを付けて識別することをお勧めします。
パラメータのエクスポート
エクスポートパラメータを定義するときは、次の点に注意する必要があります。
-
オブジェクトハンドルを呼び出し側プログラムで使用できるようにするには、汎用モジュールのエクスポートパラメータでキー項目全体を返す必要があります。このために、オブジェクトタイプのキー項目ごとに、汎用モジュールで同じ名前のエクスポートパラメータを登録します。次に、このパラメーターに適切な値が入力されます。これらのキーパラメータは、BORのオブジェクトタイプの対応するキーフィールドと同じ名前である必要があります。
-
たとえば、一般的に作成された情報が返されるエクスポートパラメータをさらに作成することもできます。
-
得意先が変更を必要とせずにBAPIのエクスポートパラメータを拡張できるようにする場合は、パラメータExtensionOutを作成する必要があります。拡張パラメータと、顧客拡張の概念をCreate() BAPIに実装する方法に関する推奨事項については、 BAPIに対する顧客拡張を参照してください。
-
メソッドコールバックからのメッセージを呼び出し元のプログラムに報告するには、エクスポートパラメータReturnを作成する必要があります。同期的または非同期的に呼び出されるCreate() BAPIの結果が広範囲に監視されるようにするには、 Returnパラメーターを入力するための以下の規則に従う必要があります。
-
Create() BAPIが正常に実行される場合、つまりインスタンスが作成される場合は、次の標準化されたT100メッセージをReturnパラメーターで渡す必要があります。
次の点に注意する必要があります。
-
フィールドMESSAGE_V1には、 SalesOrderなどの関連するビジネスオブジェクトタイプの外部名が含まれています。
-
作成されたオブジェクトに後続の呼び出しでアクセスできるキーは、フィールドMESSAGE_V2に返されます。これは、外部番号割当を使用する場合に渡されるデータに含まれる外部キー、または内部番号割当を使用する場合に新しく作成される内部キーです。オブジェクトに複数のキーフィールドがある場合、これらのキーフィールドの値をMESSAGE_V2で連結する必要があります。連結では、BORでキーフィールドが定義されている順序を順守する必要があります。さらに、各キーフィールドには最大長を使用する必要があります。これには、パディングの使用が必要になる場合があります。
-
外部キーは、識別を容易にするためにMESSAGE_V4で返されます。これは、オブジェクトが非SAPシステムに保存されるキー、たとえば外部品目コードである可能性があります。このフィールドへの入力は、オブジェクトを識別するためだけに使用され、オブジェクトにアクセスするためには使用されません。対応するキーも複数のフィールドで構成されている場合は、これらも同様に連結する必要があります。
-
-
Create() BAPIの実行中にエラーが発生した場合、アプリケーション固有のエラーメッセージに加えて、次の標準化されたT100メッセージをReturnパラメーターで渡す必要があります。
正常な実行との唯一の対照は、フィールドMESSAGE_V2およびMESSAGE_V3を空白に渡す必要があることです。外部キーは、識別を容易にするためにMESSAGE_V4で返されます。
-
-
標準化されたメッセージに加えて、 Returnパラメーターにさらにメッセージを書き込むことができます。
-
エラーが発生した場合、エラーを詳細に説明するメッセージが返されることが特に重要です。したがって、構造BAPIRET2のすべての項目を使用する必要があります。特に、 Parameter、 Row、およびFieldの各フィールドに入力する必要があります。
BAPIコーディング
1つのLUW内の複数のインスタンス
Create() BAPIは、同じCreate()メソッドの複数の呼び出しを1つのLUW内で開始できるようにし、その結果、同じオブジェクトタイプの複数のインスタンスを1つのLUW内に作成できるように実装する必要があります。
一時ストレージの使用
同じオブジェクトタイプの複数のインスタンスを1つのLUW内に作成できるようにし、高いパフォーマンスを実現するには、 Create() BAPIの結果を、実際にデータベースに書き込まれるまで更新タスクにバンドルする必要があります。これは、アプリケーションロジックが正常に実行された後、BAPIが更新モジュール「INUPDATETASK」を呼び出すことによって実現されます。これらの更新モジュールは、個々のデータベースアクセスを開始しません。代わりに、実行される各操作は機能グループメモリに一時的に保存され、FORMルーチン「ONCOMMIT」で間接的に呼び出されます。したがって、このFORMルーチンは1回だけ実行され、ARRAY挿入などの手法を使用して、1回のデータベースアクセスでのみ更新を実行します。
設定のカスタマイズとの非互換性の回避
カスタマイジングで設定された特定の値が、BAPIインターフェースで異なって表示される可能性があります。これらの値は、 Create() BAPIで上書きできません。
カスタマイジング設定との非互換性を回避するには、次の方法でCreate() BAPIを実装する必要があります。
-
BAPIはすべてのフィールドを転送し、それらをカスタマイジング設定と照合する必要があります。カスタマイジング設定が項目を書き込み禁止している場合、この項目のデータをBAPIインタフェースのデータで上書きすることはできません。
-
非互換性が発生するたびに、呼び出し側プログラムのReturnパラメーターでエラーメッセージを返す必要があります。たとえば、「設定をカスタマイズすると、フィールド「MyAsset-AssetName」を変更できません」。
-
カスタマイジングによってデフォルト値が割り当てられ、したがって書き込み保護されているすべてのフィールドを文書化する必要があります。
外部キーの割り当て
外部キーが割り当てられたCreate() BAPIの場合、呼び出し元は、作成されるオブジェクトインスタンス(たとえば、伝票番号)にキー(ID)を転送します。
重要:外部キーのパラメーターは、BORのオブジェクトタイプキーと同じ名前であってはなりません。その場合、BAPIはインスタンスメソッドとして誤って識別されます。BAPIで生成されたキーも、エクスポートパラメータとして定義する必要があります。