CALL TRANSACTION

概要 

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

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

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

做成方法説明

Step 1:T-code:SHDB.

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

Step 2:プログラム做成

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

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

 

AND SKIP FIRST SCREEN 

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

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

サンプル 

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

  

USING (iTAB) 

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

サンプル 

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

  

OPTIONS FROM (Option Structure) 

用法 

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

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

サンプル 

DATA :
  L_WA_CTU_PARAMS TYPE CTU_PARAMS.

L_WA_CTU_PARAMS-DISMODE = 'E'.

CALL TRANSACTION 'XK01' OPTION FROM L_WA_CTUPARAMS.

  

MODE (Mode) 

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

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

サンプル 

CALL TRANSACTION USING L_IT_BDCDATA
                  MODE 'N'.

  

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

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

選択畫面の隠しパラメータにしておくか(バリアントで隠す、或いは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などがある。

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

相關文章
相關標籤/搜索