进度 - 从 Web 服务获得完整响应
Progress - Get full response from web service
我在从 SOAP WS in Progress OpenEdge 获得完整响应时遇到问题。
"bprowsdldoc" 应用程序生成了对数据集的完整调用和输出结构,但在数据集中我只有 "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>
我的目标是获取输出数据集中的所有 "document" 个元素(3 的计数只是一个示例)或获取作为 LONGCHAR 的完整响应 XML。
任何帮助将不胜感激。
编辑:
Web 服务是我公司内部的,调用它需要 VPN 连接,所以我不能给你 link。
但是 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 content 我只有一行来自响应的 document 元素(例如,从 2017-03-16 到 2017-03-16 的日期应该有 3 个在我的 post).
顶部回复
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>
我认为该问题可能与元素 document 的 maxOccurs 属性有关 - 它是无界的,也许应该有一些数值。 ..
你能帮我解决这个问题吗?
由于知识库中描述的缺陷 PSC00323593,这种情况是一个错误。但是黑暗中总有光明,所以也有解决方法:
Use the WSDL Analyzer (bprowsdldoc) with -show100style parameter to
generate documentation. Using the older syntax works as desired,
returning all expected records.
In the scenario encountered, the alternate documentation uses type
LONGCHAR for parameters. It was then possible to combine code from
original documentation (specifically the TEMP-TABLE and DATASET
definitions) with the code from the -show100style documentation. The
READ-XML method was used to read the LONGCHAR output parameter into
the DATASET.
or
Add APPEND option to the DATASET parameter.
您可以找到完整的文章 here。
我在从 SOAP WS in Progress OpenEdge 获得完整响应时遇到问题。 "bprowsdldoc" 应用程序生成了对数据集的完整调用和输出结构,但在数据集中我只有 "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>
我的目标是获取输出数据集中的所有 "document" 个元素(3 的计数只是一个示例)或获取作为 LONGCHAR 的完整响应 XML。 任何帮助将不胜感激。
编辑:
Web 服务是我公司内部的,调用它需要 VPN 连接,所以我不能给你 link。 但是 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 content 我只有一行来自响应的 document 元素(例如,从 2017-03-16 到 2017-03-16 的日期应该有 3 个在我的 post).
顶部回复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>
我认为该问题可能与元素 document 的 maxOccurs 属性有关 - 它是无界的,也许应该有一些数值。 ..
你能帮我解决这个问题吗?
由于知识库中描述的缺陷 PSC00323593,这种情况是一个错误。但是黑暗中总有光明,所以也有解决方法:
Use the WSDL Analyzer (bprowsdldoc) with -show100style parameter to generate documentation. Using the older syntax works as desired, returning all expected records.
In the scenario encountered, the alternate documentation uses type LONGCHAR for parameters. It was then possible to combine code from original documentation (specifically the TEMP-TABLE and DATASET definitions) with the code from the -show100style documentation. The READ-XML method was used to read the LONGCHAR output parameter into the DATASET.
or
Add APPEND option to the DATASET parameter.
您可以找到完整的文章 here。