概要 

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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

作成方法説明

Step 1:T-code:SHDB.

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

Step 2:プログラム作成

    プログラム明: ZTEST_VA02_DRIVER CALL TRANSACTION 随笔 第5张     CALL TRANSACTION 随笔 第6张     CALL TRANSACTION 随笔 第7张     CALL TRANSACTION 随笔 第8张     アプリケーションクラス: ZCL_VA02_BDC   Attributes CALL TRANSACTION 随笔 第9张    メソッド CALL TRANSACTION 随笔 第10张    コンストラクタ CALL TRANSACTION 随笔 第11张     CALL TRANSACTION 随笔 第12张   Set BDC data CALL TRANSACTION 随笔 第13张     CALL TRANSACTION 随笔 第14张   CALL TRANSACTION 随笔 第15张     CALL TRANSACTION 随笔 第16张     BDC dynpro CALL TRANSACTION 随笔 第17张   BDC field CALL TRANSACTION 随笔 第18张   Call transaction CALL TRANSACTION 随笔 第19张

上記の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などがある。

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

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄