• CALL TRANSACTION


    概要 

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

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

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

    作成方法説明

    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 

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

    じゃあ画面への入力項目はどうすんだ?って話になるが、それは後述の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などがある。

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

  • 相关阅读:
    SQL审核平台
    Redis单线程为什么快简单理解
    性能测试关注指标
    nmon
    pycharm安装教程
    MAVEN中央仓库地址大全
    MAVEN概念、安装与配置、配置文件
    linux在线模拟地址
    HTTP学习链接、书籍
    Java启动exe
  • 原文地址:https://www.cnblogs.com/yjyongil/p/10773990.html
Copyright © 2020-2023  润新知