我有一个非托管的说唱场景,其中最顶层的根实体被投影覆盖,相应的行为也有一个投影。
行为的生成实现为多种方法(如 read、rba、cba 等)创建了空存根……正如我们所知。
此外,我有一个自由式 ui5 应用程序(JS),我在其中使用我发布的 ui5 odata 服务(v2)中定义的公开实体集和操作。
实体的结构是分层的(与几乎每个示例类似),包含标题和项目。
所以到目前为止,行为类的所有生成的方法存根都是空的(除了两个操作,它们执行得很好并且执行我希望它们执行的操作)...
并且,“read”方法是空的。
根据此链接
https://software-heroes.com/en/blog/abap-rap-unmanagement-scenario
我读到了这个:
在我的 ui5 客户端代码中,我确实有一个包含标题的 sap.m.Table,这是通过正确的 3 种方法之一完成的,这里是通过项目绑定
<Table id="tabOrders"
inset="false"
showNoData="false"
items="{/HEADERS}"
mode="SingleSelectMaster"
itemPress=".onOrderTableItemPress" >
<columns >
这会正确触发对公开实体集(称为标头)的隐式读取。 该实体集在服务定义中正确公开,客户端(BAS)中的所有元数据都是同步的。
现在:行为类的“read”方法未被调用(断点设置)。
这看起来像是实体集“HEADERS”(实际上是最顶层的 ROOT 实体视图)被简单地读取,就好像它是一个普通的 CDS 视图一样,并且底层的行为和说唱模型被完全忽略。
如果我实现一个操作并在该实体上发出 EML 读取语句,则会调用方法存根,并且不会返回任何内容,因为它仍然是一个空方法存根。
我尝试使用显式“读取”进行相同的操作,在 odata 模型上调用,这也忽略了该行为类的读取方法。
因此,不知何故,来自我的客户端代码(JS)的调用直接跳转到实体集,但执行似乎只是忽略了它是非托管说唱场景的一部分,而不是独立的CDS视图......
为什么?
您的CDS视图实体包含任何数据吗? SADL将首先生成查询以从CDS实体加载数据,如果没有找到任何内容,则根本不会到达行为池。
如果您使用ADT,建议启用交叉跟踪,您可以轻松地从调用堆栈中找到问题所在。