Home Quiénes Somos Teknoda y AS400 Teknoda y SAP Contáctenos
 

Notas técnicas al AS/400 - Tip en detalle

(Lo nuevo, lo escondido, o simplemente lo de siempre pero bien explicado)

"Tips en breve/Tips en detalle" se envía con frecuencia variable y absolutamente sin cargo como un servicio a nuestros clientes AS/400. Contiene principalmente notas técnicas y no contiene mensajes publicitarios.
Si desea suscribir otra dirección de e-mail para que comience a recibir los "Tips", envíe un mensaje desde esa dirección a letter400@teknoda.com , aclarando nombre, empresa y cargo del suscriptor.


Recursos y curiosidades de la programación CL - Parte II

Tema: Aplicaciones, CL, Comandos, Programación.
Utilidad: Conocer facilidades provistas por la programación en lenguaje de control.
Nivel: Básico/Intermedio.
Versión: Todas.

 
 

Resumen ejecutivo

CL/400 o Control Language/400 es el lenguaje de control del sistema operativo. Existe una gran cantidad de herramientas de programación provistas por este lenguaje. El objetivo de este tip es mostrar las amplias posibilidades de la programación CL a través de herramientas sencillas, aunque algunas veces no tan conocidas por los programadores, entre ellas

- Comunicación entre programas y usuarios: comando SNDUSRMSG.

Introducción

En muchas ocasiones, durante la ejecución de un programa es necesario solicitar datos al usuario para alimentar al programa con determinada información. El comando SNDUSRMSG es una excelente alternativa de comunicación entre un programa y el usuario que lo ejecuta. Posee parámetros que permiten realizar el envío de mensajes con características variadas, solicitando respuesta y validándola . Este comando sólo puede utilizarse dentro de programas CL (no puede ser ejecutado desde línea de comandos). Utilizando SNDUSRMSG se puede enviar mensajes tanto a usuarios como a la cola de mensajes externa (*EXT) facilitando la comunicación con los programas. Algunas de sus posibilidades son (los conceptos relacionados serán ampliados en la siguiente sección):

  • Envío de mensajes improvisados o predefinidos.

  • El tipo de mensaje a enviar puede ser informativo o solicitar una respuesta.

  • El destino de los mensajes puede ser un usuario, una cola de mensajes en particular, o la cola de mensajes *EXT.

  • Puede capturarse la respuesta a un mensaje, definir las respuestas válidas, y también la respuesta default. Esta es una de sus posibilidades más destacadas. A través de mensajes de consulta, se puede solicitar información al usuario y procesarla dentro del programa.

En otras secciones del presente tip se ejemplificará el uso de SNDUSRMSG.

Conceptos importantes sobre envío de mensajes con SNDUSRMSG

Existe una serie de conceptos que es importante clarificar para poder utilizar el comando SNDUSRMSG con todas sus posibilidades. Estos son:

  • Mensajes improvisados y mensajes predefinidos: Los mensajes improvisados son aquellos cuyo texto está contenido dentro del programa que envía el mensaje. Cuando se necesita modificar el texto del mensaje, es necesario también recompilar el programa.

    En el caso de los mensajes predefinidos, son aquellos cuyo texto y otras características están almacenadas dentro de Archivos de mensajes (objetos de tipo *MSGF) y son tomadas desde estos objetos en el momento del envío. Cuando se envía un mensaje predefinido, es necesario especificar no sólo el parámetro Identificador de mensaje (palabra clave MSGID) , sino también el parámetro Archivo de mensajes al que pertenece (palabra clave MSGF). Cuando el mensaje predefinido contiene variables en su texto, el parámetro Valores de campo datos mensaje (palabra clave MSGDTA) debe contener las variables o constantes que tomarán el lugar de las variables del mensaje.

  • Tipo de mensaje: todo mensaje que se envía tiene un tipo asociado ( palabra clave MSGTYPE). Pueden enviarse mensajes de tipo *INFO (informativos) o *INQ (solicitan una respuesta).

  • Destinos del mensaje: Entre los destinos permitidos para los mensajes existen:
    • colas de mensajes almacenadas como objetos de tipo *MSGQ dentro de cualquier biblioteca.
    • colas de mensajes *EXT.

    Para el caso de las primeras, las posibilidades son: enviar mensajes a un usuario determinado, a una cola de mensajes en particular o al operador del sistema (valor *SYSOPR). Los parámetros que habilitan estas opciones son A cola de mensajes (palabra clave TOMSGQ) y A perfil de usuario (palabra clave TOUSR).

    La cola de mensajes externa o *EXT es creada por el sistema, una para cada trabajo activo, y eliminada cuando el trabajo finaliza. Pueden enviarse a ella tanto mensajes de tipo *INFO y también *INQ. Cuando se envía un mensaje a la cola de mensajes *EXT desde un programa que se ejecuta de manera interactiva, se interrumpe la ejecución del programa, aparece la pantalla 'Visualizar mensajes de programa' y si el mensaje enviado es de tipo *INQ, se abre una línea para ingresar la respuesta deseada. Para enviar mensajes a la cola de mensajes externa, se utiliza el parámetro A cola de mensajes (palabra clave TOMSGQ) con valor *EXT.

    Todo mensaje que se envía a esta cola de mensajes (informativo o de consulta), junto con la respuesta dada, quedan almacenados en esta cola de mensajes y también en la joblog. El envío de mensajes a la cola de mensajes externa es una excelente herramienta para documentar a través de la joblog, tanto el envío del mensaje como la respuesta ingresada por el usuario.


En las siguientes secciones se ejemplificará el uso del mandato SNDUSRMSG.

Comando SNDUSRMSG

La siguiente pantalla muestra tres ejemplos de utilización del comando SNDUSRMSG dentro de un programa CL:

 

En los ejemplos que se detallarán, se explicarán distintos usos del comando SNDUSRMSG: mensajes improvisados y predefinidos, de tipo informativo o consulta, con variables dentro del texto y hacia diferentes destinos.
La primer parte del programa realiza las declaraciones de las variables que se utilizarán posteriormente. En el primer párrafo se recupera la fecha del sistema, se le agregan los separadores, y por último se recupera el nombre del usuario que ejecuta el programa.
En el segundo párrafo se envía un mensaje predefinido, a la cola de mensajes externa, y la respuesta se almacena en la variable &RESP. La creación de archivos de mensajes se realiza con el comando CRTMSGF. Luego se puede proceder a incorporar definiciones dentro de él. El mensaje predefinido de código USR0006 fue incorporado al archivo de mensajes con el comando:

ADDMSGD MSGID(USR0006) MSGF(TEKTCL/MENSAJES)
MSG('Confirma el comienzo de la operación de backup ? (S/N)')
LEN(1) VALUES(S N 's' 'n') DFT(N)

Cuando el mensaje anterior se envía a la cola de mensajes externa, se detiene la ejecución del programa, aparece el mensaje y se solicita la respuesta al usuario. En la misma pantalla se valida la respuesta según los atributos de respuesta válidas definidos para el mensaje. Si el usuario no responde al mensaje y presiona F3 o F12 o Intro, automáticamente se contestará con la respuesta default. Es importante observar que el programa no deberá encargarse de la validación de la respuesta, sólo procesará las respuestas ya validadas previamente en la pantalla anterior.
Luego se comienza a procesar la respuesta almacenada en la variable &RESP.
En el tercer párrafo, también se envía un mensaje predefinido, de tipo informativo y a la cola de mensajes externa. El mensaje predefinido de código USR0007 fue incorporado al archivo de mensajes con el comando:

ADDMSGD MSGID(USR0007) MSGF(TEKTCL/MENSAJES)
MSG('Operación de backup no confirmada en la fecha &1 por el usuario &2') FMT((*CHAR 8) (*CHAR 10)) TYPE(*NONE) LEN(*NONE)

El mensaje predefinido de código USR0007 no solicita respuesta, pero tiene dentro de su texto variables (&1 y &2) que deberán ser "cargadas" en el momento del envío. El parámetro FMT define el tipo y longitud de cada una de las variables instanciadas. La información que se desea relacionar con estas variables se ingresa en forma de constantes o variables del programa CL dentro del mandato SNDUSRMSG en el parámetro MSGDTA.

En el cuarto párrafo, se utiliza SNDUSRMSG para enviar un mensaje improvisado. A través del parámetro VALUES se definen las respuestas que serán aceptadas como válidas y con DFT la respuesta default. La respuesta se almacenará en la variable &RESP y el destinatario es el operador del sistema. Cuando este mensaje se envía, la pantalla queda inhibida y al pie de la pantalla aparece el mensaje 'Está esperándose una respuesta al mensaje en la cola de mensajes QSYSOPR'. Con petición de sistema y opción 6 se responde al mensaje, y luego la ejecución del programa continúa. Todo mensaje que se envía a la cola de mensajes del operador y la respuesta ingresada, queda documentada en el history log.

Como se puede observar en los ejemplos anteriores, el mandato SNDUSRMSG es una herramienta sencilla de usar. A través de los parámetros que ofrece, se puede implementar el envío de mensajes que soliciten respuestas sin necesidad de definir una pantalla (recordar que en un programa CL se puede declarar solamente un archivo); si la definición del comando está provista de atributos de validación de respuesta, el programa no necesitará realizar esta tarea; y el destinatario puede ser un usuario a seleccionar o la cola de mensajes externa.

Para tener en cuenta...

  • Cuando se utilizan mensajes improvisados, debe considerar que al cambiar el texto del mensaje escrito dentro del fuente del programa, deberá luego recompilarse el programa.
  • Los comandos SNDMSG y SNDBRKMSG pueden utilizarse dentro de programas CL, pero están orientados al envío de mensajes entre usuarios.
  • Si se solicitan datos desde un programa a través de una pantalla, el objeto de tipo *FILE con atributo DSPF deberá declararse. Sólo un archivo puede declararse por programa CL.
  • La modificación del texto de un mensaje predefinido no necesita la recompilación de los programas que lo utilicen.
  • El parámetro Tabla de conversión permite traducir la respuesta válida ingresada. La tabla que se utiliza por omisión, QSYSTRNTBL de la biblioteca QSYS, permite traducir de minúsculas a mayúsculas. De esta manera, el programa sólo chequea valores en mayúsculas.
  • Observar que cuando se envía un mensaje predefinido que posee variables en su texto, los valores se caragarán en el parámetro MSGDTA y relacionándolos con el operador de cadena de caracteres *CAT.

 

 

Copyright Enero 2002 Teknoda S.A . Prohibida su reproducción total o parcial sin citar la fuente.

Dudas o comentarios: letter400@teknoda.com

La información contenida en esta cartilla ha sido recolectada en la tarea cotidiana por nuestros especialistas a partir de fuentes consideradas confiables. No obstante, por la posibilidad de error humano, mecánico, cambios de versión u otro, Teknoda no garantiza la exactitud o completud de la información aquí volcada. AS/400 es marca registrada de IBM. Agradecemos el permiso de IBM para usar sus marcas en esta publicación. iseries400 es marca registrada de IBM. IBM no es el editor de esta publicación y no es por lo tanto responsable de su contenido.

 

 
Volver a página principal de Notas Técnicas AS/400