在单个OData调用中获取父实体及其子实体数据的一般方法是实现数据提供程序类的GET\u EXPANDED\u entity方法。这涉及到通过方法实现中导航属性的硬编码,显式指定哪些子实体可以与父实体一起检索。这需要在父结构的嵌套属性中填充与导航属性名称同名的数据,然后将导航添加到标准的导出参数ET\u EXPANDED\u TECH\u子句中,以通知框架expande子句已经由自定义实现提供了服务,并且不需要这样做调用子实体集。
场景:
/sap/opu/odata/TEST/FormulaHeaderSet(DealGUID=guid'005056a5-790d-1ed8-93b5-e746232147da',FormulaGUID=guid'005056a5-790d-1ed8-93b5-f8ce913fe80b')?$expand=FormulaTermSet,FormulaTermSet/FormulaComponentSet
在OData项目中,3个实体(FormulaHeader,FormulaTerm和FormulaComponent)建模如下:
实体1:FormulaHeader
实体2:FormulaTerm
实体3:FormulaComponent
关联1:FormulaHeader->FormulaTerm(1:N)
关联2:FormulaTerm->FormulaComponent(1:N)
导航1:FormulaTermSet(在FormulaHeader和FormulaTerm之间)
导航2:FormulaComponentSet(在FormulaTerm和FormulaComponent之间)
此OData调用将返回其指定关键字段(DealGUID和FormulaGUID)的FormulaHeader数据,它对应的子实体FormulaTermSet和FormulaComponentSet通过GET\u EXPANDED\u ENTITY方法在一个网关调用中,大数据 学习,
这里需要注意的要点是,我们需要告诉网关框架,大数据app,我们已经在一个实体集调用中展开了FormulaHeader、FormulaTerm和FormulaComponent实体,并且没有不需要调用子实体集来获取公式项和公式组件数据。我们可以使用GET\u EXPANDED\u ENTITY的参数ET\u EXPANDED\u TECH\u子句来实现这一点,并在此导出参数中附加导航属性名称(FORMULATERMSET和FORMULATERMSET/FORMULACOMPONENTSET),它将告诉gate-way框架子实体已经被扩展,不需要调用子实体集。
在这个博客中,我提供了另一种方法,通过递归在ET\u expanded\u TECH\u子句中动态生成并附加导航属性名。
下面的方法调用GET\u EXPANDED\u TECH\u子句是在数据提供程序类的GET\u EXPANDED\u ENTITY方法中实现的,淘客app,
上述方法的逻辑如下:
以上用截图说明的场景:
以上场景执行指定的URL时,从GET\u EXPANDED\u ENTITY方法调用GET\u EXPANDED\u TECH\u子句方法。
对于GET\u EXPANDED\u ENTITY方法的第一次调用,成都大数据,调用的是FormulaHeader获取其子实体和导航属性名
在这种情况下,父实体为空,FORMULATERMSET是其子实体集,其导航属性名为FORMULATERMSET
因此,在第一次调用中,FORMULATERMSET被添加到CT\ U EXPANDED\ U TECH\ U子句字段中。
对于GET\ U EXPANDED\ U TECH\ U子句方法的第二次调用(因为它本质上是递归的),调用FormulaTerm来获取它的子项和导航属性名称。
在这种情况下,父级为FORMULATERMSET,FORMULACOMPONENT为子实体集,导航属性名为FORMULACOMPONENTSET,在第二次调用中,在CT\u EXPANDED\u TECH\u CLAUSES字段中添加FORMULATERMSET/FORMULACOMPONENTSET.
在CT\u EXPANDED\u TECH\u CLAUSES中的最终结果如下:
由于该方法是递归调用的,在第二次调用中父实体是FORMULATERM,FORMULACOMPONENTSET是其子实体集。
的实现GET\u EXPANDED\u TECH\u子句方法可以处理多级子实体的导航,因为它本质上是递归的。
而且,这种方法的主要优点是不涉及导航属性名称和实体的硬编码。它可以满足所有实体及其子实体的需要,外汇返现,而不需要任何特定于实体的逻辑。