使用する
BAPIが使用されるトランザクションモデルによって、BAPIをプログラムする方法が決まります。
トランザクションおよび論理作業単位(LUW)
BAPIの開発に使用されるトランザクションモデルのコンテキスト内では、トランザクションは1つの処理ステップまたは1つの論理作業単位(LUW)を表します。SAP LUWは、データベースの更新を含むトランザクションに関連するすべてのステップです。
ACIDの原則はトランザクションモデルに適用されます。つまり、トランザクションは次のとおりです。
-
トミック_
トランザクションが呼び出されると、データベース操作は完全に実行されるか、まったく実行されません。データベース内のすべての関連データを変更する必要があるか、まったく変更しないでください。
-
一貫性のある
トランザクションが複数回呼び出される場合、各呼び出しの結果は同じである必要があります。結果に間接的に影響を与える可能性のあるデータはインポートされません。
-
私は孤独になりました
2つのトランザクション間に機能的な依存関係があってはならず、1つのトランザクションが別のトランザクションに影響を与えてはなりません。
-
耐久性
変更を元に戻すことはできず、トランザクションをキャンセルすることもできません。
プロパティ
トランザクション性:
BAPIは、トランザクションになるように実装する必要があります。つまり、ACIDの原則に準拠しています。BAPIトランザクションモデルでは、ユーザーが1つのLUWに複数のBAPIを組み合わせることができるようにする必要もあります。したがって、BAPIトランザクションモデルは、個々のBAPIがトランザクションである必要があり、1つのLUWに結合された複数のBAPIがACIDの原則に準拠する必要があることを意味します。
クライアントのトランザクション制御
BAPIトランザクションモデルは、ユーザーに明示的なトランザクション制御を提供する必要があります。したがって、複数のBAPIが一緒に呼び出された場合、呼び出し元はCOMMIT WORK(または場合によってはROLLBACK WORK)をいつ実行するかを自分で決定できます。これは、BAPI自体が(一般的に)COMMITWORKコマンドを実行できないことを意味します。
1つのLUWで複数のBAPIを組み合わせる場合は、次の制限が適用されます。
-
インスタンスが書き込みBAPIによって作成、変更、または削除された場合、読み取りBAPIは、COMMITWORKが実行された場合にのみ最新のデータにアクセスできます。
-
1つのLUW内の同じインスタンスで2つの書き込みアクセスを行うことはできません。たとえば、同じLUW内で最初にオブジェクトを作成してから変更することはできません。
ただし、LUW内に同じオブジェクトタイプの複数のインスタンスを作成できます。
サービスBAPIを介したトランザクション処理
トランザクションは、COMMITWORKコマンドまたはROLLBACKコマンドのいずれかを使用して完了します。BAPIトランザクションは、BAPIのBapiService.Transaction Commit()またはBapiService.TransactionRollback()を呼び出して終了する必要があります。
更新タスクの使用
データベースを変更する操作は、更新プロセスを通じて実行する必要があります。そうしないと、RFC呼び出し中に、チェックされていないデータベースCOMMITと不要なデータベースCOMMITの両方が実行されるリスクがあります。
さらに、BAPIの呼び出しは、BAPIから独立しているそれ以上のLUWをトリガーしてはなりません。このため、BAPIには次のコマンドを含めないでください。
-
コールトランザクション
-
レポートを送信
-
レポートを送信して返品する
コメント:
リリース3.1では、BAPI自体がCOMMIT WORKコマンドを実行し、BAPIはLUWまたはトランザクションと同じ目的を持っていました。リリース3.1のBAPIの他に、技術的な理由からCOMMITWORKコマンドを含む例外がいくつかあります。