ABAP oDATA服务:如何在一次通话中提供嵌套数据?

时间:2015-06-30 10:53:39

标签: data-structures odata sap sapui5 abap

我想编写一个自定义的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,所以每个提示都是受欢迎的。

1 个答案:

答案 0 :(得分:3)

SAP NetWeaver Gateway充当Odata请求与基础数据之间的接口(显然)。从概念上减少数据库请求是有意义的,但您需要优化使用您的Gateway项目创建的数据提供程序类(DPC)。虽然您可以改进ABAP(以及相关的数据库性能),但DPC中的请求将受到整体Odata设计范例的限制。

在SAP NW Gateway项目中,无法将复杂类型定义为实体集本身 - 请参阅help file 您应该查看是否存在可满足您需求的某些SAP DDIC视图(请参阅WB2_V_VBAK_VBAP2作为示例),并对您的实体集进行逻辑建模,即平衡您的数据要求。

如何设置数据模型 请注意,您在SEGW中的数据模型是一个逻辑模型,它不必在DB上实际存在,DPC类是ABAP,它可以填充实体集。

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

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