从Fiori Elements中读取后挂钩实现失败

2020-08-23 04:27发布

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

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


CAP爱好者,

在进行本地测试时,使用Fiori Elements前端遇到一个奇怪的问题。

我已经在我的实体课程中添加了一个虚拟的SpotsAvalaible属性。 我将在课程的"阅读"的后钩子中填写此虚拟属性:

 srv.after('READ','Courses',(courses,req)=> {
            //来自fiori的问题:原因已计算对象-> $ count
             回程
                 .map(异步课程=> {
                    //获取此课程的预订
                     常量保留=等待cds.transaction(req).run(
                         SELECT.from(预订).where({course_ID:course.ID})
                     )
                    //采样到的钙质斑点
                     const spotTaken = Reservations.reduce((总计,预订)=>总计+ Reservation.quantity,0)
                     course.spotsAvailable = course.spots-spotTaken
                 })
         })
 

当我使用邮递员并完成课程时,此方法有效。 (http://localhost:4004/training/Courses)

 {
 " @ odata.context":" $ metadata#Courses",
 " @ odata.metadataEtag":" W/\" BmT9sdj4fnWqz4BxxDN0o + XSNGD5CW69Y8wbhe1uRYk = \"",
 "值":[
 {
 " ID":" ee0b3d38-729d-4237-a7fe-b922f753e87e",
 " modifiedAt":null,
 " createdAt":" 2020-01-18T18:45:57Z",
 " createdBy":"匿名",
 " modifiedBy":null,
 " title":"某些课程",
 "天":1
 "点":15
 " courseType":"技术",
 " spotsAvailable":15
 " trainer_ID":" 880331ae-ae41-4a46-b49b-b7a3cbd049b0"
 }
 ]
 } 

但是当使用Fiori元素前端时,挂钩崩溃并显示以下错误。 对于$ batch中的以下请求:
获取课程?$ count = true&$ select = ID,天数,地点,标题,trainer_ID&$ expand = trainer($ select = ID,name)&$ skip = 0&$ top = 30 HTTP/1.1

POST/training/$ batch

阅读课程{'$ count':'true','$ select':'ID,days,spots,title,trainer_ID','$ expand':'trainer($ select = ID,name)','  $ skip':'0','$ top':'30'}阅读课程{'$ count':'true','$ select':'ID,days,spots,title,trainer_ID','$ expand'  :'trainer($ select = ID,name)','$ skip':'0','$ top':'30'} [2020-01-19T14:45:18.101Z | 错误|  1221510]:无法读取undefinedType的属性'run'错误:无法读取C:\ repo \ CAP \ training-reservations \ node_modules @ sap \ cds-services \ lib \ connect \ Transaction.js:84:27的undefined属性'run'  

在调试时,我注意到第二次调用了挂机,但是这次课程参数充满了一个计数对象:

 [{counted:1}] 

我在cap-community上记录了相同的问题: https://github.com。 com/sapmentors/cap-community/issues/32

有没有办法解决这个问题?

谢谢!

亲切的问候,

罗宾

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

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


CAP爱好者,

在进行本地测试时,使用Fiori Elements前端遇到一个奇怪的问题。

我已经在我的实体课程中添加了一个虚拟的SpotsAvalaible属性。 我将在课程的"阅读"的后钩子中填写此虚拟属性:

 srv.after('READ','Courses',(courses,req)=> {
            //来自fiori的问题:原因已计算对象-> $ count
             回程
                 .map(异步课程=> {
                    //获取此课程的预订
                     常量保留=等待cds.transaction(req).run(
                         SELECT.from(预订).where({course_ID:course.ID})
                     )
                    //采样到的钙质斑点
                     const spotTaken = Reservations.reduce((总计,预订)=>总计+ Reservation.quantity,0)
                     course.spotsAvailable = course.spots-spotTaken
                 })
         })
 

当我使用邮递员并完成课程时,此方法有效。 (http://localhost:4004/training/Courses)

 {
 " @ odata.context":" $ metadata#Courses",
 " @ odata.metadataEtag":" W/\" BmT9sdj4fnWqz4BxxDN0o + XSNGD5CW69Y8wbhe1uRYk = \"",
 "值":[
 {
 " ID":" ee0b3d38-729d-4237-a7fe-b922f753e87e",
 " modifiedAt":null,
 " createdAt":" 2020-01-18T18:45:57Z",
 " createdBy":"匿名",
 " modifiedBy":null,
 " title":"某些课程",
 "天":1
 "点":15
 " courseType":"技术",
 " spotsAvailable":15
 " trainer_ID":" 880331ae-ae41-4a46-b49b-b7a3cbd049b0"
 }
 ]
 } 

但是当使用Fiori元素前端时,挂钩崩溃并显示以下错误。 对于$ batch中的以下请求:
获取课程?$ count = true&$ select = ID,天数,地点,标题,trainer_ID&$ expand = trainer($ select = ID,name)&$ skip = 0&$ top = 30 HTTP/1.1

POST/training/$ batch

阅读课程{'$ count':'true','$ select':'ID,days,spots,title,trainer_ID','$ expand':'trainer($ select = ID,name)','  $ skip':'0','$ top':'30'}阅读课程{'$ count':'true','$ select':'ID,days,spots,title,trainer_ID','$ expand'  :'trainer($ select = ID,name)','$ skip':'0','$ top':'30'} [2020-01-19T14:45:18.101Z | 错误|  1221510]:无法读取undefinedType的属性'run'错误:无法读取C:\ repo \ CAP \ training-reservations \ node_modules @ sap \ cds-services \ lib \ connect \ Transaction.js:84:27的undefined属性'run'  

在调试时,我注意到第二次调用了挂机,但是这次课程参数充满了一个计数对象:

 [{counted:1}] 

我在cap-community上记录了相同的问题: https://github.com。 com/sapmentors/cap-community/issues/32

有没有办法解决这个问题?

谢谢!

亲切的问候,

罗宾

付费偷看设置
发送
4条回答
xfwsx85
1楼-- · 2020-08-23 05:06

你好罗宾,

每当您请求对实体集合计数时,我们都会触发两个读取请求。

第一个在您的示例中有效。 第二个失败。

要解决此问题,如果它是计数请求(即req.query对象仅选择" count(*)"作为列),则需要阻止After处理程序运行。

最诚挚的问候,
大卫

Tong__Ming
2楼-- · 2020-08-23 04:59

你好大卫,

感谢您的回答。 但是,如果这是一个计数请求,如何防止after处理器运行?

我是否需要在after处理程序内添加检查,以检查它是否为计数请求,或者是否有其他解决方法?

我在文档中没有看到与此主题有关的任何内容。

谢谢

亲切的问候,

Robin

南山jay
3楼-- · 2020-08-23 05:09

嗨,Robin,

是的,您需要在事后处理程序中手动进行检查。

类似这样的东西:

如果(req.query.SELECT.columns.filter(({func})=> func ==='count')。length)返回

最好的问候,
大卫

CJones
4楼-- · 2020-08-23 04:56

嗨罗宾,

那看起来很奇怪。 您能告诉我们您正在使用哪个版本的@ sap/cds吗? 您还可以共享整个自定义处理程序吗? 非常感谢,大卫

一周热门 更多>