如何在输出中使用多个表创建基于RFC的OData?

问题描述 投票:1回答:1

我正在开展一个大型项目,需要我为各种远程函数调用创建OData。我能够弄清楚如何为简单的RFC建模和创建OData;但是,我正在努力处理使用多个表的更复杂的RFC以及简单的导出和导入参数。

我想通过GetEntity和GetEntitySet输出这些表以及导入和导出参数,只需一次调用。我已经在网上进行了广泛的搜索以找到解决方案,但最好的解决方案似乎是重新定义RFC或多次调用OData,这是不理想的。

有没有办法将多个表与输出中的多个条目组合在一起?当我说输出时,我指的是来自GetEntity / GetEntitySet的结果XML。

例如,采用以下伪造的RFC定义来获取PERNR,并输出直接报告列表和员工详细信息结构。

输入

  • PERNR

出口

  • S_EMPLOYEE_DETAILS

TABLES

  • T_DIRECT_REPORTS

有没有办法将表,结构和导入参数组合成一个输出?

odata sap abap saprfc
1个回答
4
投票

首先要理解的是,OData协议并不仅仅适用于经典函数调用。然而,它基于实体/关系类型的模型。所以在你的情况下,id sugest创建一个名为'Employee'的实体类型,其中包含结构S_EMPLOYEE_DETAILS的适当属性。有了这个你可以,例如实现方法GET_EMPLOYEE_ENTITY以通过PERNR检索员工的单个实例。

接下来要做的就是获得该员工的直接报告。由于在您的情况下,这是从Employee到Employee的1:N关系,因此您可以创建一个名为“DirectReports”的导航属性,其属性适当。然后在您的GET_EMPLOYEE_ENTITYSET中,您可以返回表T_DIRECT_REPORTS的实例(请注意,导航属性不为空,您必须读取父项的键!)。

一旦你完成这项工作,你可以继续进行'最佳实践'并实现方法GET_EXPANDED_ENTITY并填写expand子句,这在我看来是首选的方式,因为你不需要实现两个单独的方法,并且更快地进行了整理(如果发生很多扩展)。

两种实现方法都可以通过调用

GET EmployeeSet('12345678')?$ expand = DirectReports

© www.soinside.com 2019 - 2024. All rights reserved.