CALL TRANSACTION
概要
SUBMITと違い、トランザクションコードで呼び出すのが特徴。
アドオンからの伝票照会やバッチインプットによるSAPへのデータ登録/更新処理にも利用される。
なお、呼び出された側から呼び出し元へ処理を戻す場合は、LEAVE PROGRAM命令を利用する。関連する命令LEAVE TO TRANSACTIONも参照のこと。
作成方法説明
Step 1:T-code:SHDB.




Step 2:プログラム作成















上記の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などがある。
CALL TRANSACTION的更多相关文章
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- InnoDB:Lock & Transaction
InnoDB 是一个支持事务的Engine,要保证事务ACID,必然会用到Lock.就像在Java编程一下,要保证数据的线程安全性,必然会用到Lock.了解Lock,Transaction可以帮助sq ...
- Basic Tutorials of Redis(8) -Transaction
Data play an important part in our project,how can we ensure correctness of the data and prevent the ...
- [解决方案]CREATE DATABASE statement not allowed within multi-statement transaction.
CREATE DATABASE statement not allowed within multi-statement transaction. 刚开始报这个错误的时候,我上度娘搜了一下. 别人是在 ...
- OLTP(on-line transaction processing)与OLAP(On-Line Analytical Processing)
OLTP与OLAP的介绍 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing).联机分析处理OLAP(On-Line Analytical ...
- SQLIte Transaction
基本概念 事务(Transaction)是指一个或多个更改数据库的扩展.例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事务.重要的是要控制事务以确保数据的完整 ...
- Transaction事务传播行为种类PROPAGATION_REQUIRED
事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 表1事务传播行为类型 事务传 ...
- Transaction (Process ID xxx) was deadlocked on lock
Transaction (Process ID 161) was deadlocked on lock | communication buffer resources with another pr ...
- 浅谈SQL Transaction在请求中断后的行锁表锁
最近在维护Web Service接口时,由于数据数据量达到千万级别,接口调用不时出现错误让人不胜烦恼,经过性能测试查出瓶颈在数据库数据处理上,可着实忙了一番.相信众多程序猿和DBA都会头痛性能的问题, ...
- [原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?
Server version: 5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...
随机推荐
- python新建以时间命名的目录
1.新建三级目录,第一级是去年的年份,第二级是去年的月,第三级为去年的日,在日的文件中写入今年的时分秒 import os import time import shutil def create_f ...
- 网络Socket编程(简易qq实现之C/S通信1)
1. 目标:实现两个用户之间的通信,利用的是简单的Socket知识以及简略界面 2. 界面:分为客户端与服务器端(如下图) 3. 基本功能:客户端先向服务器端发送一个消息,这样就可以让客户端与服务器端 ...
- 1、Dubbo-分布式系统定义
1.分布式基础理论 1.1).什么是分布式系统? <分布式系统原理与范型>定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distribu ...
- 如何寫一個自定義控件/vs2010生成Dll文件并引用dll(C#)
1.最簡單的例子 首先你先新建->項目->類庫.然後右鍵項目.添加一個用戶控件.設置其用戶控件繼承button. egg: namespace ClassLibrary1{ publ ...
- 5.3.1 RPC端点RpcEndpoint
ThreadSafeRpcEndpoint对消息的处理都是串行的,即前一条消息处理完才能接着处理下一条消息.ThreadSafeRpcEndpoint的继承体系如图5-3所示. 5.3.2 RPC端点 ...
- sofar:机器学习检测十题
http://sofasofa.io/forum_main_post.php?postid=1001084 http://sofasofa.io/forum_main_post.php?postid= ...
- PAT——1051. 复数乘法
复数可以写成(A + Bi)的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i2 = -1:也可以写成极坐标下的指数形式(R*e(Pi)),其中R是复数模,P是辐角,i是虚数单位,其等价于三角形 ...
- python-基础小游戏,人在 江湖飘,哪能不挨刀,我几刀砍死你
#人在 江湖飘,哪能不挨刀,我几刀砍死你 #规则:5赢4. 4赢3 .3赢2. 2赢1 . 1赢5 #提示:绝对值函数abs #假设:老王和老李 import random import time p ...
- vue+echarts实现可拖动节点的折现图(支持拖动方向和上下限的设置)
本篇文档主要是利用echarts实现可拖动节点的折现图,在echarts中找到了一个demo,传送门:https://echarts.baidu.com/examples/editor.html?c= ...
- 1015 德才论(sort、结构体vector)
题目: 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不 ...