SAPシステムでは、大量のデータを効率的に登録するために、バッチインプットとBAPIという、二つの主要な方法が利用される。
では、どちらを使うべきか?
結論から言えば、どちらの方法も正解であり、どちらも使用することになる。重要なのは、登録するデータの種類やシチュエーションに応じて、適切に使い分けることだ。
バッチインプットとBAPIの仕組み
バッチインプットの仕組み
バッチインプットとは、ユーザーの画面操作を記録し、その操作を自動的に再現することで、データを一括登録する方法である。たとえば、従業員の給与データを大量に更新する必要がある場合、バッチインプットを利用することで、一度の操作で数百、数千件のデータを効率的に更新できる。
要するに、RPAと同じのような仕組み、あるいは、Excelの「マクロレコーダー」と同じようなものといえば、Excel使いには解りやすいかもしれない。
ユーザが画面操作した記録は、ABAPなどのプログラムから再利用することで、データ登録を自動化できる。
BAPIの仕組み
BAPI(Business Application Programming Interface)は、SAPが提供する標準のプログラムインターフェースであり、ビジネスプロセスの自動化やデータのインターフェースとして利用される。
BAPIは、ABAPなどSAPシステム内部のプログラムから利用されるだけでなく、外部のシステムからも呼び出すことが可能である。そのため、システム間連携にも利用される。
BAPI/汎用モジュールの違いについて、詳しく解説した記事は以下。
バッチインプットのメリットとデメリット
バッチインプットのメリット
- 1. ハードルが低い
-
SAP GUIの画面操作を記録し、その操作を再現するだけでデータを登録できるため、SAPシステム特有のデータやプログラミングの知識がなくても利用できる。
- 2. SAPシステムの内部構造を知らなくてもよい
-
画面操作に基づくため、SAPシステムの詳細なデータ構造を理解する必要がない。
- 3. 標準トランザクションと同じ動き
-
標準トランザクションをバッチインプットした場合、標準トランザクションと同じ動作をする。このため、エラーメッセージも標準トランザクションと同じものが返される。このため、エラーが発生した時の解析が容易である。
- 4. BAPIが存在しない場合に有効
-
バッチインプットと同等の機能を持つSAP標準の汎用モジュールやBAPIは、概ね用意されている。しかし、中には標準トランザクションでしかデータ登録の手段がない機能も存在する。そのように適切なBAPIが存在しない場合でも、標準トランザクションを使用したバッチインプットによって、一括データ登録を行うことが可能である。
バッチインプットのデメリットと課題
- 1. メンテナンスに手間がかかる
-
入力するデータ項目が増えたり変更されたりするたびに、画面操作記録をやり直す必要がある。また、同じトランザクションコードであっても、バージョンアップによってデータ項目や画面遷移の順序が変更される場合があり、その際にも画面操作記録をやり直さなければならない。要するに、変更に対して弱く、メンテナンスに手間がかかる仕組みである。
- 2. 特定の操作ができない
-
画面操作を記録できない操作も存在する。たとえば、件数が不確定な多明細データの中から特定のデータを指定する操作や、スクロールの操作は、画面上で操作しても記録されない。このように画面操作が記録できない操作については、バッチインプットを使用することができない。
- 3. トランザクションコードの改廃の問題
-
S/4HANA移行後に廃止された「MBトランザクション」のように、トランザクションコードが改廃されると、それに依存しているバッチインプットも使用できなくなる。その場合、新しいトランザクションコードで画面操作の記録を最初からやり直さなければならない。
BAPIのメリットとデメリット
BAPIのメリット
- 1. 多明細データの登録が容易
-
一度に大量の明細データを処理する場合、BAPIは非常に効率的である。
バッチインプットで大量の明細データ登録しようとする場合、大量の明細データを登録する画面操作を記録する必要があるが、現実的に無理がある。BAPIはパラメータを指定するので、画面操作は不要である。 - 2. トランザクション制御が可能
-
バッチインプットとは異なり、OLTP(オンライントランザクション処理)の制御が可能である。このため、複雑なビジネスプロセスをプログラムに実装しやすい。
たとえば、複数の入出庫伝票を順に登録し、全ての入出庫が成功した場合のみ、「コミット」命令を発行してデータベースに書き込む(一つでも失敗すればロールバックする)、といった制御が可能である。 - 3. 処理が高速
-
バッチインプットと比べ、処理速度が速い。これは、バッチインプットがSAP GUIをベース、すなわち画面を制御しながらデータを操作するのに対し、BAPIには画面がなく、データの操作に処理を集中できるからである。
- 4. メンテナンスの手間が少ない
-
入力するデータ項目が増減する場合、バッチインプットでは画面操作の記録をやり直す手間が発生する。BAPIは入力するパラメータを変更するだけなので、メンテナンスの手間が少ない。
- 5. システム変更や環境の変化に強い
-
バッチインプットは、SAPシステムのバージョンアップによる画面デザイン変更の影響を受けやすい。また、バッチインプットは環境の影響を受けやすく、同じバージョンでもコンフィギュレーションを変えただけで動作しなくなる場合がある。対してBAPIは、変更の影響を受けることが少ない。このため、システムメンテナンスの負担が軽減される。
- 6. 標準トランザクションにはない柔軟性
-
標準トランザクションでは、データの登録と変更は別々の画面(T-CODE)に分かれているが、BAPIの中には、登録と変更を同時に行えるものがある。
BAPIのデメリット
- 1. 技術的ハードルが高い
-
BAPIの利用には、ABAPプログラムの知識が必要であり、プログラミングの初心者には扱いが難しい。
- 2. エラーハンドリングが複雑
-
BAPIは標準トランザクションとは異なるエラーメッセージを返すことがあり、そのためにデバッグやエラーハンドリングが難しくなることがある。
どちらを使うべきか? 向き・不向き
バッチインプットとBAPIは、データの種類によって、データ登録に向いている・向いていないがある。
バッチインプット
バッチインプットに向いているデータ登録
バッチインプットが可能かどうかは、SAP GUIを用いたトランザクションの画面操作を正確に記録できるかにかかっている。たとえば、スクロールの操作は記録できないため、件数が特定できない表(テーブル)形式のデータ入力域を持つ画面はバッチインプットには適していない。一方で、表形式のUIを持たず、一件一葉でデータを登録するような画面であれば、バッチインプットに適していると言える。
向いているデータ登録・画面 | 具体例 |
---|---|
「一件一葉」のような、データ項目の配置が比較的単純な画面 スクロールが不要な画面 表(テーブル)形式の入力域がない画面 | 品目マスタ登録(MM01) 銀行マスタ登録(FI01) 固定資産マスタ登録(AS01) 作業区登録(CR01) |
BAPIが存在しない、BAPIの機能が十分でない場合 | ビジネスパートナー登録/変更(BP) 購買情報マスタ(ME11) |
バッチインプットに向いていないデータ登録
以下はバッチインプットでは登録できない、または、登録はできるが、制約の多いトランザクションである。これらはBAPIの利用を検討した方がよい。
向いていないデータ登録・画面 | 具体例 |
---|---|
スクロールしないと操作できないような画面 表(テーブル)形式の入力域がある画面画面遷移や入力操作が複雑な画面 Enjoyトランザクション(上記の条件に当てはまるものが多数) | 受注伝票登録/変更(VA01/VA02) 購買依頼登録/変更(ME51N/ME52N) 購買発注登録/(ME21N/ME22N) 入出庫伝票登録(MIGO) ※上記はいずれもEnjoyトランザクション |
上の表以外にも、バッチインプットできない色々なトランザクションについて解説した記事は以下。
BAPI
BAPIに向いているデータ登録
BAPIは標準トランザクションに比べて機能面で優れているため、画面操作の記録が難しいトランザクションコードでも、BAPIを使用すればデータ登録が可能な場合が少なくない。特に、スクロール操作が必要な表(テーブル)形式のUIであっても、BAPIを用いることで問題なく登録することができる。
向いているデータ登録/画面 | 具体例 |
---|---|
多明細/表(テーブル)形式の入力域がある画面 | 受注伝票登録(BAPI_SALESORDER_CREATEFROMDAT2) 購買依頼登録(BAPI_PR_CREATE) 購買発注登録(BAPI_PO_CREATE1) 入出庫伝票登録(BAPI_GOODSMVT_CREATE) 会計伝票登録(BAPI_ACC_DOCUMENT_POST) |
新規登録と既存データの変更を同時に行いたい場合 | 品目マスタ登録/変更(BAPI_MATERIAL_SAVEDATA) BOMマスタ登録/変更(BAPI_MATERIAL_BOM_GROUP_CREATE) |
BAPIに向いていないデータ登録
BAPIの中には、機能が不完全で、標準トランザクションよりも登録可能なデータ項目が少ないものも存在する。たとえば、ビジネスパートナーを登録する BAPI_BUPA_CREATE_FROM_DATA がその一例である。このようなBAPIは実用性に欠けるため、バッチインプットを利用して登録した方がよい。
向いていないデータ登録 | 具体例 |
---|---|
BAPIの機能が十分でない画面 | ビジネスパートナー登録/変更(BAPI_BUPA_CREATE_FROM_DATA) |
S/4HANAならBAPIを優先する
S/4HANAなら、まずBAPIの使用を考えたほうがよい。それは、SAP社が推奨しているからだ。
バッチインプットは、SAPシステムが「R/3」と呼ばれていた時代から存在する、SAP GUIをベースとした古いデータ登録手法である。近年、S/4HANAへの移行に伴い、新しいUIである「Fiori」がサポートされるようになったが、Fioriはバッチインプットに対応していない。
Fioriの機能は着実に拡充されており、将来的にその重要性がさらに高まると予想されている。新しくリリースされる機能はFioriベースで提供されることが既定路線であり、SAP GUIをベースとした新機能がリリースされる可能性は極めて低い。また、既存のSAP GUIベースのトランザクションも、将来的にはFioriに置き換えられ、廃止される可能性がある。この場合、SAP GUIに依存するバッチインプットも使えなくなるリスクが高い。
一方、BAPIは標準のプログラミングインターフェースとして設計されており、外部システムとの連携にも広く使用されているため、SAPがそのサポートを継続しなくなることは考えにくい。この点については、SAP Note #216806(新しい転記トランザクションとバッチインプット)にも明記されており、同Noteでは「長期的には、対応するBAPIを使用することをお奨めします」と明記されている。
以上を踏まえると、S/4HANA環境においては、バッチインプットの使用はできるだけ控え、BAPIの活用を優先すべきである。適切なBAPIが存在しない場合に限り、バッチインプットの使用を検討するのが望ましいと言える。
BAPIを使いたいけれど、BAPIの探し方がわからない、という方は、以下の記事を参考にしてほしい。BAPIの探し方を何種類か紹介している。
BAPIを自分でいちいち探すのは面倒だ、という人は以下の記事を。トランザクションコードに相当するBAPIの一覧リストを載せてあるので、目当てのBAPIをすぐに見つけられるかもしれない。
バッチインプットとBAPIの違いのまとめ
バッチインプットとBAPIの、できる・できないを、以下の表にまとめておく。
バッチインプット | BAPI | |
---|---|---|
単純な画面へのデータ登録 | できる | できる |
スクロールが必要な画面 | できない | できる |
件数が特定できない表(テーブル)形式の入力域へのデータ登録 | できない | できる |
Enjoy画面 | できない | できる |
トランザクション制御 | できない | できる |
処理の速さ | BAPIよりも遅い | バッチインプットよりも速い |
技術的なハードルの高さ (ABAPなどプログラムの知識) | 低い | 高い |
単純なデータ登録はバッチインプット、多明細のデータ登録や、複雑なプロセス自動化にはBAPI、というのが一般的な大方針となるだろう。
大切なのは、データの種類やシチュエーションに応じて適切な方法を選択することである。プロジェクト方針に縛られ、手段を固定化してしまうのは避けるべきだ。状況に応じて柔軟に使い分けることで、業務効率を最大限に高めることが可能となる。
そのためにも、バッチインプットとBAPIの特徴や、それぞれの向き・不向きを正確に理解しておくことは重要である。本記事を参考に、バッチインプットとBAPIについての理解を深め、データ登録における最適なソリューションを確立してほしい。
コメント