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)隔 ...
随机推荐
- MapReduce Design Patterns(chapter 3 (part 1))(五)
Chapter 3. Filtering Patterns 本章的模式有一个共同点:不会改变原来的记录.这种模式是找到一个数据的子集,或者更小,例如取前十条,或者很大,例如结果去重.这种过滤器模式跟前 ...
- Mac OS 10.8 配置SVN服务器
Mac 10.8开始,不再默认安装svn,需要自行安装 如果您安装了XCode,会随同安装svn 更省事的办法: 1.安装homebrew,看看官网 http://brew.sh/index_zh-c ...
- npm ERR! path: '/usr/local/lib/node_modules/npm/node_modules/cacache/node_modules/ssri' }
在安装appium 或者升级npm的过程中会遇到这个问题.出错时的代码提示如下: npm ERR! path /usr/local/lib/node_modules/npm/node_modules/ ...
- LINQ入门与标准查询运算符
LINQ的体系结构 查询表达式的完整语法 一.查询表达式必须以from子句开头,以select 或group子句结束.中间可以使用where,orderby ,join,let和其他子句.具有“延迟计 ...
- 【转】用instruments来检验你的app
一篇非常好的关于instruments使用的文章! 连接在此
- python中基于descriptor的一些概念(下)
@python中基于descriptor的一些概念(下) 3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3 ...
- DOM操作怎样添加、移除、移动、复制。创建和查找节点?
(1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节 ...
- 【JavaScript】explode动画
这是一个js实现的粒子聚合文字或图片的动画特效 部分程序如下 n.container = n.container[0] || n.container; /*有且仅有一个container*/ var ...
- linq的左连接右连接内连接用法
1.左连接: var LeftJoin = from e in ListOfEmployees join d in ListOfDepartment on e.DeptID equals d.ID i ...
- No.1 - 制作一个简单的菜单动画效果---百度IFE
最近比较闲,在家做点训练 http://ife.baidu.com/course/detail/id/18?t=1527144851578#learn CSS3新特性,兼容性,兼容方法总结 https ...