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 :

É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.

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
CHGCURLIBetADDLIBLEne sont pas obligatoires.
Le programme PGMCUST01 est ensuite appelé avec NTi :
_conn.CallProgram("NORTHWIND", "PGMCUST01", parms);
La bibliothèque
NORTHWINDpeut être remplacée par*LIBLou*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}");
}
}

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