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 ?