Appeler un programme IBM i (AS/400) en C# (.NET) avec NTi
Introduction
Ce tutoriel montre comment appeler un programme IBM i (AS/400) depuis une application C# (.NET) en utilisant NTi Data Provider.
Appeler un programme IBM i depuis une application .NET permet de réutiliser la logique métier existante (RPG, CL) sans avoir à la réécrire. Cela permet notamment d’intégrer des programmes RPG existants dans des applications modernes sans modifier le code legacy.
Avec NTi, vous pouvez depuis du code C# :
- définir les paramètres d’entrée, de sortie et d’entrée/sortie
- appeler un programme IBM i avec
CallProgram - récupérer les données retournées
Description du programme et des paramètres
Le programme MYPGM de la bibliothèque MYLIB attend les paramètres suivants :
| Description | Type | Direction | Valeur |
|---|---|---|---|
| Texte 1 | CHAR(10) | Input | Hello |
| Texte 2 | CHAR(10) | Input | World |
| Position de départ | BYTE(1) | Input | 0x00 |
| Longueur de la variable retour | BYTE(4) | Input | 128 |
| Variable retour | CHAR(*) | Output | vide |
| Code d'erreur | CHAR(50) | InputOutput | vide |
On souhaite lire différentes valeurs dans la variable retour composée ainsi:
| Offset | Longueur | Description |
|---|---|---|
| 0 | 64 | Message 1 |
| 64 | 64 | Message 2 |
L'appel serait réalisé avec le code suivant:
Étape 1 - Ouvrir la connexion
Déclarez une instance de NTiConnection et ouvrez la connexion :
using var conn = new NTiConnection("server=serverName;user=userName;password=password");
conn.Open();Étape 2 - Créer les paramètres
En vous référant à la description des paramètres ci-dessus, créez la liste des paramètres avec leurs valeurs :
List<NTiProgramParameter> parms = new List<NTiProgramParameter> () {
new NTiProgramParameter("Hello", 10).AsInput(), // CHAR(10) INPUT
new NTiProgramParameter("World", 10).AsInput(), // CHAR(10) INPUT
new NTiProgramParameter(new byte[] {0x00}).AsInput(), // BYTE(1) INPUT
new NTiProgramParameter(128).AsInput(), // BYTE(4) INPUT
new NTiProgramParameter("", 128).AsOutput(), // CHAR(128) OUTPUT
new NTiProgramParameter("", 50) // CHAR(50) I/OÉtape 3 - Appeler le programme
Appelez le programme grâce à la méthode CallProgram() de NTiConnection :
conn.CallProgram("MYLIB", "MYPGM", parms);Étape 4 - Récupérer les données retournées
Une fois le programme appelé, récupérez les données retournées dans la variable retour (paramètre n°5) :
string message1 = parms[4].GetString(0, 64);
string message2 = parms[4].GetString(64, 64);Récapitulatif
Code complet pour appeler un programme IBM i depuis .NET avec NTi :
using var conn = new NTiConnection("server=serverName;user=userName;password=password");
conn.Open();
var parms = new List
{
new NTiProgramParameter("Hello", 10).AsInput(),
new NTiProgramParameter("World", 10).AsInput(),
new NTiProgramParameter(new byte[] {0x00}).AsInput(),
new NTiProgramParameter(128).AsInput(),
new NTiProgramParameter("", 128).AsOutput(),
new NTiProgramParameter("", 50)
};
conn.CallProgram("MYLIB", "MYPGM", parms);
string message1 = parms[4].GetString(0, 64);
string message2 = parms[4].GetString(64, 64);Et maintenant ?
- Exécuter une commande CL - exécuter une commande CL et gérer les erreurs
- Procédure stockée - appel de procédure stockée SQL avec Dapper et DataReader
- NTiProgramParameter - référence complète de la classe de paramètres