从 rpgle 程序进行外部 Web 服务调用

问题描述 投票:0回答:1

我需要编写一个 Rpgle 程序,该程序需要对外部 Web 服务(外部 Web 服务是不同的基于 Java 的系统)进行 POST 调用(SOAP 调用),以便根据某些输入获取发票值。是否有一个内置的 rpgle 子程序,我可以通过它进行此调用。如果是,任何人都可以建议那是什么。如果否,那么有人可以建议如何实现这一目标吗?

如果有合适的答案,我们将不胜感激。

ibm-midrange rpgle rpg
1个回答
0
投票

您最好的起点是这个示例,取自 https://colemaxwell.dev/posts/rest-api-ibmi-qsys2/

SELECT *
    FROM JSON_TABLE(
        QSYS2.HTTP_GET(
            'http://fakestoreapi.com/products?limit=10',
            ''
        ),
        '$' COLUMNS(
            name VARCHAR(75) PATH 'lax $.title',
            totalRatings INT PATH 'lax $.rating.count'
        )
    );

将其嵌入到您的 RPG 程序中。

本例接收JSON格式;您没有在问题中说明您使用的服务返回哪种数据格式。

您提到您想使用 POST。严格来说,这应该是一个 GET 请求,根据这个(非常好的文档):https://www.ibm.com/docs/en/i/7.4?topic=programming-http-functions-overview但是POST 请求也可以工作。还有一个 QSYS2.HTTP_POST SQL 函数,其工作方式类似。

在原始 SQLRPGLE 程序中实现,如下所示(根据您的需要进行调整):

**FREE
DCL-S sUrlQuery VARCHAR(256);
DCL-S iLimit INT(10);
DCL-S sName CHAR(10);
DCL-S iTotalRatings INT(10);

iLimit = 10;
sUrlQuery = 'http://fakestoreapi.com/products?' + 
            'limit=' + %CHAR(iLimit);
EXEC SQL
   SELECT name, totalRatings INTO :sName, :iTotalRatings
   FROM JSON_TABLE(
           QSYS2.HTTP_GET(:sUrlQuery,''),
           '$' COLUMNS(
               name VARCHAR(75) PATH 'lax $.title',
               totalRatings INT PATH 'lax $.rating.count'
           )
        );

DSPLY sName;
DSPLY iTotalRatings;

*INLR = '1';

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.