对于 10.2B 版本,内置支持在 Progress ABL 中使用 Web 服务。
这是关于如何在 ABL 中为基于 SOAP 的 Web 服务创建客户端的基本教程。这不是最佳实践,也不是完整的。只是一个快速入门指南。
1.分析WSDL
有一个通过命令行可用的内置工具,可让您分析 WSDL 并创建有关可用服务、数据类型、语法等的文档。像这样在 wsdl 上调用它:
proenv> bprowsdldoc yourwsdl-file c:\temp\docs
wsdl 可以是本地的或远程的。如果它是远程的,你指定 URL,如果它是本地的,你可以只指定本地的完整路径。html 格式的文档将在 c:\temp\docs 中结束。在该文件夹中打开 index.html。
2.创建一个基本客户端
在 index.html 文档中有许多标题。单击“端口类型”下的链接。在端口类型文档中,您会发现一些有用的数据。
将“连接详细信息”中的示例复制并粘贴到您的进度编辑器中。它应该看起来像这样(服务和过程的名称会有所不同 - 它们在 wsdl 中定义):
DEFINE VARIABLE hWebService AS HANDLE NO-UNDO.
DEFINE VARIABLE hYYY AS HANDLE NO-UNDO.
CREATE SERVER hWebService.
hWebService:CONNECT("-WSDL 'file_or_url_to_wsdl.wsdl'").
RUN XXX SET hYYY ON hWebService.
如果您运行此代码,您的客户端已连接到 Web 服务,但它仍然没有执行任何操作。
在同一份文档的下方,有一个名为“操作(内部程序)详细信息”的标题。这是调用实际 Web 服务的地方。它看起来像下面的代码。它实际上显示了两种进行相同调用的方法,一种是功能调用,一种是程序调用,因此请选择您喜欢的任何内容并将其插入到您的编辑器中(除了旧习惯之外,我通常没有真正的原因使用程序):
DEFINE VARIABLE strXMLRequest AS CHARACTER NO-UNDO.
DEFINE VARIABLE ProcessXMLResult AS CHARACTER NO-UNDO.
FUNCTION ProcessXML RETURNS CHARACTER
(INPUT strXMLRequest AS CHARACTER)
IN hYYY.
/* Function invocation of ProcessXML operation. */
ProcessXMLResult = ProcessXML(strXMLRequest).
/* Procedure invocation of ProcessXML operation. */
RUN ProcessXML IN hYYY (INPUT strXMLRequest, OUTPUT ProcessXMLResult).
现在,结束程序所需要做的就是断开连接并进行清理。所以插入:
hWebService:DISCONNECT().
DELETE OBJECT hWebService.
如果您已经完成了所有步骤,那么您应该有一个用于调用 Web 服务的框架。唯一的问题是您需要处理输入和输出数据。
3. 处理答案和请求
根据 Web 服务的构建方式,这可能很容易(如果您只输入和输出简单数据,如字符串和数字)或相当复杂(如果您输入和输出整个 xml 文档)。您在第一步中创建的文档列出了所有数据类型(在 index.html 文档中),但它没有为您如何创建任何所需的 xml 文档提供任何支持。有关于如何使用 xml 的特定进度文档...
更好的方法是查看官方文档。在那里,您将找到以上所有内容以及更多内容 - 如何处理错误等。
这是所有 10.2B 文档的概述,这里是名为 Web Services 的 PDF。
这是 Progress KnowledgeBase 中一个完整(但实际上不是很好)示例的链接,其中创建并处理了客户端和相应的请求/响应 xml。
看看这些章节:
- 6 - 从 WSDL 创建 ABL 客户端
- 7 - 从 ABL 连接到 Web 服务
- 8 - 从 ABL 调用 Web 服务操作
这基本上将带您完成从开始到开始的整个过程。