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)隔 ...
随机推荐
- 掷骰子游戏窗体实现--Java初级小项目
掷骰子 **多线程&&观察者模式 题目要求:<掷骰子>窗体小游戏,在该游戏中,玩家初始拥有1000的金钱,每次输入押大还是押小,以及下注金额,随机3个骰子的点数,如果3个骰 ...
- C# 冒泡排序法、插入排序法、选择排序法
冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序. 以从小到大排序为例. 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, ...
- 初始python(二)
1. 列表list 1.1 切片# 定义一个list.list = [1, 2, 3, 4, 5] 从左往右读取字符(默认步长为 1 ).如:list[-2:-1] # 返回一个list数据类型,[ ...
- Eclipse+Maven 项目创建
★:jar包下载不了的话可能是镜像里没有这个版本,换个低版本的就行 ★:eclipse工程validating很慢,可以先关掉验证(一般对项目没什么影响) ★:eclipse工程pom.xml文件报错 ...
- + - ! function($) (), function 前面的符号意思
如果在function之前加上感叹号 (!) 会怎么样?比如下面的代码: !function(){alert('iifksp')}() // true 在控制台运行后得到的值时true, ...
- 深入浅出SharePoint2013——常用术语
CAS(Code Access Security)自定义代码访问安全性 Sandboxed solution 沙箱解决方案
- POJ 2528 Mayor's poster
主要是参考了这个博客 地址戳这儿 题目大意:n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) .求出最后还能看 ...
- 关于Class类的getResource().getPath()方法
程序中配置文件如果放置在classes文件夹,那么我们就可以使用Class类的getResource().getPath()方法获取文件路径. 例如: String path = DBUtil.cla ...
- Python条件判断if、for、while
if条件判断 if 条件判断: 逻辑操作...... ...... 判断字符串是否为空 if a.strip(): #表示字符串不为空 pass 判断是否为字典 d = dict(a=1) if is ...
- Java并发案例03---生产者消费者问题02
生产者消费者第二种情形 package com.maple.msb.one; public class ProducerConsumer { public static void main(Strin ...