参考案例:CO01中我们需要在执行过程中有个写表的操作,但是不能直接commit work,当然也不能rollback work,所以此时我们需要重新开启一个进场去执行,包括wait up 也有提交的操作,这几种语法在增强中还是得慎用。
CO01报错:
此时我们可以通过另外一种办法去实现:
DATA:lv_task TYPE c VALUE 'COMMIT'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' STARTING NEW TASK lv_task
EXPORTING
wait = 'X'.
如果是wait up语法,可以改为:
CALL FUNCTION 'ENQUE_SLEEP'
EXPORTING
seconds = 1
EXCEPTIONS
OTHERS = 2.
提交数据库方式: 1、显示提交。是指使用commit work或者这条语句触发的提交(包含封装这条语句的function
module,如DB_commit, bapi_transaction_commit等)。2、隐式提交。如
1、对话屏幕结束时(跳转另一屏幕)。如call screen、CALL TRANSACTION
or SUBMIT
.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.改为:
- 1
CALL FUNCTION ‘ENQUE_SLEEP’
EXPORTING seconds = 1 EXCEPTIONS OTHERS = 2.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4、消息输出,如打印E,I,W类型的消息