增强里面写commit相关语句,可能会造成严重问题。同样,rollback work也不能出现在增强中
举例:在我们的MIGO操作时,首先产生物料凭证,同时去生成会计凭证。在中间书写commit语句(比如常用的增强点:MB_MIGO_BADI),可能造成生成物料凭证时,commit到了数据库,而后续凭证因为某些问题,没有产生成功,此时就造成了整体业务的不一致。
提交数据库方式:
1、显示提交。是指使用commit work或者这条语句触发的提交(包含封装这条语句的function module,如DB_commit, bapi_transaction_commit等)。
2、隐式提交。如
1、对话屏幕结束时(跳转另一屏幕)。如call screen、CALL TRANSACTION <t_code> or SUBMIT <program>.
2、同步或者异步远程调用RFC.
CALL FUNCTION func DESTINATION dest
(在DESTINATION不省略的情况下,且dest取值又不为SPACE,则函数一定要是RFC函数才能采用此方式进行远程同步调用)
CALL FUNCTION func STARTING NEW TASK DESTINATION dest taskname
异步调用时不能有IMPORTING参数;函数一定要是RFC函数才能采用异步调用;只要有STARTING NEW TASK选项,即为异步调用;如果是异步调用同一目标端的RFC函数,则可以省略DESTINATION
但RFC事务调用不会触发隐式提交:
CALL FUNCTION func IN BACKGROUND TASK DESTINATION dest
(函数一定要为RFC函数,且要通过Commit Work语句显示提交后,才会去执行,否则不会执行;如果是同一目标端的RFC函数,则可以省略DESTINATION)
3、WAIT UNTIL log_exp [UP TO sec SECONDS]语句
因为 WAIT UP 语句有提交 数据库 的作用,所以在增强里面是禁止使用 WAIT UP 语句的,可以如下:WAIT UP TO 1 SECOND.
改为:
CALL FUNCTION 'ENQUE_SLEEP'
EXPORTING
seconds = 1
EXCEPTIONS
OTHERS = 2.
4、消息输出,如打印E,I,W类型的消息