如何将大量数据作为输入参数发送到 SOAP Web 服务


How to send large amount of data to soap web service as input parameter?

当我从PHP发送输入参数时,我是这样做的:

$data = [
        'param1' => "value"
    ];

在我的.p过程中,我将该参数定义为

DEFINE INPUT PARAMETER param1 AS CHARACTER FORMAT "x(50)". 

稍后,我可以在代码中的任何位置使用该param1

但是如何在PHP中格式化临时表的数据作为输入参数呢?

DEFINE TEMP-TABLE inputTable
FIELD field1    LIKE sometable.field1
FIELD field2    LIKE  sometable.field2.
DEFINE INPUT PARAMETER TABLE FOR inputTable.
FOR EACH inputTable:
//store data into progres database
END.

是否可以将表作为输入参数发送到 SOAP Web 服务以及如何发送?

  1. 通过 JSON 将数据发送到您的 WSA。
  2. 将"parm1"更改为LONGCHAR
  3. 在程序中,定义 TT,然后使用 READ-JSON() 方法将数据导入 TT。在您的情况下,您将用 parm1 代替文件名,并将"file"更改为"longchar"。

有关此代码示例和相关文档,请参阅 READ-JSON() 下的 ABL 参考指南:

DEFINE VARIABLE cSourceType AS CHARACTER NO-UNDO.
DEFINE VARIABLE cReadMode AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFile AS CHARACTER NO-UNDO.
DEFINE VARIABLE lRetOK AS LOGICAL NO-UNDO.
DEFINE VARIABLE hDSet AS HANDLE NO-UNDO.
CREATE DATASET hDSet.
ASSIGN
    cSourceType = "file"
    cFile = "dset.json"
    cReadMode = "empty".
lRetOK = hDSet:READ-JSON(cSourceType, cFile, cReadMode).

实际上,解决方案非常简单。

我只需要颠倒整个故事。

所以在过程中代码保持像以前一样

DEFINE TEMP-TABLE inputTable
FIELD field1    LIKE sometable.field1
FIELD field2    LIKE  sometable.field2.
DEFINE INPUT PARAMETER TABLE FOR inputTable.
FOR EACH inputTable:
//store data into progres database
END.

在 php 中,我发送这样的数组

$data = [
        'inputTable' => $dataFromDB->toArray()
    ];

唯一需要担心的是,在变量$data中,您有列的值 field1field2 等。 试过了,它有效。