如何将表参数从xsjs传递到表函数?

2020-09-23 01:55发布

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

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


让我们想象一下,我有这样定义的表函数:

功能" com.sap.functions :: GetClientsAmount"
 (
     inQueueIdList" com.sap.api :: types.TT_QueueList"
 )
     返回" com.sap.api :: types.TT_ClientAmount"
     语言SQLSCRIPT
     SQL安全调用者
 开始
     ...
 结束;
 

其中

表类型TT_QueueList
 {
     id:Integer64;
 }; 

现在,我想对功能进行单元测试。 为此,我使用了单独的Node.js模块,可以在其中从调用表函数的位置创建xsjslib单元测试文件。

因此,我执行以下操作:

 let queueIdList = [];
 connection.executeQuery('SELECT * from'+
     '" com.sap.functions :: GetClientsAmount"(?)',queueIdList);
 

不幸的是,在这种情况下,我得到一个错误:

错误:无效参数:输入参数不足于表参数:第1行第64行(在pos 63)

我尝试将queueIdList初始化为{},但是遇到了相同的错误。 在测试过程中,我知道我们可以传递一个带有对象[{id:1},{id:2}]的数组,但是看来这里的方法不一样。 而且,这种方式在这里适用于传递整数参数,因此我假设表参数可以用相同的方式完成,但似乎不行。

那么,应该怎么做?

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

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


让我们想象一下,我有这样定义的表函数:

功能" com.sap.functions :: GetClientsAmount"
 (
     inQueueIdList" com.sap.api :: types.TT_QueueList"
 )
     返回" com.sap.api :: types.TT_ClientAmount"
     语言SQLSCRIPT
     SQL安全调用者
 开始
     ...
 结束;
 

其中

表类型TT_QueueList
 {
     id:Integer64;
 }; 

现在,我想对功能进行单元测试。 为此,我使用了单独的Node.js模块,可以在其中从调用表函数的位置创建xsjslib单元测试文件。

因此,我执行以下操作:

 let queueIdList = [];
 connection.executeQuery('SELECT * from'+
     '" com.sap.functions :: GetClientsAmount"(?)',queueIdList);
 

不幸的是,在这种情况下,我得到一个错误:

错误:无效参数:输入参数不足于表参数:第1行第64行(在pos 63)

我尝试将queueIdList初始化为{},但是遇到了相同的错误。 在测试过程中,我知道我们可以传递一个带有对象[{id:1},{id:2}]的数组,但是看来这里的方法不一样。 而且,这种方式在这里适用于传递整数参数,因此我假设表参数可以用相同的方式完成,但似乎不行。

那么,应该怎么做?

付费偷看设置
发送
1条回答
SAP小黑
1楼 · 2020-09-23 02:34.采纳回答

已被问及回答过两次。

在这种情况下,数据库客户端无法传递表类型的参数,并且您的XSJS程序是数据库客户端。

可以在SQLScript上下文(或相应的块)中创建和处理表类型参数。

您可以使用匿名块,例如:

开始

 -一些用于填充表类型参数的ID的测试值
    t_queuelist =选择12作为来自DUMMY的ID
        UNION ALL SELECT 34作为来自DUMMY的ID
        UNION ALL SELECT 67作为来自DUMMY的ID;
    
     结果=选择*
              来自" com.sap.functions :: GetClientsAmount"(:t_queuelist);
 END; 

最后一次选择的结果将位于隐式结果集中,因此对于您的测试设置,您可以像调用任何过程一样调用此构造,并获取结果集以与正确的值进行比较。

一周热门 更多>