我的公司内部运行 4GL 应用程序。它已经很老了,没有人真正知道如何改进/开发它,因为开发人员早已不在了。
我需要对我的 Magento 网上商店进行简单的 SOAP 调用。网上有大量多种语言的示例,但我找不到一个 4GL (OpenEdge ABL) 示例。
我正在尝试将 SKU 设置为缺货状态。
有没有人有一个简单的例子可供我看,或者至少有一个起点,因为网上关于 4GL 的信息似乎很少。
我需要在 PHP 中调用的示例:
<?php
$proxy = new SoapClient('http://www.domain.com/api/soap/?wsdl');
$sessionId = $proxy->login('admin', 'password');
$proxy->call($sessionId, 'product_stock.update', array('sku123', array('qty'=>50, 'is_in_stock'=>1)));
对于版本 10.2B,Progress ABL 内置了对使用 Web 服务的支持。
这是有关如何在 ABL 中为基于 SOAP 的 Web 服务创建客户端的基本教程。这不是最佳实践,也不是完整的。只是一个快速入门指南。
有一个可通过命令行使用的内置工具,可让您分析 WSDL 并创建有关可用服务、数据类型、语法等的文档。在您的 wsdl 上调用它,如下所示:
proenv> bprowsdldoc yourwsdl-file c:\temp\docs
wsdl 可以是本地的或远程的。如果是远程,则指定 URL;如果是本地,则可以仅指定本地完整路径。 html 格式的文档最终将位于 c: emp\docs 中。打开该文件夹中的index.html。
在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 服务的框架。唯一的问题是您需要处理输入和输出数据。
根据 Web 服务的构建方式,这可能很简单(如果您仅输入和输出简单数据,如字符串和数字),也可能非常复杂(如果您输入和输出整个 xml 文档)。您在第一步中创建的文档列出了所有数据类型(在index.html 文档中),但它不提供有关如何创建任何所需的xml 文档的任何支持。有关于如何使用 xml 的具体进度文档...
更好的方法是查看官方文档。在那里您将找到上述所有内容以及更多内容 - 如何处理错误等。
这里是所有10.2B文档的概述,这里是名为Web服务的PDF。
Here 是 Progress 知识库中完整(但实际上不太好)示例的链接,其中创建并处理客户端和相应的请求/响应 xml。
看这些章节:
这基本上会带您完成从开始到开始的整个过程。