点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
尊敬的专家们,我对SAP LUW有疑问,我一直对SAP LUW回滚机制感到困惑。
如ABAP文档所述,SAP LUW下不允许使用ROLLBACK WORK和COMMIT WORK语句,只有类型A的消息可以隐式回滚SAP LUW,我在下面进行了测试:
我的系统组件版本为:
我如下创建两个表YLUW1和YLUW2,并初始化值:
我写了一份报告来执行PERFORM ... ON COMMIT语句,这是SAP LUW的解决方案之一:
第一种情况,我使用类型为A的消息触发隐式回滚,并且可以正常工作,但是程序因错误而终止。
结果:
第二种情况,在sy-subrc检查下我什么都没写,表YLUW1成功插入,YLUW2插入失败。
结果:
最后一种情况,我引发了一个异常以触发隐式回滚,并且它可以正常工作,但是程序因错误而终止。
结果:
所有这些之后,我的问题是:当任何表插入/更新/删除错误时如何回退SAP LUW,并且我可以捕获SAP LUW错误然后进行处理。 > 1.jpg (47.0 kB)
请记住" 创建子例程已过时" ,而是创建更新功能模块。 通过更新功能模块,任何RAISE或MESSAGE RAISING或MESSAGE E/A错误将显示为弹出窗口" Express Information 从作者"用户..."收到的快速文档"更新已终止" 确定-选择(详细信息)-收件箱",因此它比短转储或中止弹出式菜单更具攻击性,并且您可以通过SM13处理错误,并可能恢复错误。
更新任务的原理是使 所有可能的检查,以避免在COMMIT WORK之前发生数据库更新错误。如果更新任务内部发生错误,则为时已晚,并且只能中止(希望由于以前的所有检查,这种情况很少见)。
这是伪代码:
更新功能模块的伪代码(可能的消息类型为" E"或" A"):
感谢伙计。
当您仅使用OPEN-SQL语句时,实际上并不需要整个LUW COMMIT/ROLLBACK,而只需要一些数据库 提交/回滚,因此请执行OPEN-SQL语句,当每条语句都正确时,请致电FM DB_COMMIT,以防出现任何错误,请致电DB_ROLLBACK。 ,请勿以交易程序的形式/方法进行更新,而是在"更新任务"中调用FM,然后执行"提交工作"。 在那些updayt中,FM会在出现SQL错误的情况下发出Abort'A'消息。
谢谢家伙。
在执行提交之前进行检查,从而触发 更新功能模块。
更新FM中不允许进行回滚工作。
嗨,
请仔细检查以下文档。
SAP LUW
数据库逻辑工作单元(LUW)
您可以使用TRY ..... ENDTRY来捕获异常
一周热门 更多>