CAP-过滤器不适用于扩展实体

2020-08-17 15:15发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有一个用例,其中我在表的顶部创建了一个视图以计算字段。 在同一表中,我将创建到此表顶部视图的关联,以便可以导航到此计算字段。 除非我尝试扩展和过滤此关联,否则此方法工作正常。

我模拟了问题的简化版本,即数据模型:

Authors是实体,而AuthorStatus是此表顶部的视图。 Authors表中的AuthorStatus是表和视图之间的关联:

命名空间sap.capire.bookshop;
 实体作者{
   密钥ID:整数;
       名称:字符串(111);
       AuthorStatus:AuthorStatus.ID = ID上与AuthorStatus的关联;
 };
 实体AuthorStatus从供应者身份中选择{
     ID,
     测试状态:String(20)
 };
 

两者都暴露在服务层中:

使用" ../db/schema"中的{sap.capire.bookshop作为我的};
 服务AdminService @(__ requires:'authenticated-user'){
   实体Authors作为my.Authors的投影;
   实体AuthorStatus作为对my.AuthorStatus的投影;
 }
 

当我尝试通过扩展数据并过滤作者姓名进行测试时,一切正常:

http://localhost:4004/admin/Authors?$ expand = AuthorStatus&$ filter = name eq'Wouter'

当我尝试过滤关联中的"状态"字段时,出现以下错误:

网址:http://localhost:4004/admin/Authors?$ expand = AuthorStatus&$ filter = AuthorStatus/status eq'test'

错误:

启用调试并查看生成的查询时,我注意到它生成了错误的SQL:

从AdminService_Authors中选择a.ID AS" a_ID",a.name AS" a_name",b.ID AS" b_ID",b.status AS" b_status"。  ID)WHERE a.AuthorStatus.status =
 ?  LIMIT 1000 ['test']
 

我猜它应该在表" b"的何处使用"状态"?

这可能是错误,还是我做了不允许的事情?

提前谢谢!

K,伍特

(16.4 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有一个用例,其中我在表的顶部创建了一个视图以计算字段。 在同一表中,我将创建到此表顶部视图的关联,以便可以导航到此计算字段。 除非我尝试扩展和过滤此关联,否则此方法工作正常。

我模拟了问题的简化版本,即数据模型:

Authors是实体,而AuthorStatus是此表顶部的视图。 Authors表中的AuthorStatus是表和视图之间的关联:

命名空间sap.capire.bookshop;
 实体作者{
   密钥ID:整数;
       名称:字符串(111);
       AuthorStatus:AuthorStatus.ID = ID上与AuthorStatus的关联;
 };
 实体AuthorStatus从供应者身份中选择{
     ID,
     测试状态:String(20)
 };
 

两者都暴露在服务层中:

使用" ../db/schema"中的{sap.capire.bookshop作为我的};
 服务AdminService @(__ requires:'authenticated-user'){
   实体Authors作为my.Authors的投影;
   实体AuthorStatus作为对my.AuthorStatus的投影;
 }
 

当我尝试通过扩展数据并过滤作者姓名进行测试时,一切正常:

http://localhost:4004/admin/Authors?$ expand = AuthorStatus&$ filter = name eq'Wouter'

当我尝试过滤关联中的"状态"字段时,出现以下错误:

网址:http://localhost:4004/admin/Authors?$ expand = AuthorStatus&$ filter = AuthorStatus/status eq'test'

错误:

启用调试并查看生成的查询时,我注意到它生成了错误的SQL:

从AdminService_Authors中选择a.ID AS" a_ID",a.name AS" a_name",b.ID AS" b_ID",b.status AS" b_status"。  ID)WHERE a.AuthorStatus.status =
 ?  LIMIT 1000 ['test']
 

我猜它应该在表" b"的何处使用"状态"?

这可能是错误,还是我做了不允许的事情?

提前谢谢!

K,伍特

(16.4 kB)
付费偷看设置
发送
5条回答
clasier
1楼-- · 2020-08-17 15:36

嗨,

我没有答案,但是我记得我在CAP上的SAP研讨会上看到了这个问题。 我们尝试将其部署到HANA,并且在那儿工作正常。 因此,它看起来像是CAP中的错误。 也许您可以尝试将其部署到HANA上,看看是否可以在此处复制它。

太Q了
2楼-- · 2020-08-17 15:45

我还想补充一点,即在将其部署到HANA数据库中时,它确实可以工作。 这仅在本地测试时发生。

樱桃小丸子0093
3楼-- · 2020-08-17 15:33

嗨,

路径表达式(在本例中为" AuthorStatus/status")仅适用于SAP HANA,不适用于SQLite。

最好的问候,
David

打个大熊猫
4楼-- · 2020-08-17 15:19

我的观点是,如果它适用于HANA,它也应适用于SQLite。 因此,对我来说,这似乎是一个错误,CAP开发人员应该解决它。

SAP砖家
5楼-- · 2020-08-17 15:19

嗨,Wouter,

我们也已切换为在云上使用HDI容器,并在需要此类查询时连接到该容器。

我尝试调试整个sql来解决问题,但实际上并没有找到简单的解决方法。 (是的,请在调试中手动更改设置的一部分,但这不是解决方案。)
David Kunz 也许可以在文档中的某处注明这一点,或者您是否有诸如Wouter之类的计划要求解决此问题? 到目前为止,这是一个反复出现的问题。 :)
https://answer.sap.com/questions/13016370/cloud-application-programming-model-sqlit-order-an.html
https://github.com/sapmentors/cap-community/issues/22

我尝试手动解决此问题时遇到的是 以下内容:
在expandCQNToJoin.js(@ sap/cds-runtime/lib/cds-sql/expand)中的buildJoinQueries中,首先构造了where,然后进行了联接,这导致了where不能正确映射到 加入了什么。
我没有太多时间去深入研究这个问题。

亲切的问候,

Vincent

一周热门 更多>