1

在更新实际数据库表(使用 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:

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'.

为什么会有更新回滚?

4

1 回答 1

1

COMMIT WORK的 ABAP 文档说:

如果未指定添加 AND WAIT,则语句 COMMIT WORK 始终将 sy-subrc 设置为 0。

所以这意味着ROLLBACK WORK回滚更新不是你的(你可以通过删除这个无用的行来清理你的代码)。

剩下的唯一可能是:

  • 要么更新功能模块有错误并且不更新任何东西,
  • 或者更新功能模块抛出异常(RAISE)。

在第一种情况下,您可以通过激活“调试更新”来调试功能模块,在第二种情况下,您可能会通过运行事务代码看到更新功能模块的错误SM13

备注:在更新任务中显式删除锁并不常见,因为通常锁设置为范围“2”(默认值),它会在更新任务结束时自动释放锁。

于 2019-05-02T20:18:08.750 回答