このページでは、ABAPでバッチインプットプログラムを作成する方法を解説します。
バッチインプットとは、その名前の通り「バッチ処理(データの一括処理)」でSAPに大量のデータを投入することを言います。このページでは、「バッチインプットとは何か?」という前提から解説をはじめ、実際にバッチインプットを実装する際に必要となる「CALL TRANSACTION命令」の使い方まで解説します。
- バッチインプットとは?どのような処理をしている?
- BDCテーブルとは何か?
- バッチインプットの実装方法
- CALL TRANSACTION命令の使い方について
ABAPerであれば、絶対に知っておきたい必須知識ですので、是非最後までご覧ください。
バッチインプットとは?
バッチインプットとは「SAPのトランザクションを通して」データを一括で投入する処理のことを指します。
つまり、どういうことかと言うと、単にデータベースに直接データを書き込んでいくような世間一般のバッチ処理とは異なり、「SAPの画面からデータを入力する」ように処理が行われるのです。
バッチ ⇒ 大量のデータを一気に
インプット ⇒ SAPのトランザクションを通して(画面で入力するように)登録する
バッチインプットの利用目的/メリット
バッチインプットは、主に外部システムからのデータをSAPに登録する際に用いられることが中心です。または、SAPを新規導入する際に旧システムから新システムへ移行する際にも利用されるようです。
なぜ、わざわざデータベースを直接更新するのではなく、トランザクションを通して登録するかと言えば「SAPのチェック」をくぐらせることができるためです。
データベースに直接書き込む方式のバッチ処理だと、データに不整合があったとしてもそれを防ぐ術が用意されていないため、テーブル間の不整合(最悪の場合、対象のテーブルが壊れる)を引き起こす可能性があります。
バッチインプットの処理フロー
バッチインプットは、全体の大まかなフローを理解してしまえば決して難しい内容ではありません。
以下は、バッチインプットの大まかなフローを図で表わしたものです。
バッチインプットの処理フロー
① バッチインプットするデータをBDCテーブルに登録する(BDCテーブルについては後ほど解説)
② CALL TRANSACTION命令を利用してBDCテーブルの内容を各項目へインプットする
③ トランザクションを通してデータが登録される(1データごとに登録処理を行う)
バッチインプットは、BDCテーブルの内容・CALL TRANSACTION命令の使い方を理解してしまえば、誰でも利用可能です。ここからは、実際のコーディング方法を見ていきましょう。
構文ルール:CALL TRANSACTION命令
CALL TRANSACTION (トランザクションコード)
USING (BDCテーブル)
MODE (処理モード)
UPDATE (更新モード)
MESSAGES INTO (メッセージテーブル)
CALL TRANSACTION命令でバッチインプット処理を実行することが可能です。
構文ルール自体は、非常に簡単です。指定するオプションについては、以下の通りで巣。
トランザクションコード
CALL TRANSACTIONの直後には、動かしたいトランザクションコードを指定します。
仮に、指定したトランザクションコードが誤っていると処理不能例外が発生します。無難に、トランザクションコードを定数定義しておいて渡してあげるのが良いでしょう。
USING
USINGオプションには、使用するBDCテーブル名を指定します。
(BDCテーブルの作り方については、次章で解説します。)
MODE(処理モード)
MODEオプションには、バッチインプットの処理方法を指定します。以下に挙げるいずれかの表示モードを指定します。必須のオプションではなく、このオプションに何も指定しない場合は「A:画面表示」モードになります。
A:画面表示(イメージはRPAで順次処理していくような感じです)
E:エラー発生時のみ画面表示する
N:画面表示しない
バッチインプットの処理目的から考えると、Nを指定するのが一般的です。
UPDATE(更新モード)
UPDATEオプションでは、データの更新モードを指定します。
デフォルトでは、「A:非同期更新」モードとなります。
A:非同期更新
S:同期更新
L:ローカル更新
OPTIONS FROM
少し特殊です。こちらのOPTIONS FROMは上記で解説した「MODEオプション」と「UPDATE」オプションを包含したオプションです。
つまり、このオプションを利用する場合は「MODE」「UPDATE」オプションは不要です。
OPTIONS FROMの後には「CTU-PARAS」という構造のデータオブジェクトを指定します。CTU-PARASの各項目の中に「DISMODE」(MODEオプションに対応)「UPDATE」(UPDATEオプションに対応)などが含まれます。
MESSAGES INTO
このオプションには、バッチインプットの処理の結果(メッセージ内容)を登録するテーブルを指定します。
このメッセージテーブルのデータ型はSAP標準で用意されている「BDCMSGCOLL」型でなければなりません。
BDCテーブルの作り方(BDCDATA構造)
BDCテーブルは、SAP標準で用意されている「構造:BDCDATA」を利用して定義します。
バッチインプットで投入したいデータは、このテーブルの項目に沿って、事前に代入しておく必要があります。
※内部テーブルの定義方法については、以下の記事で詳しく解説しております。
構造「BDCDATA」の構成について
構造「BDCDATA」は、以下の項目から成り立ちます。
PROGRAM | 呼び出し先トランザクションのプログラム名称 |
DYNPRO | 画面番号 |
DYNBEGIN | 画面の開始マーカ:「X」を指定しておけばOK |
FNAM | 画面の項目名 |
FVAL | 項目に設定する値(実際に入力する値) |
実際にどのような値が入るのかを知りたい場合は、トランザクションコード「SHDB」から確認することができます。
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!