Los programas RPG en IBM i siguen estando en el corazón de muchos sistemas de gestión empresarial, proporcionando una base sólida y fiable para operaciones de misión crítica. Ante la presión por modernizar y hacer evolucionar sus infraestructuras, muchas empresas han intentado sustituir este legado, y muchos de estos proyectos se han topado con grandes obstáculos: la complejidad de la tarea, un vasto volumen de código sin documentar y, sobre todo, una importante deuda técnica. La mayoría de las veces, estos esfuerzos han terminado con aplicaciones isoperimétricas que no avanzan realmente, o con proyectos de integración de ERP costosos e inciertos.
NTi ofrece una solución ideal para preservar y mejorar este patrimonio integrando los programas RPG existentes en entornos modernos como .NET. Con unas pocas líneas de código, es posible hacer que el RPG funcione con C#, lo que permite una evolución fluida hacia tecnologías más modernas, preservando al mismo tiempo lo que ha demostrado su valía.
Escenario: Actualización de un nombre de pila en la base de datos NORTHWIND.
Vamos a ver como llamar desde .NET, a un programa existente RPG que actualiza un nombre de cliente en la base de datos NORTHWIND desde una aplicación de consola C#.
Se trata de un ejemplo muy sencillo en el que introduciremos como parámetros de entrada el ID del cliente y el nuevo nombre a añadir. Esta información será utilizada por el programa RPG para actualizar el nombre del cliente en la base de datos.
Ya tengo una aplicación que muestra los registros de la tabla Clientes en NORTHWIND en forma de tabla. En este momento el campo "nombre" vinculado al ID "ALFKI" está vacío:
Paso 1: Comprobar los parámetros esperados por el programa RPG.
En primer lugar, comprobamos los parámetros esperados por el programa tomando un DUMP cuando se ejecuta.
El DUMP indica que se necesitan dos parámetros.
Paso 2: Estableciendo la conexión NTi
En la parte de C#, abro un proyecto de consola en el que creo un objeto de tipo NTiConnection que nos permitirá interactuar con nuestro IBM i desde nuestra aplicación.
string conn = "server=***.***.**.**;user=***************; Password=******************************;";
var _conn = new NTiConnection(conn);
_conn.Open();
Console.WriteLine("Conexión establecida");
Paso 3: Declaración de parámetros
El programa RPG PGMCUST01 espera dos parámetros (vistos en el paso 1).
- ID del cliente : 5 posiciones de caracteres.
- El nuevo nombre : 30 posiciones de caracteres.
Preparamos estos parámetros creando una lista de objetos de tipo NTIProgramParameter.
Primero recuperamos el ID del cliente y el nuevo nombre a través de la consola, y luego los añadimos a la lista de parámetros que se pasarán al programa RPG.
Console.WriteLine($"Introduzca el ID de cliente:");
var customerId = Console.ReadLine();
Console.WriteLine($"Introduzca el nuevo nombre:");
var newName = Console.ReadLine();
var parms = new List()
{
new NTiProgramParameter(customerId, 5),
new NTiProgramParameter(newName, 30 )
};
Paso 4: Preparar el entorno de ejecución y llamar al programa RPG.
Primero, inicializa la librería actual, en este caso la librería "NORTHWIND", usando el comando CHGCURLIB NORTHWIND.
_conn.ExecuteClCommand("CHGCURLIB NORTHWIND");
💡Nota: Si las librerías necesarias para ejecutar el programa han sido definidas en el IBM i en la gestión del perfil utilizado para la conexión, los comandos "CHGCURLIB" y "ADDLIBLE" no son obligatorios.
Una vez definidos los parámetros, llamamos al programa PGMCUST01 utilizando NTi.
_conn.CallProgram("NORTHWIND", "PGMCUST01", parms);
💡Nota: Podrías haber evitado especificar la librería de ejecución "NORTHWIND" y sustituirla por "*LIBL" o "*CURLIB".
Aquí NTi se diferencia de otros productos en que la sesión abierta en el código C# es comparable a la de una pantalla 5250.
Paso 5: Validar los resultados
Tras ejecutar el programa, el campo correspondiente de la base de datos NORTHWIND se actualiza con el nuevo nombre introducido. Podemos comprobar visualmente el resultado en la consola, y los cambios en directo en una aplicación front-end:
using Aumerial.Data.Nti;
class Program
{
static void Main()
{
// Conexión
string conn = "server=*********;user=********; Password=*************;";
var _conn = new NTiConnection(conn);
_conn.Open();
Console.WriteLine("Conexión establecida");
Console.WriteLine($"Introduzca el ID de cliente:");
var customerId = Console.ReadLine();
Console.WriteLine($"Introduzca el nuevo nombre:");
var newName = Console.ReadLine();
var parms = new List()
{
new NTiProgramParameter(customerId, 5),
new NTiProgramParameter(newName, 30 )
};
_conn.ExecuteClCommand("CHGCURLIB NORTHWIND");
_conn.CallProgram("NORTHWIND", "PGMCUST01", parms);
string result = parms[1].GetString();
Console.WriteLine($"nombre del cliente: {result}");
}
}
En resumen
Es posible conservar las aplicaciones heredadas de eficacia probada que conforman la identidad y la experiencia únicas de su negocio principal, integrándolas al mismo tiempo en un entorno informático moderno.
Este enfoque híbrido ofrece lo mejor de ambos mundos: la fiabilidad y solidez de los sistemas IBM i combinadas con la flexibilidad y escalabilidad de tecnologías modernas como .NET. Los programas RPG, como los llamamos aquí, pueden ejecutarse desde entornos en contenedores, como Docker o Red Hat OpenShift, y utilizarse en todo tipo de aplicaciones .NET.
El ejemplo que presentamos aquí es sencillo, pero ofrece una idea del potencial de NTi para crear valor en torno a los recursos generados por este back office empresarial, garantizando que lo que le funciona hoy seguirá haciéndolo mañana, con toda la eficacia que usted espera.
No dude en contactarnos para probar NTi!
Quentin Destrade