过程参数未传递到SAP CAP应用程序

问题描述

我有一个正在调用过程的SAP Cloud Application。所有没有参数的程序都可以正常运行,但是我无法使带有参数的程序正常工作。我将其范围缩小到了node.js服务文件中的以下几行:

const ip = [{"PID": PID},{"CENTERLAT": CENTERLAT},{"CENTERLONG": CENTERLONG},{"PTOL": PTOL},{"ETOL": ETOL},{"CURRLAT": CURRLAT},{"CURRLONG": CURRLONG},{"OPEN_CLOSE": OPEN_CLOSE},{"LDATE": LDATE},{"LTIME": LTIME}]
const output = await dbConn.callProcedurePromisified(sp,ip)

我得到的错误是:

{ code: -20007,message: 'Can not bind parameter(0).',sqlState: 'HY000' }
[2020-08-28T16:30:32.649Z | ERROR | 1987505]: An error occurred during serialization of the entity collection.
[2020-08-28T16:30:32.649Z | ERROR | 1987505]: Error stacktrace: SerializationError: An error occurred during serialization of the entity collection.

当我console.log ip时,我得到:

[ { PID: 'ab9359f1-2b72-4a4b-abf2-0295c7913b51' },{ CENTERLAT: 32.352521 },{ CENTERLONG: -117.632423 },{ PTOL: 3.999999 },{ ETOL: 5 },{ CURRLAT: 32.321456 },{ CURRLONG: -117.090456 },{ OPEN_CLOSE: 'C' },{ LDATE: '12122059' },{ LTIME: '121259' } ]

我的过程定义是:

PROCEDURE "PointPathDistance" (IN PID NVarChar(36),IN CENTERLAT Double,IN CENTERLONG Double,IN PTOL Double
                               IN ETOL Double,IN CURRLAT Double,IN CURRLONG Double,IN OPEN_CLOSE NVarChar(1),IN LDATE NVarChar (8),IN LTIME NVarChar(8),out result "USERLOCATIONS")

有什么想法吗? 谢谢。

解决方法

我正在这样做:

GroupIntoBatches

基本上将req.data解构为代码数组,并将其传递给callProcedurePromisified函数。

然后,我想为什么不只传递req.data?如下所示:

const {PID,CENTERLAT,CENTERLONG,PTOL,ETOL,CURRLAT,CURRLONG,OPEN_CLOSE,LDATE,LTIME} = req.data
const ip = [{"PID": PID},{"CENTERLAT": CENTERLAT},{"CENTERLONG": CENTERLONG},{"PTOL": PTOL},{"ETOL": ETOL},{"CURRLAT": CURRLAT},{"CURRLONG": CURRLONG},{"OPEN_CLOSE": OPEN_CLOSE},{"LDATE": LDATE},{"LTIME": LTIME}]
const output = await dbConn.callProcedurePromisified(sp,req.data)

有效!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...