· 

RPG-Programm über Web Service aufrufen



Einleitung

Hallo! Mein Name ist Klaus Mödinger und ich bin Kommanditist der comSID GmbH & Co. KG.

 

In diesem Tech Tip zeige ich ein Beispiel dafür, wie man um vorhandene RPG-Programme eine "Web Service-Schale" legen kann. Damit können RPG-Programme von beliebigen Endgeräten aus aufgerufen werden.

 

Die Architektur des Vorschaubilds wird man so in der Praxis nicht haben wollen. ;-) Das Bild soll lediglich symbolisieren, dass RPG-Logik mit einem Web Service-Wrapper drumherum ganz neue Möglichkeiten eröffnet.

 


Das RPG-Programm

Für Demonstrationszwecke kann das Beispiel-RPG nicht einfach genug sein. Dieses hier hängt zwei 10A-Felder zusammen, wobei das erste Feld getrimmt wird:

0001.00  ***********************************************
0002.00  * Project: Website Blog: Tech Tipps
0003.00  * Custom.: ---
0004.00  *
0005.00  * Created: 2020/06/10 K. Moedinger
0006.00  * Changed: ----/--/--
0007.00  *
0008.00  * Purpose: Simple RPG Module that concatenates
0008.01  *          two strings. Used as a demo module
0009.00  *          to be called from Web Service.
0010.00  *
0011.00  * Remarks:
0012.00  ***********************************************
0013.00 H DFTACTGRP(*NO)
0014.00
0015.00  ***********************************************
0016.00 * Prototypes 0017.00 *********************************************** 0018.00 * Main program 0019.00 D cat PR EXTPGM('cat100R') 0020.00 D paString1 10A 0021.00 D paString2 10A 0022.00 D paResult 20A 0023.00 0024.00 *********************************************** 0025.00 * Main program 0026.00 *********************************************** 0027.00 D cat PI 0028.00 D paString1 10A 0029.00 D paString2 10A 0030.00 D paResult 20A 0031.00 0032.00 /FREE 0033.00 0034.00 paResult = %TRIM(paString1) + paString2; 0035.00 DSPLY paResult; 0036.00 0037.00 *INLR = *ON; 0038.00 0039.00 /END-FREE 0040.00

Beim Übersetzen des Programms muss unbedingt der Compilerschalter PGMINFO (*PCML *MODULE) gesetzt werden! Damit wird in das Kompilat eine Schnittstellenbeschreibung eingebunden, die der Web Service-Assistent auswertet.


Den Web Service erzeugen

 

Um den Web Service zu erstellen, loggt man sich mit dem Browser zunächst auf 

http://as400/HTTPAdmin ein. ("as400" durch den Namen oder die IP-Adresse der IBM i ersetzen.)

 

Sofern nicht schon vorhanden, erstellt man einen neuen "Web Services Server". Der in meinem Beispiel heißt "WSERVICE" . Mit "Neuen Service impementieren" startet ein Assistent, mit dem der Web Service in 9 Schritten sprichwörtlich "zusammengeklickt" wird.

 

Es folgen nun neun Screenshots mit diesen 9 Schritten.

 

 


Hat man die 9 Schritte geschafft, wird der Service installiert:


Beispiel-Web Service-Client

Zum Testen des neu erzeugten Web Service schrieb ich mit Visual Studio eine kleine Konsolenapplikationn in C#/.NET 4.6. Ich hätte ebenso Netbeans und Java verwenden können. Den Dienstverweis nannte ich "ServiceCat100R". Hier der Source Code: 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using wsclient_cat100r.ServiceCat100R;   

namespace wsclient_cat100r
{
    class Program
    {
        static void Main(string[] args)
        {
            CAT100RServicesClient cat100r_client = 
                new CAT100RServicesClient();

            catInput input = new catInput();
            input.PASTRING1 = "Hallo";
            input.PASTRING2 = " Welt!";
            input.PARESULT = "";

            catResult result = new catResult();
            result = cat100r_client.cat(input);
            Console.WriteLine(result.PARESULT);

            Console.ReadLine();
        }
    }
}

In Visual Studio braucht man zum Hinzufügen eines Dienstverweises die URL des WSDL. Diese findet sich hier:


Hat man alles richtig gemacht, generiert das Konsolenprogramm diese Ausgabe:


Schlusswort

In diesem Tech Tip wurde an vielen Stellen nicht sehr ins Detail gegangen. Ich hoffe dennoch, dass der grobe Abriss, wie man RPG-Logik in einen Web Service verpacken kann, dem einen oder anderen von Nutzen ist.

Die Dokumentation von IBM sollte beim Arbeiten mit Web Services immer griffbereit sein.

Kommentar schreiben

Kommentare: 0