SAP/ABAP O/O 中的一致数据库更新

Consistent database update in SAP/ABAP O/O

我需要确保对 SAP tables 进行一致的 Fiori 后端调用编辑。 我有多种情况,其中对后端的单次调用在后端更改了多个 table。更改已写入传输请求。

我想实施 error-free stable 解决方案,这样如果第一个 table 可以正常更改,但第二个 table 失败(重复输入,缺少授权) , 整个更改都被拒绝了。 但是,好像只有"perform FM in update task"可用,这就需要把每一个后端db变化的逻辑都放到一个FM中。

我是不是遗漏了什么,或者 SAP 真的没有Object 面向的方式来执行一致的数据库更新?

我唯一的解决方法是向上检查所有这些先决条件,这不再那么好。

@Florian:后端调用例如文档上的操作"Approve",它的变化是:1)文档headertable,字段状态从"in workflow"变为别的东西。 2) 批准 table - 当前批准人条目已更改。或者它正在添加一个新文档,其中 1) 添加了文档 header table 条目 2) 添加了文档历史记录 table 条目。 我不想调用功能模块,我只想使用 classes 和 class 方法来实现解决方案。我之前使用过其他 ERP 系统,并且有像 "Start transaction"、"Commit transaction" 或 "Rollback transaction" 这样的语句。 Start transcation 意味着您启动一个 LUW,它仅在 "Commit transaction" 上提交,如果您调用 "Rollback transaction",则该 LUW 的所有当前数据库更改都将被取消。我想知道为什么现代 SAP 有 none 个这些除了旧的更新任务 FM(或者只是我没有注意到处理这个的正确方法)。

在UPDATE TASK中调用UPDATE FUNCTION MODULE是唯一的方法。在Fiori跨国App中是如何运作的,例如

  1. 数据库A:你做一些业务逻辑,一切都很好。调用更新任务到 CUD 数据库 table A.
  2. 数据库B:你做了一些业务逻辑,有一些关于授权的问题,你提出了异常(错误)。更新任务到 CUD 数据库 table B 未被调用。

所有业务逻辑处理完毕后,万一出现异常,SADL/Gateway层会捕获异常,调用ROLLBACK WORK,回滚。否则,如果没有错误,它将调用 COMMIT WORK,这意味着对所有 table 的一致 CUD,

顺便说一句,更新功能模块中会发生任何异常,如重复输入,根据您的编码,您可以忽略它或引发 MESSAGE E 以中止数据库操作。 在我看来,在调用 UPDATE 函数模块之前应该避免此类问题。