SAP|SAP ABAP COMMIT WORK 关键字的一些使用要点

【SAP|SAP ABAP COMMIT WORK 关键字的一些使用要点】ABAP 语句 COMMIT WORK 提交在 SAP LUW 期间完成的更改。它不能与 DB-Commit 混淆。
首先明确什么是 SAP LUW(Logic Unit of Work)?
下文所说的工作流程工作进程,都是指 SAP ABAP 培训教材里的 Work Process.
关于什么是 ABAP Work Process,请参阅我的文章:

  • 一个 13 年 ABAP 老兵的建议:了解这些基础知识,对 ABAP 开发有百利而无一害
  • ABAP 标准培训教程 BC400 学习笔记之一:ABAP 服务器的架构和一个典型的 ABAP 程序结构介绍
SAP LUW 是指 ABAP 程序中的逻辑单元,其行为类似于数据库 LUW;换句话说,一个 SAP LUW 在结束时会产生一致的数据库状态。虽然 SAP LUW 可能会跨越多个工作流程更改,但数据库更改是在单个数据库 LUW 中执行的。这是通过 bundling 完成的。在这种情况下,不会直接执行所需的数据库更改。相反,它们是在各种工作流程更改过程中收集的,业务流程需要修改或者创建,删除的数据,保存到 ABAP 内表里,然后在 SAP LUW 的最终工作流程中,作为数据库中的 bundling 任务执行。这意味着只有传入到 ABAP update function module 的内表数据施加到数据库的更改,受数据库的 LUW 机制的约束。
ABAP 语言提供了几种在工作流程中捆绑数据库更改的机制。最重要的是捆绑在更新功能模块,即所谓的 UPDATE FUNCTION MODULE 中。您可以通过在 UPDATE TASK 中调用这些功能模块来收集您的变更请求, 真正的数据库层面的修改,发生在 COMMIT WORK 语句调用之后。
一个 AS ABAP 具有一个或多个应用程序服务器,而这些应用程序服务器又具有工作流程。当前处于活动状态的每个 ABAP 程序都需要一个工作进程,并且每个工作进程都以用户身份登录到数据库系统。一个工作进程不能并行执行多个数据库 LUW,相反,多个工作进程不能影响单个数据库 LUW。然而,一个 ABAP 程序在其整个运行过程中经常与多个工作进程相关联。在程序处于非活动状态的所有时间(例如,因为它正在等待用户进行输入,或者它作为客户端正在等待服务器上的任务完成),它会释放当前被占用的工作进程,避免其长时间被占用但却不执行任何任务。因此,当其对程序的责任发生变化时,工作进程必须始终结束 LUW 并执行隐式数据库提交。

    推荐阅读