Introduction
Les APIs de l'IBM i offrent de nombreuses fonctionnalités intéressantes tant pour l'administration que pour des tâches spécifiques comme la gestion des fichiers spoules.
Je vais vous présenter brièvement comment en quelques lignes et sans difficulté on peut appeler une API IBM i grâce à NTi.
Choix d'une API: QSYS.QCMDCHK
Pour cet exemple, nous allons utiliser l'API QCMDCHK de la bibliothèque QSYS. Elle permet de vérifier la syntaxe et la validité d'une commande CL avant une éventuelle exécution.
Premier reflexe, allons voir sa documentation ici
On y découvre que QCMDCHK attend deux paramètres en entrée:
- 1 - Command string - I/O - Char(*)
- 2 - Length of command string - Input - Packed(15, 5)
Ces paramètres correspondent respectivement à la commande à vérifier et sa longueur en nombre de caractères.
Utilisation de NTi
Dans cet exemple, nous allons appeler cette API pour tester la validité de la commande suivante:
CRTLIB CLIENTS
Etape 1: Etablir la connexion NTi
Tout d'abord, nous créons un objet de type NTiConnection à partir duquel nous pourrons appeler l'API:
var conn = new NTiConnection(connectionString);
conn.Open();
Etape 2: Déclaration des paramètres
Nous devons ensuite préparer les différents paramètres qui seront passés à notre API en créant une liste d'objets de type NTiParameter où chaque élément de la liste correspond à un paramètre à fournir à l'API:
var cmd = "CRTLIB CLIENTS";
var parms = new List<NTiProgramParameter>()
{
new NTiProgramParameter(cmd, cmd.Length),
new NTiProgramParameter(cmd.Length, 15, 5)
};
NTi prend en charge tous les types de paramètres: entiers, décimal packé, chaînes de caractères...
Etape 3: Appeler l'API
Enfin, il ne nous reste plus qu'à effectuer l'appel de l'API:
conn.CallProgram("QSYS", "QCMDCHK", parms);
En résumé
L'appel de QCMDCHK est donc réalisé à partir de ce code:
var conn = new NTiConnection(connectionString);
conn.Open();
var cmd = "CRTLIB CLIENTS";
var parms = new List<NTiProgramParameter>()
{
new NTiProgramParameter(cmd, cmd.Length),
new NTiProgramParameter(cmd.Length, 15, 5)
};
conn.CallProgram("QSYS", "QCMDCHK", parms);
Lorsque l'on exécute ces quelques lignes, deux possibilités:
✅ La commande est valide: Dans ce cas, aucune erreur n'est levée, code de retour à 0.
❌La commande est incorrecte: Dans ce cas, une erreur est levée côté C# avec un code CPFXXXX accompagné de l'explication. On gère ensuite cette erreur en fonction du cas d'utilisation.
Conclusion
Avec NTi, appeler une API système se fait en quelques lignes seulement. On peut envisager toute sorte de traitements en ne développant qu'en C# et sans jamais passer par un écran vert. En couplant ceci aux commandes CL et aux services SQL, vos tâches d'administration IBM i peuvent s'automatiser et se réaliser dans des interfaces utilisateur modernes et intuitives.
L'intégration de l'IBM i et de vos procédures se fait en toute transparence. Ne perdez plus de temps et utilisez des langages de programmation connus de tous pour sécuriser vos investissements IBM i et gagner en efficacité !
Ce cas est relativement simple car nous n'avons eu à fournir que deux paramètres mais tout fonctionne de la même manière, peu importe la complexité de l'API utilisée.
Pour en savoir plus et essayer NTi, n'hésitez pas à me contacter.
Rémi Rouillot