SIDRA400

Era un blog sobre iSeries y Lotus/Domino

¿Quieres usar las APIs del sistema con ILE RPG?

Javier Mora  Febrero 17 2009  iSeries  Javier Mora       


Siempre que he intentado explicar lo que significa una API me he encontrado con el mismo problema: no sé dar una definición apropiada, sencilla y entendible. API es la abreviatura en inglés de Application Programming Interfaz o en castellano Interfaz de Programación de Aplicaciones. Algunos dirán que es una capa de abstracción y tendrán razón. Otros que proporcionan una interfaz que permite una comunicación entre componentes de software, mediante un conjunto de funciones de uso general o específico.

Y así, una por cada profesional que le preguntes. Bueno, he exagerado un poco. La primera vez que leí esta palabra se utilizaba para hablar de la interfaz de programación de Windows, a principios de la década de los 90. Para aquellos no familiarizados con este concepto, podríamos decir que una API es un conjunto de funciones o procedimientos que nos permite aprovechar, una y otra vez, una determinada funcionalidad, evitando programarla desde cero. En el caso que nos ocupa, se tratan del conjunto de programas, funciones y procedimientos que nos ofrece el sistema operativo para interactuar con él.

Image:¿Quieres usar las APIs del sistema con ILE RPG?

El sistema nos proporciona, desde sus inicios, cientos de APIs (o miles). Y es posible que, sin darnos cuenta, ya hayamos utilizado algunas de ellas, como por ejemplo QCMDEXC, para ejecutar un mandato desde un programa RPG. Fue mi primera vez, en el año mil novecientos noventa-y-pocos. Desde entonces he utilizado algunas más. Me han permitido construir programas y utilidades de sistema que ayudan en el trabajo diario de mi empresa y departamento. He podido hacer cosas que con una programación tradicional sería imposible o muy difícil. Como ya he dicho, hay cientos o miles de APIs. Permiten, entre otras cosas: obtener información de los objetos que habitan el sistema; manejar objetos como colas de datos, espacios de usuarios, archivos, etc.; utilizar mensajes; funciones de conversión de datos; manejar archivos en spool; y mucho más.

Hoy os presento los fuentes que he ido confeccionando durante todos estos años con los prototipos de algunas APIs y las estructuras de datos necesarias para su uso. Ni mucho menos están todas las que proporciona el sistema, sólo están aquellas que he necesitado en alguna ocasión. En este mismo blog ya los incluí junto con la utilidad SU. Estos miembros fuente están preparados para utilizarse desde ILE RPG con la directiva /Copy, pero no enseñan como utilizar las APIs. No soy muy bueno dando lecciones.

No es fácil adquirir los conocimientos necesarios para su utilización. Al principio no habían muchos medios para aprender a utilizarlas, apenas los manuales (en inglés) de IBM. Hoy, en Internet podremos encontrar cientos de recursos que nos ayudarán en esta ardua tarea. Es el medio que yo más empleo. Existe muchísima documentación digital y escrita, sobre todo en inglés.

Hay un libro de Bruce Vining, Doug Pence y Ron Hawkins que trata este tema en profundidad.
Sin embargo, para aquellos que quieran introducirse en este tema han de saber que desde hace algunos años han proliferado, en la prensa especializada, los artículos que tratan este asunto. Éstos podrían ser un buen punto de inicio para entender y usar las APIs:
En castellano también podremos encontrar algunos artículos en ServerNews (http://www.help400.es/) y predecesoras. Los suscriptores habrán podido disfrutar de ellos.

En el InfoCenter (http://publib.boulder.ibm.com/iseries/), en la sec ción de Programación, podemos encontrar los manuales de referencia así como algunos ejemplos de uso. Preguntar a Google también puede resultar positivo. Ante la soliticitud de información sobre una API devuelve decenas o cientos de enlaces. Un lugar que me ha servido de mucha ayuda ha sido:

think400.dk - http://www.think400.dk/apier.htm

aquí he encontrado muchos ejemplos que me han permitido entender algunas APIs complejas.

Hay dos libros que perfectamente podrían estar en cualquier estantería (de madera o digital) de cualquier desarrollador de RPG que quisiera aprender a utilizar las APIs. Sus títulos son:
El primero es mi manual de consulta desde hace años y me ha enseñado a utilizar ILE RPG de otra manera.

Finalmente, no hay Gurú del entorno que no las utilice y facilite información sobre ellas:

Scott Klement
- http://www.scottklement.com/
  con sus excelentes guías sobre sockets o sobre el IFS

Bob Cozzy
- http://www.rpgworld.com/
  con decenas de ejemplos. También promueve una iniciativa para ir incorporando nuevos prototipos de APIs en su "colección abierta" de éstas.

Entre otras cosas, he utilizado las APIs del sistema para: obtener información de los perfiles de usuario, de los objetos en general, leer la lista de trabajos planificados, procesar los mensajes de una cola de mensajes, enviar y recibir mensajes, leer los archivos en spool de una determinada cola, chequear copias de seguridad, leer y escribir registros de ficheros, utilizar el IFS, ....

¡Que os divirtáis!



Comentarios [4]

1 Albert Buendia   02/18/2009 3:42:55 PM  ¿Quieres usar las APIs del sistema con ILE RPG?

Excelente entrada, Javier. Le paso el enlace al currante del AS/400.

2 Martín   02/18/2009 4:00:13 PM  ¿Quieres usar las APIs del sistema con ILE RPG?

Hola Albert, como podrás comprobar la gente que colabora en mi blog son gente seria (no como yo).

Javier, Albert es un colega de Barcelona que trabaja en una empresa que saben lo que hacen (por eso tienen AS/400's).

Un saludo a los dos.

3 Javier Mora   02/25/2009 10:03:00 AM  ¿Quieres usar las APIs del sistema con ILE RPG?

4 Javier Mora   02/25/2009 10:06:44 AM  ¿Quieres usar las APIs del sistema con ILE RPG?

Hola Albert, lo realmente difícil de las APIs es aprender a utilizarlas. Sin embargo, cuando le coges el "tranquillo" cada vez es más fácil encontrar lo que necesitas y comprender su funcionamiento.

Eso sí, existen APIs que son dificilísimas de aprender a utilizar.

A ver si puede poner algún ejemplo sencillo de algunas de ellas.


SIDRA400 Powered by Lotus/Domino