【问题标题】:How to prevent SAP oData framework to run into an infinite loop when using get_expanded_entityset如何防止 SAP oData 框架在使用 get_expanded_entityset 时陷入无限循环
【发布时间】:2021-12-07 11:00:28
【问题描述】:

在我的项目中,我们最近实现了一种方法来检索 odata 服务的复杂表。 简而言之,该服务由 7 个实体组成,我们称它们为 M(主或最高父级)、C1 和 C2(M 的子级,两个第一级)和 D1 - D5,它们是 C2(第二级)的子级。

嵌套的 itab 已经按预期工作,由所有实体及其关系的复杂结构组成。

但是,仅使用导致框架仅检索主数据和第一级嵌套数据的 URL 调用服务才能正常工作。尝试检索二级数据也会导致框架尝试遍历嵌套实体的无限循环。

oData URI 如下所示:

/sap/opu/odata/sap/zsrv_data_srv/MSet?$expand=MToC1List,MToC2List/C2ToD1List,MToC2List/C2ToD2List,...,MToC2List/C2ToD5List

我们还为实体模型的每个导航属性实现了扩展技术子句 itab,据我所知,它应该将实体标记为“已完成”,从而防止该实体再次调用该方法。

这可能是什么问题?

【问题讨论】:

    标签: odata


    【解决方案1】:

    我在实际提出问题后不久就设法解决了这个问题,而且解决方案非常简单。

    表 et_expanded_tech_clauses 需要用路径字符串填充。对于上面的示例,这需要如下所示:

    M/C1 M/C2 M/C2/D1 M/C2/D2 ... M/C2/D5

    我已经为这些字符串创建了常量。 框架现在只调用了一次expanded_entityset 方法,在我们的例子中,odata 调用只占用了之前运行时的大约 15%。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多