アドオン開発をする時に大量データを一括でSAPにインプットしたい場合に活用する技術として、バッチインプットがあります。
SAPの場合、標準機能がブラックボックスになっているため、直接テーブル更新の処理を行ってしまうと、どこに影響が出てしまうのかが見えないため、通常は標準テーブルの更新は行わず、BAPIかバッチインプットを使用することになります。
BAPIが用意されている場合は、バージョンアップで画面構成等が変わったことによりバッチインプットが動かないというリスクを軽減するためにBAPIを使うべきですが、用意されていない場合にはバッチインプットで実現せざるをえません。
ですので、だいたいどのプロジェクトであっても数本はバッチインプットプログラムを作成することになります。
バッチインプットプログラムを作成する場合に注意しておきたい点について書いておきたいと思います。
更新モードは変数で指定しておく
バッチインプットを行う場合に、『CALL TRANSACTION』という命令を使うのですが、実行モードとして『MODE』オプションを指定します。
バッチインプットを①画面表示して呼び出すのか(A)、②非表示で呼び出すのか(N)、③エラーがあった場合だけ画面を表示するのか(E)を指定します。
通常は、画面は非表示でバッチインプットをするようにMODEに『N』を指定するのですが、この指定は変数で行っておきましょう、というのが1つ目の注意点です。
なぜかというと、ここを定数(CONSTANTS命令)で定義したもので指定してしまうと、エラーが発生したり、不具合があったり場合に、MODEを変えることができず、調査するのが難しくなるからです。
普段はエラーにはならないけれどイレギュラーなデータが連携されてきたためにバッチインプットでエラーになってしまうというのはよくあります。
この場合に、どういう形で該当の機能が呼び出されてエラーになっているのか原因を探りたいので、画面表示させたいのですが、定数やリテラルはデバッグでも変更ができないため、非常に調査しにくくなります。
ですので、可能であれば選択画面等で指定できる形にするか、最低でも変数にしておくようにしましょう。
Enjoy系の画面はバッチインプットしない
SAP標準機能の中で、比較的ユーザーフレンドリーに画面が作成されているものがあり、Enjoy画面と呼ばれたりしています。FI関連でいうと、FB50等の画面です。
このEnjoy系の機能はバッチインプットが正しく動かないケースが多いので、基本的にはバッチインプットしないようにしましょう。
ほとんどのケースで同様のデータを作成出来る非Enjoy画面が用意されているので、バッチインプット用としてはそちらを使うようにしましょう。
コメント