进度 - 从Web服务获取完整响应

时间:2017-03-17 09:58:25

标签: web-services soap response progress-4gl openedge

我在进度OpenEdge中从SOAP WS获得完整响应时遇到问题。 “bprowsdldoc”app为DATASET生成了完整的调用和输出结构,但在DATASET中我只有“document”类型的最后一个元素。 响应如下:

<GetDocumentsResponse>
     <documentsCount>3</documentsCount>
     <document>
        <content filename="file1.xml" mime="application/xml"> [base64] </content>
     </document>
     <document>
        <content filename="file2.xml" mime="application/xml"> [base64] </content>
     </document>
     <document>
        <content filename="file3.xml" mime="application/xml"> [base64] </content>
     </document>
     <documentsInfo>All done.</documentsInfo>
</GetDocumentsResponse>

我的目标是在输出DATASET中获取所有“文档”元素(计数3只是一个样本)或获得完整响应XML作为LONGCHAR。 任何帮助将不胜感激。

修改

Web服务是我公司内部的并且称之为VPN连接,所以我不能给你链接。 但是bprowsdldoc为方法“GetDocuments”生成了这样的代码:

DEFINE VARIABLE dateStart AS DATE NO-UNDO.
DEFINE VARIABLE dateEnd AS DATE NO-UNDO.
DEFINE VARIABLE documentsCount AS INT64 NO-UNDO.

DEFINE TEMP-TABLE document NO-UNDO
    FIELD docId AS CHARACTER.

DEFINE TEMP-TABLE content NO-UNDO
    FIELD filename AS CHARACTER 
        XML-NODE-TYPE "ATTRIBUTE" 
    FIELD mime AS CHARACTER 
        XML-NODE-TYPE "ATTRIBUTE" 
    FIELD content_Text AS RAW 
        XML-NODE-TYPE "TEXT" 
    FIELD document_id AS RECID 
        XML-NODE-TYPE "HIDDEN" .  

DEFINE DATASET documentDset 
    XML-NODE-TYPE "HIDDEN" 
    FOR document, content
    PARENT-ID-RELATION RELATION1 FOR document, content
        PARENT-ID-FIELD document_id.

DEFINE VARIABLE documentsInfo AS CHARACTER NO-UNDO.

RUN GetDocuments IN hDocumentHandlingPort(INPUT dateStart, INPUT dateEnd, OUTPUT documentsCount, OUTPUT DATASET documentDset, OUTPUT documentsInfo).

调用此方法后,我得到了对变量 documentsCount documentsInfo 的正确响应,但在TEMP-TABLE 内容中我只有一行<来自回复的em> document 元素(2017-03-16至2017-03-16期间应该有3个作为我帖子顶部的示例回复)。

WSDL中的响应如下所示:

<xs:element name="GetDocumentsResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" name="documentsCount" type="xs:long"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="document" type="ns1:documentType"/>
            <xs:element minOccurs="0" name="documentsInfo" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

我认为这个问题可能与元素文档 maxOccurs 属性有关 - 它是无界的,也许应该有一些数值......

你能帮助mi处理这个问题吗?

1 个答案:

答案 0 :(得分:0)

由于知识库中描述的PSC00323593缺陷,这种情况是一个错误。但是在黑暗中总是有光,所以也有解决方法:

  

使用带有-show100style参数的WSDL Analyzer(bprowsdldoc)   生成文档。使用旧语法按预期工作,   返回所有预期记录。

     

在遇到的场景中,备用文档使用类型   LONGCHAR参数。然后可以组合来自的代码   原始文档(特别是TEMP-TABLE和DATASET   使用-show100style文档中的代码定义)。该   READ-XML方法用于读取LONGCHAR输出参数   数据集。

     

     

将APPEND选项添加到DATASET参数。

您可以找到完整的文章here

相关问题