Bean de llamada en WebSphere. Llamada a ILERPG desde JSP.

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×

Continuando con el desarrollo de aplicaciones Web en el servidor Websphere que tenemos en nuestro iSeries usando JSP, hoy quiero explicar como podemos hacer una llamada a un programa ILERPG directamente desde la aplicación.

Partimos de un escenario en que tenemos un programa ILERPG (tiene que ser ILE, no vale un RPG400) compilado en nuestro iSeries que funciona perfectamente y que a partir de unos parámetros que le pasamos nos devuelve un resultado concreto. Ahora queremos incluir esos parámetros devueltos en nuestra Intranet. Muy util para crear funciones que devuelvan datos complejos que necesiten acceder a varias tablas y realizar cálculos que mediante SQL se nos complicarían o, incluso, reutilizar código.

Una vez que tenemos en el iSeries el programa ILERPG, con el proyecto abierto en nuestro Rational Developer for i, definimos la llamada al programa utilizando el asistente para crear un Bean de llamada a programa Icono Bean de Llamada o mediante el menú Nuevo/Otros y dentro de la carpeta IBM i/Java está el asistente.

Una vez abierto el asistente, como ya tenemos hecho el programa ILERPG en el series, vamos a la opción de importar y seleccionamos Seleccionar del sistema Remoto, momento en que nos aparecerá una lista de nuestras conexiones al iSeries donde podemos navegar hasta la biblioteca, objeto y miembro fuente del programa que queremos llamar. Si no tenemos creada ninguna conexión al iSeries podemos añadirle en este momento.

Seleccion_de_Fuente

Cuando seleccionamos el fuente el asistente nos mostrará directamente la llamada al programa y los parámetros que lleva, lo seleccionamos y aceptamos.

Seleccion_de_Programa

En el siguiente paso, una vez importado el programa, será entrar en la ventana de opciones donde podemos modificar los datos del programa y/o los parámetros. Ojo, tienen que coincidir con los declarados, sino generará un error inesperado.

Declaracion_de_Programa

Igualmente, este sería el punto donde tendríamos que crear la llamada manualmente si no queremos importarla desde el archivo fuente. Aquí añadiríamos el nombre del programa y los parámetros uno a uno.

En esta pantalla lo único modificable si habéis importado el fuente es indicar el tipo de programa según lo hayáis compilado como programa PGM o servicio SVRPGM y si los parámetros son de entrada, salida o ambos. Yo normalmente compilo el fuente como programa e indico que el tipo es PGM.

Acto seguido pulsamos en siguiente y nos pregunta el nombre del paquete que vamos a generar y en nombre del archivo PCML. Ponemos el nombre que deseemos y en siguiente nos pedirá que indiquemos los datos de conexión al servidor y la lista de bibliotecas que debe montar para hacer la llamada correcta. Configurar_Conexion

Aceptamos y el asistente finaliza generando los recursos Java necesarios y los ficheros de configuración.

Estructura_Creada

Indicar que si queremos añadir nuevos programas, bastará con hacer doble click en el archivo PCML de la carpeta raíz para que se nos abra el asistente bean de llamada a programa y podamos añadirle un nuevo programa dentro del mismo PCML….. o crear otro PCML nuevo si queremos.

Una vez que tenemos definida la llamada al programa del iSeries y cerrado el asistente bean de llamada ya solo nos quedaría el llamarlo desde nuestro programa JSP.

Para ello, incluimos las clases Java necesarias para la conexión

%@ page import="com.ibm.as400.data.*" %;
%@ page import="com.ibm.as400.access.*" %;

Luego especificamos las variables de la conexión e indicamos el servidor, usuario y password y abrimos el fichero PCML donde está el programa a llamar. Tened en cuenta que es el nombre del archivo PCML, no del programa que vais a llamar (aunque en este caso se llamasen igual)

AS400 sys;
sys = new AS400("server","user","password");
ProgramCallDocument pcml;
pcml = new ProgramCallDocument(sys, "../CALDIANA"); // Abrir PCML

Bien, tenemos definida la conexión y la llamada al programa, ya solo queda realizarla, y como en todas las llamadas, lo primero es rellenar los parámetros de entrada con el método setValue. Podemos rellenarlo con constantes o con variables del programa. Aquí SI tenemos que poner el nombre del programa y no del fichero PCML.

pcml.setValue("CALDIANA.ARTI",arti);
pcml.setValue("CALDIANA.FECHA",fecini2);
pcml.setValue("CALDIANA.MAYO", Mayor);
pcml.setValue("CALDIANA.CTA",Cuenta);
pcml.setValue("CALDIANA.DPTO",Dpto);
pcml.setValue("CALDIANA.DIVI",Div);
pcml.setValue("CALDIANA.DIANAS",new Double(0));

Con los parámetros adecuados, llamamos al programa y recuperamos los datos con el metodo getValue. La llamada al programa devuelve una variable booleana que será falso si el programa no se ejecuta correctamente.

boolean rc = pcml.callProgram("CALDIANA");
valor =  0;
if(rc == true) {
   valor =  Double.parseDouble(pcml.getValue("DEVPRE.DIANAS").toString());
}

A la hora de recuperar los datos, tened en cuenta la conversión de datos para poder tratarlos. Personalmente y después de darle muchas vueltas, he preferido recuperar el valor en un String y convertirlos posteriormente a Double como podéis ver en el ejemplo. A mi me resultó más cómodo.

Pues bien, con el asistente de creación y este poco código podéis simplificar la programación de la Web y aprovechar los programas y funciones que ya tenéis creados en el iSeries sin preocuparos de como se harían en JSP.

JoBenCa

http://jobenca.es

Administrador y desarrollador de sistemas IBM System i y curioso de todo tipo de tecnología.

View more posts from this author

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×