バッチインプット(BDC)は、SAP GUIの画面へ入力する操作をABAPから再現する方法です。既存トランザクションを使った登録・変更に利用できますが、画面の項目や遷移が変わると動かなくなることがあります。新規開発では、利用可能なBAPIや公開APIを先に確認し、画面操作が必要な場合にBDCを検討します。
主な二つの方式
| 方式 | 特徴 | 確認先 |
|---|---|---|
CALL |
プログラムから対象Tコードを呼び出し、その場で結果を受け取る | 戻り値、メッセージ表、登録された伝票 |
| セッション方式 | 入力データをセッションに蓄え、後で処理する | SM35の処理結果・ログ |
実装前の確認
- 対象トランザクションを手作業で一件登録し、必須項目と画面遷移を確認します。
- SHDBなどで操作を記録し、画面プログラム、画面番号、項目名、OKコードを確認します。
BDCDATAを伝票ごとに初期化して組み立て、テストデータを使って前面表示で確認します。- エラー・警告・成功メッセージを保存し、伝票番号や登録結果を実データで検証します。
CALL TRANSACTIONの例
DATA lt_bdc TYPE TABLE OF bdcdata.
DATA lt_msg TYPE TABLE OF bdcmsgcoll.
DATA ls_opt TYPE ctu_params.
" lt_bdc に画面開始行と項目値を設定する
ls_opt-dismode = 'E'. " エラー時に画面を表示
ls_opt-updmode = 'S'. " 同期更新
CALL TRANSACTION '対象Tコード'
USING lt_bdc
OPTIONS FROM ls_opt
MESSAGES INTO lt_msg.
IF sy-subrc <> 0.
" lt_msg を記録し、対象伝票の登録結果も確認する
ENDIF.
表示モードはA(全画面)、E(エラー時)、N(非表示)を状況に応じて選びます。ジョブで実行する場合は対話画面を前提にせず、エラーをログに残して再処理可能にします。成功メッセージだけで完了とみなさず、実際に作成された伝票と更新結果を確認してください。
壊れやすいポイント
- GUI画面の変更、ユーザー設定、言語、ポップアップの有無で記録時と遷移が異なる。
- 明細行数やスクロール位置が変わり、画面上の項目位置がずれる。
- 再実行時に二重登録する。入力データに一意キーを付け、処理済み判定を設ける。
- 権限不足やロック競合を、単なる入力エラーとして扱ってしまう。
参考・関連記事
- レポートとDynproプログラム:画面処理の仕組み
- SY-BATCHの使い方:ジョブ実行時の分岐
- ST22・SM37でエラーを調べる方法:失敗時の調査
- ABAPプログラミングの基本:再実行と例外処理の考え方