Contexte
Naviguer dans l'univers des systèmes IBM i, et notamment dans la gestion des fichiers spool (ou fichiers d'attente d'impression) peut souvent s'avérer complexe, surtout lorsque l'on cherche à les intégrer dans des applications modernes. Historiquement, cette intégration nécessite une connaissance approfondie des API système IBM i, limitant ainsi l'accès à une niche de développeurs spécialisés.
Avec NTi Toolbox, il est désormais possible de simplifier et d'automatiser cette gestion directement depuis un environnement .NET en quelques lignes seulement, grâce à l'objet NTiSpooledFile et aux méthodes ListSpooledFiles() et GetSpooledFileData() qui encapsulent la complexité des appels API sous-jacents.
Installation
NTi Toolbox s'installe via NuGet :
dotnet add package Aumerial.Toolbox
Puis importer l'espace de noms :
using Aumerial.Toolbox;Étape 1 - Ouvrir la connexion
Le service DBConnectionService gère la connexion avec l'IBM i et initialise NTiConnection :
public class SpoolFilesService
{
private readonly NTiConnection _conn;
public SpoolFilesService(DbConnectionService dbConnection)
{
_conn = dbConnection.conn;
}
}Étape 2 - Lister et filtrer les fichiers spool
La méthode ListSpooledFiles() est conçue pour faciliter le listage des fichiers spool en fonction de critères spécifiques : la file d'attente de sortie, l'utilisateur, le type de formulaire et les données utilisateur :
public List ListAndFilterSpooledFiles(
string filterOutqueue,
string filterUser,
string filterFormType,
string filterUserData)
{
_conn.Open();
var spooledFiles = _conn.ListSpooledFiles(filterOutqueue, filterUser, filterFormType, filterUserData);
_conn.Close();
return spooledFiles;
} Étape 3 - Récupérer et télécharger un fichier spool
Pour chaque fichier spool identifié, les données peuvent être extraites grâce à GetSpooledFileData(), qui interagit directement avec l'objet NTiSpooledFile :
public byte[] DownloadSpooledFile(NTiSpooledFile file)
{
try
{
_conn.Open();
return _conn.GetSpooledFileData(file);
}
catch (Exception ex)
{
Console.WriteLine($"Erreur lors de la récupération du fichier : {ex.Message}");
return null;
}
finally
{
if (_conn.State == ConnectionState.Open)
{
_conn.Close();
}
}
}Étape 4 - Contrôleur d'API
Le contrôleur expose les fonctionnalités de listage et de téléchargement à n'importe quelle interface web. Pour le téléchargement, un objet contenant les métadonnées est passé en paramètre afin d'identifier le fichier à récupérer :
[HttpPost("downloadFile")]
public IActionResult DownloadFile([FromBody] NTiSpooledFile file)
{
try
{
var data = _spoolFilesService.DownloadSpooledFile(file);
if (data == null || data.Length == 0)
{
return NotFound("Fichier non trouvé.");
}
return File(data, "application/octet-stream", $"{file.FileName}.afp");
}
catch (Exception ex)
{
return StatusCode(500, $"Erreur : {ex.Message}");
}
}Visualisation avec AFP Workbench Viewer
Une fois le fichier spool téléchargé, il peut être visualisé avec AFP Workbench Viewer for Windows, disponible gratuitement :

Conclusion
Avec NTi Toolbox, développer des solutions sur mesure pour la gestion des fichiers spool sur IBM i devient non seulement plus rapide mais aussi plus simple. En quelques lignes de C#, il est possible de mettre en place une solution efficace et facilement adaptable, sans expertise des API système requise et sans complexité technique ajoutée.
Quentin Destrade