SAP / ABAP O / O中的一致数据库更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAP / ABAP O / O中的一致数据库更新相关的知识,希望对你有一定的参考价值。
我需要确保对Fiori后端调用的SAP表进行一致的编辑。我有多种情况,对后端的单个调用会在后端更改多个表。更改将写入传输请求。
我想实现无错误的稳定解决方案,因此,如果第一个表进行了很好的更改,但是第二个表失败了(重复条目,缺少授权),则拒绝全部更改。但是,似乎只有“在更新任务中执行FM”可用,这要求将每个后端数据库更改的所有逻辑都放入FM。
我是否缺少某些内容,或者SAP确实没有面向对象的方法来执行一致的数据库更新?
我唯一的解决方法是向上检查所有这些先决条件,现在不再那么好了。
@@ Florian:例如,后端调用是对文档的“批准”操作,它会更改:1)文档抬头表,字段状态从“工作流中”更改为其他内容。 2)批准表-当前批准者条目已更改。或正在添加新文档,其中1)添加了文档标题表条目2)添加了文档历史记录表条目。我不想调用功能模块,我只想使用类和类方法来实现解决方案。我之前使用的是其他ERP系统,并且有诸如“开始交易”,“提交交易”或“回滚交易”之类的语句。开始事务转换意味着您启动仅在“提交事务”上提交的LUW,并且如果您调用“回滚事务”,则该LUW的所有当前数据库更改都将被取消。我不知道为什么现代SAP除了旧的更新任务FM之外没有其他这些(或者仅仅是我没有注意到正确的处理方式)。
UPDATE任务中的CALL UPDATE FUNCTION MODULE是唯一的方法。它在Fiori跨国App中的工作方式,例如,>
- 数据库A:您做了一些业务逻辑,一切都很好。调用UPDATE任务到CUD数据库表A。
- 数据库B:您执行一些业务逻辑,关于授权有一些问题,您引发了异常(错误)。不调用CUD数据库表B的UPDATE TASK。
在处理完所有业务逻辑之后,如果引发任何异常,则SADL / Gateway层将捕获该异常,它将调用ROLLBACK WORK
,这意味着一切都已回滚。否则,如果没有错误,它将调用COMMIT WORK
,这意味着对所有表都具有一致的CUD,
btw,任何类似DUPLICATE ENTRY之类的异常都发生在UPDATE功能模块中,根据您的编码,您可以忽略它或提高MESSAGE E来中止DB操作。从我的角度来看,应在调用UPDATE Function Module之前避免此类问题。
以上是关于SAP / ABAP O / O中的一致数据库更新的主要内容,如果未能解决你的问题,请参考以下文章
sap abap中为啥table和该table的view有些数据会不同