如何将大量数据作为输入参数发送到 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 服务?如何发送?
- 通过 JSON 将数据发送到您的 WSA。
- 将 "parm1" 更改为 LONGCHAR
- 在你的程序中,定义了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
中,您有 field1
、field2
等列的值。试过了,它起作用了。
当我从 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 服务?如何发送?
- 通过 JSON 将数据发送到您的 WSA。
- 将 "parm1" 更改为 LONGCHAR
- 在你的程序中,定义了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
中,您有 field1
、field2
等列的值。试过了,它起作用了。