如何将大量数据作为输入参数发送到 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中的数据格式化为临时table作为输入参数?

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.

是否可以将 table 作为输入参数发送到 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 等列的值。试过了,它起作用了。