RPG .NET: IBM i RPG-Programme in C# mit NTi aufrufen

Ich werde Ihnen zeigen, wie es sehr einfach möglich ist, ein bestehendes RPG-Programm auf IBM i mit NTi aufzurufen. Dieser Ansatz ermöglicht es, Legacy-Systeme zu modernisieren und in moderne Umgebungen wie .NET zu integrieren, wobei die Qualität der bestehenden Dienste und Anwendungen erhalten bleibt.

Illustrationsbild zu Artikel

RPG-Programme auf IBM i sind nach wie vor das Herzstück vieler Unternehmenssysteme und bilden eine solide und zuverlässige Grundlage für geschäftskritische Abläufe. Angesichts des Drucks, ihre Infrastruktur zu modernisieren und weiterzuentwickeln, haben viele Unternehmen versucht, dieses Erbe zu ersetzen, wobei viele dieser Projekte auf große Hindernisse gestoßen sind: die Komplexität der Aufgabe, große Mengen undokumentierten Codes und vor allem eine hohe technische Verschuldung. Die meisten dieser Bemühungen endeten in halbherzigen Anwendungen oder in teuren und unsicheren ERP-Integrationsprojekten.

NTi bietet eine ideale Lösung, um dieses Erbe zu bewahren und aufzuwerten, indem bestehende RPG-Programme in moderne Umgebungen wie .NET integriert werden.Mit nur wenigen Zeilen Code ist es möglich, das RPG mit C# zusammenarbeiten zu lassen und so eine sanfte Entwicklung hin zu moderneren Technologien zu ermöglichen, während das Bewährte erhalten bleibt.

Das Szenario: Aktualisieren eines Vornamens in der NORTHWIND-Datenbank.

Wir werden sehen, wie man von .NET aus ein bestehendes RPG-Programm aufruft, das den Namen eines Kunden in der NORTHWIND-Datenbank von einer C#-Konsolenanwendung aus aktualisiert.

Dies ist ein sehr einfaches Beispiel, bei dem wir die Kunden-ID und den neu hinzuzufügenden Namen als Eingabeparameter eingeben. Diese Informationen werden dann vom RPG-Programm verwendet, um den Namen des Kunden in der Datenbank zu aktualisieren.

Ich habe bereits eine Anwendung, die die Datensätze der Tabelle CUSTOMER in NORTHWIND in Tabellenform anzeigt. Im Moment ist das Feld "name", das mit der ID "ALFKI" verknüpft ist, leer:

Blazor-Kundentabelle mit ID, Firma und Namen

Schritt 1: Überprüfen Sie die vom RPG-Programm erwarteten Parameter.

Zunächst überprüfen wir die erwarteten Parameter des Programms, indem wir während der Ausführung des Programms eine DUMP-Aufnahme machen.

IBM i Spooldatei mit SQL-Strukturen

Der DUMP zeigt an, dass zwei Parameter erforderlich sind.

Schritt 2: Die NTi-Verbindung herstellen.

Auf der C#-Seite öffne ich ein Konsolenprojekt, in dem ich ein Objekt vom Typ NTiConnection erstelle, mit dem wir von unserer Anwendung aus mit unserer IBM i interagieren können.

string conn = "server=***.***.**.**;user=***************; Password=******************************;";
var _conn = new NTiConnection(conn);
_conn.Open();
Console.WriteLine("Verbindung hergestellt");

Schritt 3: Deklaration der Parameter.

Das RPG-Programm PGMCUST01 erwartet zwei Parameter (wie in Schritt 1 beschrieben).

  • Die Kunden-ID: 5 Zeichenpositionen.
  • Der neue Name: 30 Zeichenpositionen.

Wir bereiten diese Parameter vor, indem wir eine Liste von Objekten des Typs NTIProgramParameter erstellen.

Zunächst rufen wir die Kunden-ID und den neuen Vornamen über die Konsole ab und fügen sie dann der Parameterliste hinzu, die an das RPG-Programm übergeben wird.

Console.WriteLine($"Geben Sie die Kunden-ID ein");
var customerId = Console.ReadLine();

 Console.WriteLine($"Geben Sie den neuen Namen ein:");
 var newName = Console.ReadLine();

 var parms = new List()
 {
     new NTiProgramParameter(customerId, 5),
     new NTiProgramParameter(newName, 30 )
 };

Schritt 4: Vorbereiten der Laufzeitumgebung und Aufrufen des RPG-Programms.

Initialisieren Sie zunächst die aktuelle Bibliothek, in diesem Fall die Bibliothek "NORTHWIND", mit dem Befehl CHGCURLIB NORTHWIND.

 _conn.ExecuteClCommand("CHGCURLIB NORTHWIND");

💡Hinweis: Wenn die für die Ausführung des Programms erforderlichen Bibliotheken auf der IBM i in der Verwaltung des für die Verbindung verwendeten Profils festgelegt wurden, sind die Befehle "CHGCURLIB" und "ADDLIBLE" nicht erforderlich.

Nachdem wir die Einstellungen vorgenommen haben, rufen wir das Programm PGMCUST01 mithilfe von NTi auf.

  _conn.CallProgram("NORTHWIND", "PGMCUST01", parms);

💡Hinweis: Die Angabe der Laufzeitbibliothek "NORTHWIND" hätte man sich sparen und durch "*LIBL" oder "*CURLIB" ersetzen können.

Hier unterscheidet sich NTi von anderen Produkten in dem Sinne, dass die im C#-Code geöffnete Sitzung mit der eines 5250-Bildschirms vergleichbar ist.

Schritt 5: Validierung der Ergebnisse.

Nachdem Sie das Programm ausgeführt haben, wird das entsprechende Feld in der NORTHWIND-Datenbank mit dem neu eingegebenen Namen aktualisiert. Wir können das Ergebnis visuell in der Konsole und die Änderungen live in einer Front-End-Anwendung überprüfen:

using Aumerial.Data.Nti;

class Program
{
    static void Main()
    {
        // Verbindung 

        string conn = "server=*********;user=********; Password=*************;";
        
        var _conn = new NTiConnection(conn);
        _conn.Open();
        Console.WriteLine("Verbindung hergestellt");

        Console.WriteLine($"Geben Sie die Kunden-ID ein");
        var customerId = Console.ReadLine();

        Console.WriteLine($"Geben Sie den neuen Namen ein:");
        var newName = Console.ReadLine();

        
        var parms = new List()
        {
            new NTiProgramParameter(customerId, 5),
            new NTiProgramParameter(newName, 30 )
        };


        _conn.ExecuteClCommand("CHGCURLIB NORTHWIND");
 
        _conn.CallProgram("NORTHWIND", "PGMCUST01", parms);

        string result = parms[1].GetString();

        Console.WriteLine($"Name des Klienten: {result}");
    }
}

.NET-Konsole mit RPG-Programmergebnis

Zusammenfassend

Es ist möglich, gut funktionierende und bewährte Legacy-Anwendungen, die die Identität und das einzigartige Know-how Ihres Kerngeschäfts ausmachen, beizubehalten und sie gleichzeitig in eine moderne IT-Umgebung zu integrieren.

Dieser hybride Ansatz bietet das Beste aus beiden Welten: die Zuverlässigkeit und Robustheit von IBM i-Systemen in Kombination mit der Flexibilität und Skalierbarkeit moderner Technologien wie .NET. RPG-Programme, wie sie hier genannt werden, können in Containerumgebungen wie Docker oder Red Hat OpenShift ausgeführt und in jeder Art von .NET-Anwendung verwendet werden.

Das hier vorgestellte Beispiel ist einfach, aber es bietet einen Einblick in das Potenzial von NTi, Werte rund um die Ressourcen aus diesem geschäftlichen Backoffice zu schaffen und so sicherzustellen, dass das, was heute bei Ihnen funktioniert, auch morgen noch funktioniert - und zwar mit der Effizienz, die Sie erwarten.

Zögern Sie nicht, uns zu kontaktieren, um NTi auszuprobieren!


Quentin Destrade