作者:sap侠之大者
wait 还是不wait,这是个问题。
这是同步更新还是异步更新的问题;如果是只commit work,是异步更新,触发注册在当前SAP LUW中所有数据更新动作,数据更新动作由SAP的更新工作进程来执行,当前程序不等待更新动作结束,直接向下执行。
commit work and wait 是同步更新,此语句触发注册在当前SAP LUW所有数据更新动作,当前主程序等待SAP更新进程完成数据更新操作,然后向下执行。严格来说,commit work and wait也不是彻底的同步更新,此处等待数据更新操作完成,是指只等V1更新(优先级较高)完成,不等待其他优先级较低的V2更新等。
在调用BAPI更新标准对象时,除少数BAPI在函数内做commit之外,其他均需要调用一下function module完成提交
CALL
FUNCTION
'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT
=
'X' "
* IMPORTING
* RETURN =
.
单就更新来说,这个参数
WAIT
=
'X' 和commit work and wait 功能一样的。
可以使用以下模式的代码来看看wait 和不wait的更新效果
DO 2 TIMES.
IF SY
-
INDEX
=
1
.
LV_WAIT
=
'X'
.
ELSE
.
LV_WAIT
=
''
.
ENDIF
.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
POHEADER = GS_HEAD
POHEADERX = GS_HEADX
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =
IMPORTING
EXPPURCHASEORDER = LV_PO
TABLES
RETURN = GT_RETURN
POITEM = GT_ITEMS
POITEMX = GT_ITEMX
.
IF LV_PO IS NOT INITIAL .
CALL
FUNCTION
'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT
= LV_WAIT "'X'
* IMPORTING
* RETURN =
.
SELECT SINGLE * INTO WA
FROM EKKO
WHERE EBELN = LV_PO.
IF SY-SUBRC EQ 0.
WRITE: 'Oh Yes, the PO has been inserted into database now', /.
ELSE.
WRITE: 'Come on, The update process is running still', /.
ENDIF.
ENDIF.
CLEAR WA.
CLEAR LV_PO.
ENDDO.