在更新实际数据库表(使用SAP LUW)时,IN UPDATE TASK始终是在实际表中进行的回滚更改。
APPEND ls_emp TO lt_up_emp.
call function 'ZFM_UPDATE_EMPLOYEE' in update task
tables
lt_update = lt_up_emp.
COMMIT WORK.
if sy-subrc <> 0.
ROLLBACK WORK.
endif.
这是我的UPDATE FUNCTION MODULE,用于更新实际的DB表:
IF sy-subrc = 0.
""--- insert the data.
IF lt_insert[] IS NOT INITIAL.
INSERT ztadept FROM TABLE lt_insert.
IF sy-subrc <> 0.
RAISE not_inserted.
ENDIF.
ENDIF.
"-- delete....
IF lt_delete[] IS NOT INITIAL.
DELETE ztadept FROM TABLE lt_delete.
IF sy-subrc <> 0.
RAISE not_deleted.
ENDIF.
ENDIF.
"--Update.........
IF lt_update[] IS NOT INITIAL.
UPDATE ztadept FROM TABLE lt_update.
IF sy-subrc <> 0.
RAISE not_updated.
ENDIF.
ENDIF.
ENDIF.
CALL FUNCTION 'DEQUEUE_EZDEPT_LOC'.
为什么要回滚更新?
答案 0 :(得分:0)
COMMIT WORK的ABAP文档说:
如果未指定AND AND WAIT,则语句COMMIT WORK始终将sy-subrc设置为0。
因此,这意味着回退更新的不是您的ROLLBACK WORK
(并且您可以通过删除此无用的行来清理代码)。
剩下的唯一可能性是:
RAISE
)。在第一种情况下,您可以通过激活“调试更新”来调试功能模块,在第二种情况下,可以通过运行事务代码SM13
来查看更新功能模块的错误。
注释:在更新任务中显式删除锁并不常见,因为通常将锁设置为scope'2'(默认值),该锁会在更新任务结束时自动释放锁。