SAP BAPIチュートリアル – ABAPでBAPIを作成する方法

⚡ スマートサマリー

BAPI SAP ABAPは、ビジネスオブジェクトをRFC対応で標準化した方法で呼び出すもので、外部アプリケーションからR/3のプロセスやデータにアクセスできるようにします。このページでは、標準化されたBAPI、SWO1での作成方法、テスト、リリース、そしてABAPからBAPIを呼び出す方法について説明します。

  • 🔌 コア定義: ビジネスアプリケーションプログラミングインターフェースは、外部システムに標準化されたアクセスを提供する安定した方法です。 SAP ビジネスプロセスとデータ。
  • 🗃️ ビジネスオブジェクトリポジトリ: BAPIは、BORにおいてビジネスオブジェクト型のメソッドとして定義され、RFC対応の関数モジュールとして実装されます。
  • 📚 標準化されたBAPI: GetList、GetDetail、Create、Change、Delete、およびMultipleの各バリアントは、再利用可能な読み取り、書き込み、および一括処理メソッドを提供します。
  • 🛠️ 作成: BAPIは、トランザクションSWO1において、RFC対応の関数モジュールを指すAPIメソッドを追加することによって構築されます。
  • テストとリリース: このメソッドは、Business Object BuilderまたはSWUDでテストされ、その後、関数モジュールをリリースしてメソッドのステータスを設定することでリリースされます。
  • 📞 BAPIの呼び出し: ABAPプログラムは関数モジュールを呼び出し、その後BAPI_TRANSACTION_COMMITを使用してコミットします。これは、BAPI自体がコミットを行わないためです。

BAPIの作成方法 SAP ABAP

BAPIとは何ですか?

ビジネス アプリケーション プログラミング インタフェース (BAPI) は、外部アプリケーションが R/3 システム内のビジネス プロセスおよびデータにアクセスできるようにする標準化されたプログラミング インタフェース (メソッド) です。

彼ら 安定した標準化されたメソッドを提供する R/3 システムと外部アプリケーション、レガシー システム、アドオンとの間のシームレスな統合を実現します。

BAPI は次のように定義されています。 BOR(ビジネスオブジェクトリポジトリ) 方法として SAP 特定のビジネス機能を実行するビジネスオブジェクトタイプ。これらは次のように実装されます。 RFC対応機能 モジュールであり、ABAP ワークベンチの関数ビルダーで作成されます。

いくつかのBAPIとメソッドは基本的な機能を提供し、ほとんどの用途に使用できます。 SAP ビジネスオブジェクト。これらは 標準化されたBAPI。

標準化された BAPI のリスト:

  • データ読み取り用の BAPI – GetList() 、 GetDetail() 、 GetStatus() 、 ExistenceCheck()
  • データを作成または変更するための BAPI - Create()、Change()、Delete()、および Undelete()
  • 大量処理用の BAPI -ChangeMultiple()、CreateMultiple()、DeleteMultiple()。

BAPIの利点

BAPIは、文書化されリリースされたインターフェースであるため、画面ベースの手法よりも好ましい。 SAP リリース間で安定性を維持します。これにより、いくつかの実用的な利点が得られます。

  • 安定したインターフェース: リリース済みのBAPIの署名はアップグレードによって変更されないため、呼び出し元のプログラムは引き続き動作します。
  • ビジネスロジックの再利用: BAPIはトランザクションと同じ検証を実行するため、BAPIを通じて追加されたデータは一貫性を保ちます。
  • リモートが有効になりました: BAPIはRFC対応の関数モジュールであるため、他のモジュールから呼び出すことができます。 SAP システム、 Java または.NETプログラム、またはWebサービス。
  • 画面に依存しない: バッチ入力記録とは異なり、BAPIは画面レイアウトが変更されても動作が中断しません。

概念とその利点が明確になったところで、次のセクションではBAPIを段階的に構築していきます。

BAPIの作成方法

ステップ1) トランザクション swo1 ([ツール] -> [ビジネス フレームワーク] -> [BAPI 開発] -> [ビジネス オブジェクト ビルダー]) に移動します。BAPI を作成する機能要件に従って、ビジネス オブジェクトを選択します。

ABAP で BAPI を作成する

ステップ2) ビジネス オブジェクトを変更モードで開きます。 次に、「ユーティリティ」->「API メソッド」->「メソッドの追加」を選択します。次に、汎用モジュールの名前を入力し、「続行」を選択します。

ABAP で BAPI を作成する

ステップ3) 次のダイアログボックスで、次の情報を指定する必要があります。

  • メソッド : メソッドの適切な名前を提案します。
  • テキスト : BAPI の説明を入力します。
  • ラジオボタン:ダイアログ、 Sync同期的、インスタンスに依存しない。BAPI は通常、同期的に実装されます。

ABAP で BAPI を作成する

ステップ4) メソッドを作成するには、次のダイアログ ボックスで [はい] を選択します。

ABAP で BAPI を作成する

ステップ5) プログラムが生成され、実行された後、作成したメソッドでプログラムを確認します。これにより、BAPI が作成されます。

ABAP で BAPI を作成する

BAPI のテスト

BAPI をテストするには、 テスト ビジネス オブジェクト ビルダー内のビジネス オブジェクトの個々のメソッド。 (または、トランザクション「SWUD」を使用してメソッドをテストできます)。

BAPI の解放と凍結

  • BAPI をリリースするには、まず汎用モジュールをリリースします (トランザクション se37 を使用)。
  • ビジネス オブジェクト ビルダーでメソッドのステータスを「リリース済み」に設定します (トランザクション SWo1 を使用して、[編集] -> [ステータスの変更] -> [リリース済み] を選択します)。

BAPI Explorer (トランザクション コード BAPI) を使用して、BAPI の 360 度ビューを表示することもできます。

ABAPでBAPIを呼び出す方法

BAPIは、RFC対応の汎用関数モジュールと同様に呼び出されます。重要なルールは、BAPIはCOMMIT WORKを発行しないため、呼び出し元はBAPI_TRANSACTION_COMMITで変更を確定するか、BAPI_TRANSACTION_ROLLBACKで変更を破棄する必要があるということです。以下の例では、標準BAPIを使用して販売注文を作成します。

DATA: ls_header  TYPE bapisdhd1,
      lt_items   TYPE STANDARD TABLE OF bapisditm,
      lt_return  TYPE STANDARD TABLE OF bapiret2,
      lv_order   TYPE vbeln.

* Fill the header and item structures, then call the BAPI
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
  EXPORTING
    order_header_in = ls_header
  IMPORTING
    salesdocument   = lv_order
  TABLES
    order_items_in  = lt_items
    return          = lt_return.

* A BAPI does not commit on its own - decide based on the return table
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
ENDIF.

⚠️ 警告: コミットする前に、必ずRETURNテーブルでタイプEまたはAのメッセージを確認してください。エラー発生後にBAPI_TRANSACTION_COMMITを呼び出すと、不完全なドキュメントが保存されてしまい、これはBAPIでよくある間違いの一つです。

BAPI、BDC、RFCの比較

BAPI、 BDC、そしてプレーンRFCはすべてデータを移動します SAPしかし、安定性や再利用する物質の種類が異なります。以下の表でそれらを比較します。

基準 BAPI BDC RFC(カスタム)
インタフェース ビジネスオブジェクトのリリース済みメソッド トランザクションの画面シーケンス 任意のカスタム機能モジュール
アップグレード時の安定性 リリース済みのBAPIについては保証されています 画面が変わると壊れる 開発者次第
リモート対応 はい いいえ はい
ビジネス検証 取引内容と全く同じです。 フル、実際の画面を実行 開発者がコードしたものだけ
ベスト 安定した統合とインターフェース BAPIが存在しない場所へのロード カスタムポイントツーポイントサービス

経験則としては、リリース済みのBAPIが存在する場合はそれを使用し、存在しない場合はBDCにフォールバックし、カスタムRFCは特注サービスのために予約しておくのが良いでしょう。

よくあるご質問

BAPI は更新を実行しますが、COMMIT WORK は呼び出し元に任せるため、複数の BAPI を 1 つの論理的な作業単位に組み合わせることができます。BAPI_TRANSACTION_COMMIT はそれらをまとめて保存し、ping データは一貫している。

BAPIRET2型のRETURNテーブルには、呼び出しのメッセージが格納されます。S型の行は成功、E型はエラー、W型は警告、A型は中止を表します。呼び出し元はこのテーブルを読み取って、コミットするかどうかを決定します。

トランザクションBAPIはBAPIエクスプローラを開き、すべてのビジネスオブジェクトとそのメソッド、ドキュメント、テストツールを一覧表示します。SE37でもBAPIが表示されます。これは、各BAPIがRFC対応の関数モジュールであるためです。

はい。ABAP開発ツールのAIアシスタントは、ビジネスオブジェクトに対して標準BAPIを提案し、パラメータマップを作成します。pingそして、コミットとエラー処理を追加します。開発者はフィールドを確認し、呼び出しをテストします。

はい。多くのODataサービスやAI連携機能は、内部でBAPIを呼び出しています。なぜなら、BAPIには既にビジネスロジックが組み込まれているからです。新しいレイヤーでは、安定したBAPIインターフェースの上にRESTアクセスと自然言語処理機能が追加されています。