如何基于 RFC 创建 OData 并在输出中包含多个表?

How to create OData based off RFC with multiple tables in the output?

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

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

有什么方法可以将多个 table 与输出中的多个条目组合起来吗?当我说输出时,我指的是 GetEntity/GetEntitySet.

的结果 XML

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

正在导入

正在导出

表格

有没有办法将 table、结构和导入参数合并到一个输出中?

首先要了解的是,OData 协议并非旨在像经典函数调用那样单独工作。但是,它基于 entity/relationship 种模型。 因此,在您的情况下,建议使用您的结构 S_EMPLOYEE_DETAILS 的适当属性创建一个名为 'Employee' 的实体类型。有了这个你可以实施方法 GET_EMPLOYEE_ENTITY 以通过 PERNR 检索员工的单个实例。

接下来要做的是获取该员工的直接下属。由于在您的案例中这是从 Employee 到 Employee 的关系 1:N,因此您可以创建一个名为 'DirectReports' 的具有适当基数的导航 属性。然后在你的 GET_EMPLOYEE_ENTITYSET 中你可以 return table T_DIRECT_REPORTS 的实例(注意导航 属性 不是空的,你必须阅读parent!)。

完成这项工作后,您可以继续 'best-practise' 并通过填充扩展子句来实施方法 GET_EXPANDED_ENTITY,我认为这是首选方式,因为您不需要实施两种不同的方法,并且被认为更快(如果发生许多扩展)。

两种实现方法都可以通过

调用

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