|
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.
|
|