Tutoriels

Appeler un programme RPG IBM i depuis une application console avec NTi

ParQuentin Destrade

image d’illustration de l’article

Contenu détaillé de l’article:Appeler un programme RPG IBM i depuis une application console avec NTi

Un exemple concret et simple pour appeler un programme RPG existant sur IBM i depuis une application console C#, avec NTi Data Provider.

Les programmes RPG sur IBM i ont prouvé leur valeur depuis des décennies et constituent souvent le cœur de métier de l'entreprise. Plutôt que de les remplacer, il est possible de les intégrer progressivement dans des environnements modernes comme .NET, en préservant ce qui fonctionne et en y ajoutant la flexibilité des technologies actuelles.

C'est ce que propose NTi Data Provider : il permet d'appeler un programme RPG existant depuis .NET, sans toucher au code IBM i.

Le scénario : mettre à jour un nom dans la base de données NORTHWIND

L'exemple ci-dessous montre comment appeler depuis .NET un programme RPG existant, PGMCUST01, qui met à jour un nom de client dans la base de données NORTHWIND, depuis une application console C#.

Deux paramètres sont saisis : l'ID du client et le nouveau nom. Ces informations sont transmises au programme RPG qui effectue la mise à jour directement dans la base de données.

Une application affichant les enregistrements de la table CUSTOMER dans NORTHWIND permet de visualiser le résultat. Le champ "nom" lié à l'ID ALFKI est initialement vide :

Tableau clients Blazor avec ID, entreprise et noms

Étape 1 - Vérifier les paramètres attendus par le programme RPG

En premier lieu, on vérifie les paramètres attendus par le programme en effectuant une prise de DUMP lors de son exécution.

Fichier spoule affichant les structures SQL et pointeurs sur IBM i

Le DUMP indique que deux paramètres sont requis.

Étape 2 - Établir la connexion NTi

Un objet de type NTiConnection est créé pour interagir avec l'IBM i depuis l'application console :

string connectionString = "server=Server;user=User; Password=Pwd;";
var conn = new NTiConnection(connectionString );
conn.Open();

Étape 3 - Déclarer les paramètres

Le programme PGMCUST01 attend deux paramètres :

  • L'ID du client : 5 positions de caractère
  • Le nouveau nom : 30 positions de caractère.

Ces paramètres sont préparés sous forme d'une liste d'objets NTiProgramParameter, alimentée par les saisies console :

Console.WriteLine($"Entrez l'ID du client:");
var customerId = Console.ReadLine();

 Console.WriteLine($"Entrer le nouveau nom:");
 var newName = Console.ReadLine();

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

Étape 4 - Préparer l'environnement et appeler le programme RPG

La bibliothèque courante est initialisée via la commande CL CHGCURLIB :

 _conn.ExecuteClCommand("CHGCURLIB NORTHWIND");

💡 Si les bibliothèques nécessaires ont été définies dans le profil utilisateur IBM i utilisé pour la connexion, les commandes CHGCURLIB et ADDLIBLE ne sont pas obligatoires.

Le programme PGMCUST01 est ensuite appelé avec NTi :

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

La bibliothèque NORTHWIND peut être remplacée par *LIBL ou *CURLIB. La session ouverte en C# est comparable à celle d'un écran 5250, NTi s'intègre nativement dans l'environnement IBM i.

Étape 5 - Code complet et résultat

Après avoir exécuté le programme, le champ correspondant dans la base de données NORTHWIND est mis à jour avec le nouveau nom saisi. Nous pouvons vérifier visuellement le résultat dans la console, et les changements en direct sur une application front:

using Aumerial.Data.Nti;

class Program
{
    static void Main()
    {
        string connectionString = "server=Server;user=User; Password=Pwd;";
        var conn = new NTiConnection(connectionString );
        conn.Open();

        Console.WriteLine($"Entrez l'ID du client:");
        var customerId = Console.ReadLine();
        Console.WriteLine($"Entrer le nouveau nom:");
        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($"nom du client: {result}");
    }
}

Console .NET affichant le résultat d’un programme RPG

Conclusion

Cet exemple est volontairement simple, mais il illustre l'essentiel : il est possible de conserver des applicatifs RPG éprouvés, qui constituent le savoir-faire métier de l'entreprise, tout en les intégrant dans un environnement .NET moderne. Les programmes RPG peuvent ainsi être appelés depuis des applications console, des API, des interfaces web, ou des environnements conteneurisés tel que Docker. Le code RPG reste intact, et s'ouvre à de nouveaux usages.


Quentin Destrade

Démarrez dès maintenant

Récupérez votre licence d’essai gratuite en ligne
et connectez vos applications .NET à votre IBM i en quelques minutes.

Créez votre compte

Connectez-vous au portail Aumerial, générez votre licence d’essai et activez NTi sur votre IBM i en quelques instants.

Démarrer l’essai

Ajouter NTi à votre projet

Installez NTi Data Provider depuis NuGet dans Visual Studio et référencez-le dans votre projet .NET.

Voir la documentation

Besoin d’aide ?

Si vous avez des questions sur nos outils ou sur les options de licence, notre équipe est disponible pour vous aider.

Nous contacter
30 jours d’essai gratuit activation immédiate sans engagement aucun composant à installer côté IBM i