Lea en AS/400 System i . . .

Aprovechando las posibilidades del WRKACTJOB a través de sus parámetros

Obtenga una salida diferente de la habitual al ejecutar el comando WRKACTJOB, aprovechando lo ofrecido por algunos parámetros interesantes que posibilitan entre otras acciones la de renovar automáticamente la pantalla resultante.

FaceBookTwitterGoogle+

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

Conozca una de las herramientas en la programación CL para la comunicación entre programas y usuarios de AS400: Comando SNDUSRMSG.

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.


El comando SNDUSRMSG

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

AS400-codigo-uso-comando-SNDUSRMSG

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 Teknoda S.A.

IMPORTANTE:
“Notas técnicas de AS/400" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes AS/400. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos.
Si desea suscribir otra dirección de e-mail para que comience a recibir las Notas Técnicas AS400, envíe un mensaje desde esa direcciónletter400@teknoda.com, aclarando nombre, empresa, cargo y país del suscriptor.

AS400 , iSeries y System i son marcas registradas de IBM. IBM no es el editor de esta publicación y no es responsable de la misma en ningún aspecto. La información contenida en esta publicación ha sido generada por nuestros especialistas a partir de fuentes consideradas confiables y del ejercicio profesional cotidiano. No obstante, por la posibilidad de error humano, mecánico, cambio de versión u otro, Teknoda no garantiza la exactitud o completud de la misma.
COPYRIGHT TEKNODA S.A. PROHIBIDA SU REPRODUCCION TOTAL O PARCIAL SIN CONSENTIMIENTO DE TEKNODA


 

Escribir un comentario


Código de seguridad
Refescar

Lea en AS/400 Tips . . .

Infografía comparativa Comandos de SAVE RESTORE del AS400

save_restore_thumbnail

Conozca y diferencie visualmente qué partes del almacenamiento resguarda y restaura cada comando y cada opción del Menú Salvar y Restaurar. PUEDE DESCARGAR UN FORMATO POSTER PARA IMPRESION.

Para lograr un entendimiento conceptual es de suma utilidad contar con una ayuda gráfica, que  permita diferenciarlos a primera vista. Nuestro equipo de especialistas ha desarrollado el "Infographics" que presentamos con este tip. Por supuesto, el mismo debe complementarse con la información detallada de los innumerables parámetros de cada comando, pero es un útil marco de referencia  para recordar el área de injerencia de cada comando.

LEER ESTE ARTICULO >>>>>

 

 

 

Copyright © 2017 Teknoda tips - Tecnologia SAP Netweaver - IBM AS400 - System i - iSeries. Todos los derechos reservados.