-1

我想编写一个自定义的 Fiori,使用 oData 服务从我的 SAP 系统中调用数据。

使用 SEGW 事务,我已经设置了一个服务来返回基于 VBAK 表的平面结构。使用这些知识,我可以为每种对象类型开发一个 EntitySet 并在需要时调用它们。但是,我想将我的数据库调用减少到一个语句。应立即提供所有相关数据。

现在,我问自己:如何在一次调用中提供嵌套数据?可以说,对于 VBAK 中的每个条目,我想要一个嵌套的相关 VBAP 条目数组。

我的问题是:

  • 如何在 DDIC 中定义描述的数据模型?
  • 如何在 SEGW 中设置描述的数据模型?
  • 如何在我的服务实现类中重新实现该方法?

如果我在 ABAP 中对结构进行了编码,它可能看起来像这样:

TYPES: BEGIN OF vbakvbap,
  vbap TYPE vbap OCCURS 0.
  INCLUDE TYPE vbak.
TYPES: END OF vbakvbap.

DATA: lt_vbakvbap TYPE TABLE OF vbakvbap.

我只对 ABAP 有一点了解,对 SEGW 的了解就更少了,所以欢迎每一个提示。

4

1 回答 1

3

SAP NetWeaver 网关充当 Odata 请求和基础数据之间的接口(显然)。从概念上讲,减少数据库请求是有意义的,但您需要优化使用网关项目创建的“数据提供程序类”(DPC)。虽然您可以提高 ABAP(和相关的数据库性能) - DPC 中的请求将受到整体 Odata 设计范式的约束。

在 SAP NW 网关项目中,无法将复杂类型定义为实体集本身 - 请参阅帮助文件 您应该查看是否存在可以满足您的需求的一些 SAP DDIC 视图(请参阅 WB2_V_VBAK_VBAP2 作为示例)和模型您的实体在逻辑上围绕这些设置,即扁平化您的数据需求。

如何设置数据模型 请注意,您在 SEGW 中的数据模型是一个逻辑模型,它不必物理地存在于数据库中,DPC 类是 ABAP,它负责填充实体集的繁重工作。

如何重新实现方法 从技术上讲,您可以重新定义 DPC 类的方法,这可以直接从 SEGW 项目中访问,方法是展开运行时工件文件夹并扩展 *_DPC_EXT 类(右键单击并说转到 Workbench)。您需要具备一些合理的 ABAP 知识,并实施可能要求的任何 Odata 过滤。

其他评论 为了最大限度地减少数据库访问,您可能还需要考虑在 DPC 类中实现一些缓存,但这取决于您的调用频率。

于 2015-06-30T12:11:34.243 回答