二维码

[ddic] ABAP中触发COMMIT WORK 的几种情况

Twilight发表于 2015-04-23 23:26Twilight 最后回复于 2015-04-23 23:26 [复制链接] 6716 0

ABAP将数据字典中的数据commit work提交数据库分为2中:
  • 隐式提交(implicit commit)
  • 显式提交(explicit commit)

顾名思义,隐式是指没有写commit work语句也触发的数据库提交;显式是指使用commit work或者这条语句触发的提交(包含封装这条语句的function module,如DB_commit, bapi_transaction_commit等)。
在以下几种情况下,会触发隐式提交:
  • COMMIT WORK
  • ROLLBACK WORK
  • SUBMIT
  • CALL TRANSACTION
  • LEAVE TO TRANSACTION
  • CALL Dialog
  • CALL SCREEN

显式提交就没什么说的了,只有写上一句commit work的时候才提交。SAP总喜欢把问题复杂化。那么什么情况下用显式提交呢,有以下两种情况必须显式提交:
1、perform xxx on commit
只有等到显式的commit语句时,这个xxx才会被执行。
2、call function xxx in update task
同上我们知道,BAPI开头的那一堆function module大部分是需要显式调用commit才会提交数据库的,这是属于第1种情况,BAPI里面使用了大量的perform on commit。
再插一下,显式commit在增强程序中可要慎之又慎,它除了会把增强中你的代码中数据更新提交,也会把主程序中的数据更新提交,一不小心数据会被搞乱的。

BAPI_TRANSACTION_COMMIT有个WAIT参数,它类似于更新数据库语句的COMMIT和COMMIT AND WAIT。当不对WAIT参数赋值或赋为空时COMMIT会异步执行,否则会同步执行。这样当有两个业务需要连续执行的时候,第二个业务依赖与第一个业务,那么第一个业务BAPI在调用之后其BAPI_TRANSACTION_COMMIT的WAIT参数应赋为‘X’,否则便不能保证第一个业务在执行完之后调用第二个业务的BAPI或BDC,导致第二个业务不能够执行。

网上给出的解释都不权威,可能有很多错误,建议大家多F1,查看标准注解
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表