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

SAP/ABAP O/O中的一致数据库更新,abap,Abap,我需要确保为Fiori后端调用一致地编辑SAP表。 我有多种情况,对后端的一次调用会更改后端上的多个表。更改将写入传输请求 我希望实现无错误的稳定解决方案,这样,如果第一个表更改得很好,但第二个表失败(重复条目、缺少授权),那么整个更改都会被拒绝。 然而,似乎只有“在更新任务中执行FM”可用,这需要将每个后端db更改的所有逻辑都放入FM中 是我遗漏了什么,还是SAP真的没有面向对象的方法来执行一致的数据库更新 我唯一的解决办法就是向上检查所有这些先决条件,这已经不再那么好了 @Florian:后

我需要确保为Fiori后端调用一致地编辑SAP表。 我有多种情况,对后端的一次调用会更改后端上的多个表。更改将写入传输请求

我希望实现无错误的稳定解决方案,这样,如果第一个表更改得很好,但第二个表失败(重复条目、缺少授权),那么整个更改都会被拒绝。 然而,似乎只有“在更新任务中执行FM”可用,这需要将每个后端db更改的所有逻辑都放入FM中

是我遗漏了什么,还是SAP真的没有面向对象的方法来执行一致的数据库更新

我唯一的解决办法就是向上检查所有这些先决条件,这已经不再那么好了

@Florian:后端调用是例如对文档执行的“批准”操作,它会更改:1)文档标题表,字段状态从“工作流中”更改为其他状态。2) 审批表-当前审批人条目已更改。或者正在添加新文档,其中1)添加了文档标题表条目2)添加了文档历史记录表条目。
我不想调用函数模块,我只想使用类和类方法实现解决方案。我之前使用过其他ERP系统,其中有“启动事务”、“提交事务”或“回滚事务”等语句。Start transaction意味着您启动一个LUW,该LUW仅在“提交事务”上提交,如果您调用“回滚事务”,则该LUW的所有当前数据库更改都将被取消。我想知道为什么现代SAP除了旧的更新任务FM之外没有这些功能(或者只是我没有注意到正确的处理方法)。

在更新任务中调用更新功能模块是唯一的方法。例如,它在Fiori跨国应用程序中的工作原理

  • 数据库A:你做一些业务逻辑,一切都很好。调用CUD数据库表A的更新任务
  • 数据库B:您执行了一些业务逻辑,在授权方面出现了一些问题,您引发了异常(错误)。未调用CUD数据库表B的更新任务 在处理完所有业务逻辑后,如果出现异常,SADL/网关层将捕获异常,它将调用
    回滚工作
    ,这意味着一切都是回滚的。否则,如果没有错误,它将调用
    COMMIT WORK
    ,这意味着所有表的CUD一致

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

    你能详细说明一下吗?你的“Fiori后端呼叫”是什么?对ABAP服务器的OData请求?什么样的要求?一篇深奥的文章创建了一个包含所有表的OData实体?还是向多个OData实体发布更改的批处理请求?为什么需要将更改写入传输请求?您是否正在构建一个UI来更改开发/测试系统中需要稍后传输的自定义内容?什么是“FM”-功能模块?为什么您需要调用函数模块来更新数据库表,而不是简单的MODIFY语句?您说的是“容易出错的解决方案”,这意味着一种容易产生错误的解决方案,所以您的意思显然相反。更新任务仅适用于特殊情况(更新将在几个SAP GUI屏幕之后执行,或者异步执行更新以更快地释放工作流程,从而获得更好的总体性能)。相反,您可以使用事务的经典概念(数据库LUW),通过使用提交工作和回滚工作。不