【问题标题】:Procedure arguments are not passed to SAP CAP application过程参数不传递给 SAP CAP 应用程序
【发布时间】:2020-12-26 23:35:43
【问题描述】:

我有一个正在调用过程的 SAP Cloud 应用程序。所有没有参数的过程都运行良好,但我无法让带参数的过程正常工作。我已将其范围缩小到我的 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")

有什么想法吗? 谢谢。

【问题讨论】:

    标签: node.js sap-cap


    【解决方案1】:

    我正在这样做:

    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)
    

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

    然后,我想为什么不直接传入 req.data 呢?如下:

    const output = await dbConn.callProcedurePromisified(sp, req.data)
    

    有效!!

    【讨论】:

      猜你喜欢
      • 2012-12-24
      • 2018-08-05
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      相关资源
      最近更新 更多