Introducción
Navegar por el mundo de los sistemas IBM i, y en particular por la gestión de los archivos spool (o archivos de cola de impresión), puede resultar a menudo complejo, especialmente cuando se pretende integrarlos en aplicaciones modernas. Históricamente, dicha integración ha requerido un profundo conocimiento de las API de los sistemas IBM i, lo que ha limitado el acceso a un nicho de desarrolladores especializados.
Con NTi, ahora es posible simplificar y automatizar esta gestión directamente desde un entorno .NET en unas pocas líneas.
En este artículo, presento un nuevo método integrado en NTi para listar, filtrar y descargar archivos spool utilizando el objeto NTiSpooledFile.
Contexto
Para permitir una gestión simplificada de los archivos spool con aplicaciones .NET, NTi encapsula específicamente tres APIs del sistema: QUSCRTUS, QUSLSPL, y QUSRTVUS, proporcionando una abstracción que facilita su uso sin requerir profundos conocimientos de los comandos de IBM i.
- QUSCRTUS : crea un espacio de usuario temporal para almacenar datos.
- QUSLSPL : enumera los archivos de spool en función de criterios definidos.
- QUSRTVUS : recupera datos del espacio de usuario creado.
Uso de NTi para gestionar ficheros spooled
El método ListSpooledFiles() está diseñado para facilitar el listado de ficheros spooled según criterios específicos como cola de salida, usuario, tipo de formulario y datos de usuario.
Paso 1: Abrir la conexión NTi
En nuestra aplicación, el DBConnectionService gestiona la conexión con el IBM i, extrayendo la cadena de conexión necesaria e inicializando NTiConnection.
public class SpoolFilesService
{
private readonly NTiConnection _conn;
public SpoolFilesService(DbConnectionService dbConnection)
{
_conn = dbConnection.conn;
}
}
Paso 2: Listado de ficheros en cola
Ahora podemos utilizar NTiSpooledFile para consultar y listar los ficheros spooled disponibles. Esto se hace llamando al método ListSpooledFiles(), que filtra los ficheros según los criterios especificados por los parámetros.
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;
}
Etape 3: Récupération et téléchargement des données des fichiers spoules
Pour chaque fichier spoule identifié, les données peuvent être extraites ou téléchargées en utilisant la méthode 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($"Error al recuperar el archivo : {ex.Message}");
return null;
}
finally
{
if (_conn.State == ConnectionState.Open)
{
_conn.Close();
}
}
}
Controlador API
Un controlador API se utiliza para recuperar y gestionar archivos spool, permitiendo a cualquier interfaz web listar o descargar archivos spool con los parámetros deseados.
Para la descarga, se pasa como parámetro un objeto que contiene metadatos para identificar el archivo que se va a descargar.
[HttpPost("downloadFile")]
public IActionResult DownloadFile([FromBody] NTiSpooledFile file)
{
try
{
var data = _spoolFilesService.DownloadSpooledFile(file);
if (data == null || data.Length == 0)
{
return NotFound("Archivo no encontrado.");
}
return File(data, "application/octet-stream", $"{file.FileName}.afp");
}
catch (Exception ex)
{
return StatusCode(500, $"Error interno del servidor: {ex.Message}");
}
}
Utilizar el Visor de ADP Workbench para ver archivos Spoule
Una vez descargado nuestro archivo spoule, para visualizarlo eficientemente de forma simplificada, utilizamos AFP Workbench Viewer para Windows disponible aquí.
Conclusión
Con NTi, el desarrollo de soluciones a medida para la gestión de archivos spool en IBM i no sólo es más rápido, sino también más sencillo y eficaz. Como puede ver en nuestro ejemplo, en unas pocas líneas hemos sido capaces de poner en marcha una solución eficaz y fácilmente adaptable que simplifica considerablemente la gestión de los archivos spool. Este enfoque puede personalizarse para responder a las necesidades específicas de sus proyectos, sin complejidad técnica.
Para saber más y probar NTi, no dude en ponerse en contacto con nosotros.
Quentin Destrade