使用 get_expanded_entityset 时如何防止 SAP oData 框架 运行 进入无限循环
How to prevent SAP oData framework to run into an infinite loop when using get_expanded_entityset
在我的项目中,我们最近实施了一种方法来检索 odata 服务的复杂 table。
简而言之,该服务由 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
我们还为实体模型的每个导航 属性 实现了 expanded_tech_clause itab,据我所知,这应该将实体标记为“已完成”,从而防止调用该方法再次为那个实体。
这可能是什么问题?
我在实际提出问题后不久就设法解决了这个问题,解决方案非常简单。
tableet_expanded_tech_clauses需要填写路径字符串。对于上面的例子,这需要看起来像:
M/C1
M/C2
M/C2/D1
M/C2/D2
...
M/C2/D5
我已经为这些字符串创建了常量。
在我们的例子中,框架现在只调用一次 expanded_entityset 方法,而 odata 调用只占用之前运行时间的大约 15%。
在我的项目中,我们最近实施了一种方法来检索 odata 服务的复杂 table。 简而言之,该服务由 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
我们还为实体模型的每个导航 属性 实现了 expanded_tech_clause itab,据我所知,这应该将实体标记为“已完成”,从而防止调用该方法再次为那个实体。
这可能是什么问题?
我在实际提出问题后不久就设法解决了这个问题,解决方案非常简单。
tableet_expanded_tech_clauses需要填写路径字符串。对于上面的例子,这需要看起来像:
M/C1 M/C2 M/C2/D1 M/C2/D2 ... M/C2/D5
我已经为这些字符串创建了常量。 在我们的例子中,框架现在只调用一次 expanded_entityset 方法,而 odata 调用只占用之前运行时间的大约 15%。