概要

SUBMITと違い、トランザクションコードで呼び出すのが特徴。

アドオンからの伝票照会やバッチインプットによるSAPへのデータ登録/更新処理にも利用される。

なお、呼び出された側から呼び出し元へ処理を戻す場合は、LEAVE PROGRAM命令を利用する。関連する命令LEAVE TO TRANSACTIONも参照のこと。

作成方法説明

Step 1:T-code:SHDB.

 
“新規記憶”クリックする。
CALL TRANSACTION-LMLPHP
 
レコード名とトランザクションコードを入力します。
CALL TRANSACTION-LMLPHP
 
 その後、”記憶開始”を押します。
 
記憶作業を始めます。
CALL TRANSACTION-LMLPHP
 
 記憶作業終了しましたら、以下のようなソースコードが作成されます。
CALL TRANSACTION-LMLPHP
 
 

Step 2:プログラム作成

 
 
プログラム明: ZTEST_VA02_DRIVER
CALL TRANSACTION-LMLPHP
 
 
CALL TRANSACTION-LMLPHP
 
 
CALL TRANSACTION-LMLPHP
 
 
CALL TRANSACTION-LMLPHP
 
 
アプリケーションクラス: ZCL_VA02_BDC
 
Attributes
CALL TRANSACTION-LMLPHP
 
 メソッド
CALL TRANSACTION-LMLPHP
 
 コンストラクタ
CALL TRANSACTION-LMLPHP
 
 
CALL TRANSACTION-LMLPHP
 
Set BDC data
CALL TRANSACTION-LMLPHP
 
 
CALL TRANSACTION-LMLPHP
 
CALL TRANSACTION-LMLPHP
 
 
CALL TRANSACTION-LMLPHP
 
  BDC dynpro
CALL TRANSACTION-LMLPHP
  BDC field
CALL TRANSACTION-LMLPHP
 
Call transaction
CALL TRANSACTION-LMLPHP

上記のBDC作成から、各オプションを説明します。

AND SKIP FIRST SCREEN

主に、そのトランザクションコードの第一画面をすっとばす場合に使用する。

じゃあ画面への入力項目はどうすんだ?って話になるが、それは後述のUSING (iTAB)オプションやSET PARAMETER命令を使ったりする。

サンプル

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

  

USING (iTAB)

画面の入力項目をiTABで渡す場合に使用する。
レコードにはプログラム名、Dynpro番号、項目名、設定する値が正しくセットされていなければならず、またその形式はBDCDATA型でなければならない。

サンプル

DATA :
L_IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA.
...
CALL TRANSACTION 'XD01' USING L_BDCDATA.

  

OPTIONS FROM (Option Structure)

用法

バッチインプットのシステム制御を構造で指定可能となる。
詳細は後述のMOODEオプションに譲るとして一つ制約があり、Structureの型がCTU_PARAMSの必要がある。

なお、省略ないし指定しなかった場合はフォアグラウンド処理、非同期更新、CATTプロシージャなし、COMMIT WORKで正常終了、バッチインプットモード(SY-BINPT='X')となる。

サンプル

DATA :
L_WA_CTU_PARAMS TYPE CTU_PARAMS. L_WA_CTU_PARAMS-DISMODE = 'E'. CALL TRANSACTION 'XK01' OPTION FROM L_WA_CTUPARAMS.

  

MODE (Mode)

バッチインプットのシステム制御が指定可能となり、ここでは画面への表示方法を司る。
設定する値の意味は下記の通り。これ以外の値を使用すると、確かダンプる。

  • A すべて画面表示。省略ないし指定しない場合はこれになる。
  • E エラーが起きた段階で画面が表示される。
  • N 何も表示されない。ブレークポイントが貼られていても止まらない。
  • P 何も表示されないが、ブレークポイントが貼られていたら止まる。

サンプル

CALL TRANSACTION USING L_IT_BDCDATA
MODE 'N'.

  

時々、このようにベタ書き或いは定数の直接指定をしている輩がいるが、絶対にやめて頂きたい。*1

トラブル発生時にトレースするということを全く考えていないために、このような書き方ができてしまうのかと思うが、その想像力が無さは見ているこちらまで情けなくなってくる。

選択画面の隠しパラメータにしておくか(バリアントで隠す、或いはNO-DISPLAYでも可)、CALL TRANSACTIONの直前で

デフォルトの照会モードをセット
L_MODE = C_MODE_DEFAULT.

CALL TRANSACTION USING L_IT_BDCDATA
MODE L_MODE.

  

このように表現するか、とにかくどちらでも構わない。
勿論この命令に限らないが、モノ作りをする時は不具合発生時のトラブルシュートや仕様変更が行いやすいように書くことが肝要。*2

新規開発をする際は、何の記述もないソースコードは真っ白なキャンバスのように感じられ、思うがままに書きたくなる。その気持ちはわかるが、プログラムは業務要件やシステム要件を表現するものであって、自慰行為の場ではない。

 

UPDATE (Update process)

バッチインプットのシステム制御が指定可能となり、ここではデータベースの更新方法を司る。
設定する値の意味は下記の通り。これ以外の値を使用すると、確かダンプる。

  • A
    非同期更新。省略ないし指定しなかった場合はこれ。
  • S
    同期更新
  • L
    ローカル更新。・・・ってなんぞ?

サンプル

CALL TRANSACTION USING L_IT_BDCDATA
UPDATE 'S'.

  

MESSAGE INTO (iTAB)

バッチインプットの処理結果を受け取るオプションで、実際に画面でたたいた通りのメッセージが格納されることとなる。
ここで受け渡しに使うiTABの型は、BDCMSGCOLLでなければならない。

実際には、処理後このiTABからTYPE Eのものだけ拾ってログを吐いたりする。

サンプル

CALL TRANSACTION USING L_IT_BDCDATA
MESSAGE INTO L_BDCMSGCOLL.

  

その他

 

権限チェックについて

ECC6の動作は不明だが、昔はこの命令からトランザクションコードを呼び出すタイミングで権限チェックが行われないという仕様があった。
そのため、権限オブジェクトS_TCODEに許可済みの値を設定することを条件に、この命令の前にAUTHORITY-CHECK命令や汎用モジュールAUTHORITY_CHECK_TCODEによる事前チェックが必要であったとのこと。

 

例外について

呼び出したトランザクションコードが分野メニューの場合はCALL_TRANSACTION_IS_MENU、ロックされている場合はCALL_TRANSACTION_LOCKED、存在しない場合はCALL_TRANSACTION_NOT_FOUND、再帰的な使い方をした場合はCALL_TRANSACTION_USING_NESTEDとなる。

関連する命令

その他CALL系の命令には、

CALL DIALOG、

CALL SELECTION-SCREEN、

CALL SUBSCREEN、

CALL FUNCTION、

CALL METHOD、

CALL SCREEN、

CALL TRANSACTIONなどがある。

中国語のサンプルプログラム

05-14 03:25