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

时间:2016-01-26 12:41:26

标签: php soap progress-4gl

当我从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服务以及如何?

2 个答案:

答案 0 :(得分:1)

  1. 通过JSON将数据发送到您的WSA。
  2. 改变" parm1"到LONGCHAR
  3. 在您的程序中,定义TT,然后使用READ-JSON()方法将数据导入TT。在您的情况下,您将parm1替换为文件名,并更改" file" to" longchar"。
  4. 有关此代码示例和相关文档,请参阅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).
    

答案 1 :(得分:0)

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

我只能扭转整个故事。

因此,程序代码保持不变

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等的值。尝试了它并且它有效。