我们在 [ 上节课
](http://mp.weixin.qq.com/s?__biz=MzI0MjQ2OTUxNw==&mid=2247484770&idx=1&sn=a0d27e210b5a6790f4a593b1f8414278&chksm=e97a9a80de0d1396fcf9ef73eac4b3701567fe958defaebf15177342ea92a675309afdd10949&scene=21#wechat_redirect)
中讲到了,我们在用BAPI修改采购申请时,虽然什么都是OK的,SAP的返回消息也是S ,但数据 就是没有变化。
原因是我们没有有用COMMIT 。
那么什么是COMMIT 呢(还有ROLLBACK)?
COMMIT 和 ROLLBACK 的原理:
比如取钱要更新两张底表:取款记录表和账户余额表
极端情况:
取款的时候,取款记录表更新OK ,但是由于断网或者其他情况,导致账户余额表没开始更新。
这样明细和余额就对不上的,这种情况,几遍概率即便0.00001,也不允许发生的。
因此设计时出现了一个叫做事务的概念,就是COMMIT 和 ROLLBACK
COMMIT 是两张表都更新OK ,同时进行确认动作。
ROLLBACK 是其中一张表NG,另外一张表就回滚撤销原来的更新。
SAP也应用了这个概念,因此你有时会发现,我们在调用BAPI 更新数据时,明明提示更新OK ,但是却看不到记录,是因为我们没有调用COMMIT
做最后一步的提交。
因此我们需要把BAPI 和 COMMIT 放到一个序列,BAPI 执行OK后调用COMMIT ,操作如下图
这样我们就可以在后台看到记录了。
当然了,并不是所有的BAPI 都用了COMMIT 的机制 。