使用CDS计算关联实体

2020-09-03 18:30发布

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

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


嗨,

是否可以使用CDS计算关联实体的数量? 假设我要显示特定作者撰写的书籍数量:

实体书籍{
     密钥ID:整数;
     title:本地化的String;
     作者:作者协会;
   }

   实体作者{
     密钥ID:整数;
     名称:字符串;
     书籍:与许多书籍有关的书籍。author= $ self;
     @ Core.Computed
     numberOfBooks:整数;
   }
 

我尝试了类似 count(books)作为numberOfBooks 的操作,但不支持:-)

干杯

皮埃尔

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

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


嗨,

是否可以使用CDS计算关联实体的数量? 假设我要显示特定作者撰写的书籍数量:

实体书籍{
     密钥ID:整数;
     title:本地化的String;
     作者:作者协会;
   }

   实体作者{
     密钥ID:整数;
     名称:字符串;
     书籍:与许多书籍有关的书籍。author= $ self;
     @ Core.Computed
     numberOfBooks:整数;
   }
 

我尝试了类似 count(books)作为numberOfBooks 的操作,但不支持:-)

干杯

皮埃尔

付费偷看设置
发送
10条回答
Haoba3210
1楼 · 2020-09-03 18:54.采纳回答

我以博客文章的形式写了一个可能的答案:

https://blogs.sap.com/2019/08/21/computed-field-example-in-cap/

希望如此!

您好 Johannes Vogel

这实际上并没有达到预期的效果,请在下面查看我的解决方案。

干杯

Pierre

My梦
3楼-- · 2020-09-03 18:46

我认为您应该观看这一集动手SAP开发人员 DJ Adams ,他展示了如何创建计算值。

亦是此间程序员
4楼-- · 2020-09-03 19:00

感谢格雷戈尔,我会收看这一集。 现在,我很好奇,想知道DJ的解决方案是否涉及挂钩/处理程序。

DJ Adams :否,但我会在家中观看录像或等待 在YT上使用带注释的版本。

huskylover
5楼-- · 2020-09-03 18:55

在OData标准中,此处描述了这种情况: https://www.odata.org/documentation/odata-version-2-0/uri-conventions/

示例:

https://services.odata.org /OData/OData.svc/Categories(1)/Products/$count

  • 标识与类别1相关的产品条目数。
  • 由服务元数据文档中"类别"实体类型上名为"产品"的导航属性描述。

这将是../Authors(3)/books/$count。 知道这是否是开箱即用的效果,或者您是否必须在CDS中进行一些编码,或者是否尚未在CDS中实现,这将是很有趣的。

Haoba3210
6楼-- · 2020-09-03 18:43

这就是我在另一个示例中使用的 (自由样式UI5)应用程序,但我想知道是否有一种方法可以在CDS级别上使用它,因为我想在Fiori Elements应用程序中使用此服务,并且希望避免创建扩展名。

$ count在使用CAP Java时开箱即用。

shere_lin
7楼-- · 2020-09-03 19:05

嗨约翰尼斯,

这实际上并没有达到预期的效果,因为那么numberOfBooks包含作者总数,而响应仅包含1个作者:

 {
 " @ odata.context":" $ metadata#Authors",
 " @ odata.metadataEtag":" W/\" 8q5jjLD6vJ0ARrjnkajTONXIn38vpa1wxoXucua4kzU = \"",
 "值":[{
 " ID":101,
 " name":" EmilyBrontë",
 " numberOfBooks":4
 }]
 } 

这就是DJ解决方案的收获:

 {
 " @ odata.context":" $ metadata#Authors",
 " @ odata.metadataEtag":" W/\" 8q5jjLD6vJ0ARrjnkajTONXIn38vpa1wxoXucua4kzU = \"",
 "值":[{
 " ID":101,
 " name":" EmilyBrontë",
 " numberOfBooks":1
 },
 {
 " ID":107,
 " name":" CharloteBrontë",
 " numberOfBooks":1
 },
 {
 " ID":150,
 " name":" Edgar Allen Poe",
 " numberOfBooks":2
 },
 {
 " ID":170,
 " name":" Richard Carpenter",
 " numberOfBooks":1
 }
 ]
 } 

编辑:这是一个解决方案,在CDS级别使用计数:

 service CatalogService {

   实体书作为my.Books上的投影;
   从my.Authors,my.Books {
     关键Authors.ID,
     名称,
     @ Core.Computed
     count(Books.ID)as numberOfBooks:整数
   },其中Authors.books.ID = Books.ID
     按Authors.ID分组;
 } 

cds将。\ srv \ cat-service.cds编译为sql:

创建视图CatalogService_Authors AS SELECT
   作者_0.ID,
   Author_0_0.name,
   COUNT(Books_1.ID)AS numberOfBooks
 FROM(((my_bookshop_Authors AS Authors_0 CROSS JOIN my_bookshop_Books AS Books_1)左加入my_bookshop_Books AS Books_2 ON(Books_2.author_ID = Authors_0.ID))
 WHERE Books_2.ID = Books_1.ID
 GROUP BY作者_0.ID; 

干杯

Pierre

一周热门 更多>