如何在NodeJS中实现返回整数的函数?

2020-09-03 13:37发布

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

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


CAPM专家您好,

我想实现一个函数,该函数返回 OData结构用于 动态应用启动器,因此我可以使用基于CDS的服务中的数据填充动态图块。 我已将结构定义为主体:

https://github.com/gregorwolf/bookshop-demo /blob/master/srv/cat-service.cds#L4

并为该函数创建了一个实现:

https://github.com/gregorwolf/bookshop-demo/blob /master/srv/cat-service.js

不幸的是,在运行示例时,我收到控制台错误消息:

实体序列化期间发生错误。

任何帮助都将倍受赞赏。

最诚挚的问候
格雷戈尔

抄送: DJ亚当斯 克里斯蒂安·乔治(Georgi)

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

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


CAPM专家您好,

我想实现一个函数,该函数返回 OData结构用于 动态应用启动器,因此我可以使用基于CDS的服务中的数据填充动态图块。 我已将结构定义为主体:

https://github.com/gregorwolf/bookshop-demo /blob/master/srv/cat-service.cds#L4

并为该函数创建了一个实现:

https://github.com/gregorwolf/bookshop-demo/blob /master/srv/cat-service.js

不幸的是,在运行示例时,我收到控制台错误消息:

实体序列化期间发生错误。

任何帮助都将倍受赞赏。

最诚挚的问候
格雷戈尔

抄送: DJ亚当斯 克里斯蒂安·乔治(Georgi)

付费偷看设置
发送
4条回答
大道至简
1楼 · 2020-09-03 14:16.采纳回答

您好,Gregor,您不必切换到Java:-)

SAP NPM上有一个新的OData V4-> V2适配器代理程序包,您可以使用它,称为@ sap/cds -odata-v2-adapter-proxy。 在本地将其安装到项目中后,您可以将其用作Express中间件,并可以通过/v2/前缀访问URL路径。

下面是一个示例:

 const代理 = require('@ sap/cds-odata-v2-adapter-proxy')
 const cds = require('@ sap/cds')
 const app = require('express')()
 const {端口= 4004} = process.env

 cds.serve('all')。in(app)
 app.use(proxy({port:PORT}))。listen(PORT)

 

然后使用如下所示的URL:

 http://localhost:4004/v2/catalog/getNumberOfBooksForDynamicTile()

您会在旧版V2中获得输出 样式,例如:

 {
   " d":{
     " icon":" sap-icon://travel-expense",
     " info":"季度结束!",
     " infoState":"严重",
     " number":" 43.33",
     "数字位数":1
     " numberFactor":" k",
     " numberState":"正",
     " numberUnit":" EUR",
     " stateArrow":"向上",
     "副标题":"季度概览",
     " title":"旅费",
     " __metadata":{
       " uri":" http://localhost:4004/v2/catalog/DynamicAppLauncher(Travel%20Expenses)",
       " type":" CatalogService.DynamicAppLauncher"
     }
   }
 }
 

有帮助吗? 如果确实如此,请参阅此PR https://github.com/gregorwolf/bookshop-demo/pull/1 :-)

haha101010
2楼-- · 2020-09-03 14:08

带有Node.js的OData v2? 很好,那我终于可以忘掉Java了!

代楠1984
3楼-- · 2020-09-03 14:00

嗨,格雷戈尔,

您应该尝试在数字值(number和numberDigits)周围加上引号,以查看是否可以解决问题。

编辑:错误消息为"该实体的序列化过程中发生错误。'number'属性的序列化失败。无效值43.333(JavaScript编号)。指定的Edm.Decimal值的右侧有更多数字。 小数点,比"缩放"构面值(2)所允许的小数点。"

您可以仅使用2位数字(即43.33)或更改属性定义以允许更多数字来解决此错误。

干杯

Pierre

compass1988
4楼-- · 2020-09-03 14:06

很棒。 经过一些细微的调整,现在可以使用了。 但是无论我使用数组还是对象,响应始终是:

 {
 " @ odata.context":" $ metadata#DynamicAppLauncher/$ entity",
 " @ odata.metadataEtag":" W/\" x4Io3P1RwsUsoWpJwUNvOaHa3ShVO1n0Hv0YDvXDAU4 = \"",
 " icon":" sap-icon://travel-expense",
 " info":"季度结束!",
 " infoState":"严重",
 "数字":43.33,
 "数字位数":1
 " numberFactor":" k",
 " numberState":"正",
 " numberUnit":" EUR",
 " stateArrow":"向上",
 "副标题":"季度概览",
 标题:旅行费用
 } 

但所需格式应为:

 {
                 " d":{
                                " icon":" sap-icon://travel-expense",
                                " info":"季度结束!",
                                " infoState":"严重",
                                "数字":43.33,
                                "数字位数":1
                                " numberFactor":" k",
                                " numberState":"正",
                                " numberUnit":" EUR",
                                " stateArrow":"向上",
                                "副标题":"季度概览",
                                " title":"旅费",
                      }
 } 

我想我必须切换到OData V2和Java还是?

一周热门 更多>