在RDS Project中使用CDS时,使用OData功能的最佳实践,例如"验证"

2020-08-25 15:21发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我有一个Gateway项目,其中使用RDS公开基于CDS视图的实体。 要求之一是我提供一项服务来验证实体中的数据而不保存它。

我找不到使用函数导入/操作执行此操作的方法,因为我只能将简单类型用作导入参数,并且需要发送大量数据来进行验证。

过去,当在SEGW中不使用RDS时,我在实体属性中添加了一个虚拟的" operation"字段,以允许我在执行更新时将代码发送到后端,以停止保存。 现在,我正在使用CDS视图,这似乎不是一个好的解决方案,因为此伪字段现在将最终存储在数据库对象上。

有人能更好地执行这种"验证"功能吗?

谢谢

安德鲁

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我有一个Gateway项目,其中使用RDS公开基于CDS视图的实体。 要求之一是我提供一项服务来验证实体中的数据而不保存它。

我找不到使用函数导入/操作执行此操作的方法,因为我只能将简单类型用作导入参数,并且需要发送大量数据来进行验证。

过去,当在SEGW中不使用RDS时,我在实体属性中添加了一个虚拟的" operation"字段,以允许我在执行更新时将代码发送到后端,以停止保存。 现在,我正在使用CDS视图,这似乎不是一个好的解决方案,因为此伪字段现在将最终存储在数据库对象上。

有人能更好地执行这种"验证"功能吗?

谢谢

安德鲁

付费偷看设置
发送
7条回答
Alawn_Xu
1楼-- · 2020-08-25 15:48

嗨,安德鲁,

任何理由都必须是RDS吗? 您可以通过注释轻松地生成BOPF对象,可以将其扩展以添加验证和其他方法来处理传入的数据。

干杯,

Mike

# p#

您能否详细说明"我找不到使用函数导入/操作来执行此操作的方法,因为我只能将简单类型用作导入参数,并且我将需要发送大量数据来执行 验证。"?

SC_Yao
2楼-- · 2020-08-25 16:00

很抱歉让我感到困惑,什么是PM4F?

我不知道GW框架中的此类功能。

如果有的话,它是如此的简单会令人震惊……我说的是使用ObjectModel注释从CDS创建BOPF。 然后,您可以通过添加自己的类来进行验证来扩展此BOPF。 除了定义验证类之外,无需触摸现有的BOPF对象。 在该类中,您可以寻找这样的"模拟"字段并进行相应的处理。

对于验证类的代码,对于不熟悉该类的人可能会有些棘手,因为它使用了复杂的接口和动态数据 。 但是一旦掌握了基础知识,开发人员通常就可以选择并继续使用它。

jovirus
3楼-- · 2020-08-25 15:41

我的实体类型具有100多个属性,我需要发送所有这些值来执行 验证。 在函数导入中必须创建相同数量的导入参数似乎并不正确。 这也将导致可维护性问题,因为属性很容易在实体和函数导入之间不同步。

spaceman01
4楼-- · 2020-08-25 16:05

我想到的三种方式。

1。 根据我的理解,这是不可能的,如果您正在使用" Draft"为Fiori建立一个抽象编程模型,那么您所说的情况将像小菜一碟。 您将创建草稿条目(不是最终的),并在验证操作时,可以检查草稿条目数据并引发错误。

查看系统是否支持草稿功能。

https://blogs.sap.com/2019/01/09/abap-programming-model-for-sap-fiori-draft-based-for-non-guid-keys-more-more../

如果您没有草稿功能,我想到的另一种解决方法是在操作单击时手动触发深层创建方法,并像以前一样发送一个参数并将其检入 深层创建,我知道它将在表中创建一个属性,但是您必须忍受这一点。 如果要避免使用表格中的虚拟列,则有2种方法(认为这是过大的方法)

2。 使用虚拟字段

https://help.sap。 com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/7.51.7/zh-CN/a7fc007921d44263b09ccc092392b05f.html

3。 或创建一个动作验证,一次调用验证并发送深层数据(批处理)并将其捕获到变更集处理方法中,仅在进行验证动作的情况下进行验证,否则执行深层创建逻辑,方法是从deepcreate方法复制并放置

这是第二点,我假设这批Action和Deep Create数据将在变更集处理方法中组合在一起。

我建议您使用第一种方法,因为我认为这是最好的方法,它具有草稿数据并调用操作。

< p>谢谢

Mahesh

Aaron 3364
5楼-- · 2020-08-25 15:52

嗨,迈克

也许我问错了问题。 我知道可以从ABAP PM4F获得的功能,但我们仍将SEGW与RDS结合在一起,以免对现有开发人员造成太大的冲击:)

我认为问题确实是:我应该使用哪种OData机制发送要验证的实体数据,而不是将其保存到DB? 我是否应该只向CDS视图添加属性,以便可以从POST/PUT请求中的前端传递值,类似于在BAPI功能模块上使用SIMULATE参数?

谢谢

Andrew

6楼-- · 2020-08-25 16:07

好,但是按照我之前的回答,我不熟悉纯RDS + CDS中的任何"模拟"功能。

我发现,要达到最佳实践的努力变得非常艰巨,因此我投入了毛巾,只是扩展了已有的东西。 好处是所有东西都具有一致的(即使不是理想的)体系结构。

让我们看看是否还有其他人参与其中,如果有一个优雅的CDS模拟功能,我也会感兴趣。 通过Postman或类似工具进行集成测试可能会很有用。

一周热门 更多>