CDS协会未在CAP项目中按预期工作

2020-09-03 14:18发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) Hi CDS开发人员 我在C...

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

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


Hi CDS开发人员

我在CDS-Associations上遇到了一个奇怪的行为。

在数据模型中,作者和发行者之间存在多对多关系,然后与书籍之间存在多对多关系。 意味着一个作者可以有多个发布者,反之亦然。 而且Author和Publisher的组合可以有多本书。

因为CDS不支持多对多关系,所以我创建了一个联合表" AuthorsPublishers":

对应的db/data-model.cds是:

命名空间my.bookshop;

 实体作者{
 密钥ID:整数;
 名称:字符串;
 发布者:与许多Authors的关联Publishers上的发布者。Author= $ self;
 }

 实体出版商{
 密钥ID:整数;
 名称:字符串;
 作者:在Authors.Publisher = $ self上与许多AuthorsPublisher关联。
 }

 实体AuthorsPublishers {
 主要作者:作者协会;
 关键发布者:发布者协会;
 书籍:与许多书籍相关联的书籍。AuthorPublisher= $ self;
 }

 实体书籍{
 密钥ID:整数;
 title:字符串;
 AuthorPublisher:AuthorsPublishers的协会;
 }
 

现在,奇怪的行为是通过作者和联合表访问Books实体时:

获取/catalog/Authors(4)/Publishers(1)/Books 

在响应中,有一本书不属于发布者1(" CDS视图的主"属于发布者2):

 {
   " @ odata.context":" ../../$metadata#Books",
   " @ odata.metadataEtag":" W/\" dcbvuNZkmJ92kxlwkU1UXZ3mdQOzMKYrJy3JlohAJLY = \"","
   "值":[
     {
       " id":4
       " title":" ABAP for Dummies",
       " AuthorPublisher_Author_id":4
       " AuthorPublisher_Publisher_id":1
     },
     {
       " id":5
       " title":" CDS视图的领主",
       " AuthorPublisher_Author_id":4
       " AuthorPublisher_Publisher_id":2
     }
   ]
 }
 

我也可以在数据库的SQL-Console中执行相同的查询:

选择书籍。*
 由MY_BOOKSHOP_AUTHORS位作者
 INNER JOIN my_bookshop_authors发布者AS作者发布者
 开启authorspublishers.author_id = authors.id
 AND authorspublishers.publisher_id = 1
 INNER JOIN my_bookshop_books AS图书
 在书籍上。AUTHORPUBLISHER_AUTHOR_ID= authorspublishers.author_id
 AND books.AUTHORPUBLISHER_PUBLISHER_ID = authorspublishers.publisher_id
 在哪里authors.id = 4;
 

结果是:

有人知道为什么oData服务上的GET请求从错误的出版商那里返回一本书吗?

要解决此问题,我创建了一个GITHUB项目: https://github.com/bkrencker/cds_association

您可以在csv文件中找到CDS数据模型,oData服务以及testdata。 该项目可以直接部署到SCP Cloud Foundry试用帐户。

感谢和问候,

(8.1 kB)
6条回答
compass1988
2020-09-03 14:31

嗨,本杰明,

您的GET请求应如下所示(键由2个属性组成):

获取/catalog/Authors(4)/Publishers(Author_id = 4,Publisher_id = 1)/图书

但是,这不能解决问题...

 {
 " @ odata.context":" ../../$metadata#Books",
 " @ odata.metadataEtag":" W/\" dcbvuNZkmJ92kxlwkU1UXZ3mdQOzMKYrJy3JlohAJLY = \",",
 "值":[{
 " id":4
 " title":" ABAP for Dummies",
 " AuthorPublisher_Author_id":4
 " AuthorPublisher_Publisher_id":1
 },
 {
 " id":5
 " title":" CDS视图的领主",
 " AuthorPublisher_Author_id":4
 " AuthorPublisher_Publisher_id":2
 }
 ]
 }
 

干杯

Pierre

一周热门 更多>