乐趣区

关于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 并执行隐式数据库提交。

退出移动版