点击此处---> 群内免费提供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
有没有办法解决这个问题?
谢谢!
亲切的问候,
罗宾
你好罗宾,
每当您请求对实体集合计数时,我们都会触发两个读取请求。
第一个在您的示例中有效。 第二个失败。
要解决此问题,如果它是计数请求(即req.query对象仅选择" count(*)"作为列),则需要阻止After处理程序运行。
最诚挚的问候,
大卫
你好大卫,
感谢您的回答。 但是,如果这是一个计数请求,如何防止after处理器运行?
我是否需要在after处理程序内添加检查,以检查它是否为计数请求,或者是否有其他解决方法?
我在文档中没有看到与此主题有关的任何内容。
谢谢
亲切的问候,
Robin
嗨,Robin,
是的,您需要在事后处理程序中手动进行检查。
类似这样的东西:
最好的问候,
大卫
嗨罗宾,
那看起来很奇怪。 您能告诉我们您正在使用哪个版本的@ sap/cds吗? 您还可以共享整个自定义处理程序吗? 非常感谢,大卫
一周热门 更多>