|
Resumen ejecutivo
e Introducción
El objetivo de este tip es mostrar las amplias posibilidades
de la programación CL a través de herramientas sencillas
y obvias, pero a menudo sub-explotadas por los programadores, entre
ellas:
- Uso de caracteres de prompteo selectivo dentro de programas
CL como alternativa a la codificación de Display Files.
- Monitoreo de mensajes utilizando "Datos de comparación".
Caracteres de prompteo selectivo
Los caracteres de prompteo selectivo son un conjunto de símbolos
que, codificados de la forma correcta, permiten
mostrar al usuario el prompt completo o parcial de un comando e
ingresar valores para los parámetros que se exhiben.
Si esto se hace dentro de un programa CL, luego de presionar intro,
se sale del "prompteo" y continúa la ejecución
del programa.
La utilización de esta herramienta dentro
de un programa CL puede evitar, en algunos casos, la creación
de una pantalla (objeto de tipo *FILE DSPF) y su posterior declaración
dentro de un programa CL (recordar que dentro de un programa CL
sólo se puede declarar (comando DCLF) un único archivo).
También es posible usar esta opción sobre los comandos
asociados a los items de un menú (opciones definidas en objetos
de tipo *MENU).
Sintaxis
La siguiente tabla muestra los caracteres de prompteo disponibles.
Las distintas posibilidades existentes permiten controlar qué
parámetros aparecen en el prompt de un comando, cuáles
se pueden cambiar y cuáles sólo se pueden visualizar:
Ejemplo:
El siguiente programa muestra un ejemplo de utilización
de los caracteres de prompteo:

Observar las siguientes consideraciones:
- En la sentencia 1
se promptea el comando SAVLIB, pero no todos sus parámetros.
Los parámetros Biblioteca y Release destino
(palabras claves LIB y TGTRLS respectivamente) se pueden visualizar
y modificar. Los parámetros Dispositivo, Vías
de acceso y Compresión de datos (palabras claves
DEV, ACCPTH y DTACPR respectivamente) sólo son visualizables.
De esta manera, el usuario podrá
elegir qué biblioteca salvar y para qué versión
de sistema operativo, pero sólo podrá realizar la
operación sobre el dispositivo TAP01, incluyendo siempre
vías de acceso y comprimiendo.
- Si el parámetro DEV tuviera caracteres de prompteo "??",
se podría seleccionar el dispositivo para realizar la operación.
El valor *SAVF no será aceptado, debido a que el parámetro
Archivo de salvar
(palabra clave SAVF) no fue seleccionado para su aparición
en el prompt.
- Si al visualizar el prompt, durante la ejecución del
programa se presiona F3 o F12, se produce el error CPF6801. En
las sentencias señaladas con 2,
se utiliza MONMSG para evitar la pantalla de cancelación.
- Al permitir que el usuario cargue valores en los parámetros,
deben monitorearse los errores que se pueden producir si se ingresa,
por ejemplo, el nombre de una biblioteca que no existe. En las
sentencias señaladas con 3,
se monitorea el error CPF3781 que se puede producir si se ingresa
el nombre de una librería inexistente.
Prompteo selectivo y autoridad adoptada
Los caracteres de prompteo selectivo son una excelente herramienta
para combinar con "autoridad adoptada". Cuando un usuario
necesita acceder al prompt de un comando al cual no posee permiso,
un programa que incluya al comando y que adopte las autorizaciones
de un perfil con acceso al mandato en cuestión, puede ser
una solución interesante para resolver el acceso sin otorgar
una autorización específica sobre el mandato.
MONMSG y el parámetro "Datos
de comparación"
El comando MONMSG es una importante herramienta
de la programación CL utilizada para capturar mensajes de
cancelación dentro de los programas CL, definir un tratamiento
para ese error y continuar así la ejecución del programa
sin solicitar la intervención del usuario.
El funcionamiento del mandato MONMSG es similar al del comando
IF, ya que la acción especificada en el parámetro
Mandato a ejecutar (palabra clave EXEC) se realizará solamente
cuando se produce el código de error que monitorea. Por ejemplo,
en el programa de la página anterior, en la sentencia 2,
MONMSG se ejecuta solamente cuando se produce el código de
error CPF6801 (si el usuario presiona F3 o F12).
Cuando se promptea el mandato MONMSG se puede
visualizar el parámetro "Datos de comparación"
(palabra clave CMPDTA). Para comprender el uso de este parámetro
es necesario observar que la mayoría de los mensajes predefinidos
que envía OS/400 contienen variables
dentro de su texto. Por ejemplo, el texto del mensaje de
código CPF3781 es: "No se ha encontrado la biblioteca
&1". "&1" es una variable contenida dentro
del texto del mensaje, que en el momento real del envío será
reemplazada por el nombre de una biblioteca.
La utilización del parámetro CMPDTA
del mandato MONMSG permite definir que la acción a realizar
para una situación de error (parámetro EXEC) se ejecutará
no solamente cuando se produzca determinado código de error,
sino también cuando los datos de comparación especificados
coincidan con la información variable del mensaje a monitorear.
Ejemplo:
En el siguiente programa se puede observar un ejemplo de uso del
parámetro CMPDTA o "Datos de comparación":

Observar las siguientes consideraciones:
- En las sentencias marcadas con 1,
se monitorea la ocurrencia del código de error CPF2110
("Biblioteca &1 no encontrada") con el dato de comparación
"AUDITS". Esto significa que los comandos encerrados
entre DO y ENDDO se realizarán cuando
se produzca el error de "Biblioteca no encontrada"
para la biblioteca AUDITS. El grupo de comandos señalados
con 2, capturarán
el error de "Biblioteca no encontrada" para bibliotecas
con cualquier otro nombre distinto de AUDITS. Se debe destacar,
en este caso, la importancia del orden en
el cual se monitorean los mensajes. Si el bloque de sentencias
2 estuviera antes que el
bloque 1, todos los mensajes
de error serían capturados por el MONMSG que carece de
datos de comparación, y el MONMSG con datos de comparación
nunca se ejecutaría.
- En las sentencias señaladas con 3
y 4 se puede observar un
caso muy particular de monitoreo
con datos de comparación. En ambos grupos de sentencias
se monitorea el código de error CPF2817 ("El mandato
de copiar ha finalizado debido a un error"). Este mensaje
posee una variable que no forma parte de su texto. Para comprobarlo,
utilizar DSPMSGD CPF2817 y luego opción 2. Cuando los datos
de comparación son "CPF2802" (Archivo origen
&1 en &2 no encontrado), se detecta la ocurrencia de problemas
en la copia, debido a que el archivo origen no existe. Con datos
de comparación "CPF2861" (El archivo destino
&1 en &2 no se ha encontrado o no se ha creado), se captura
el error que ocurre cuando el archivo destino no existe y tampoco
se ha especificado el parámetro CREATE(*YES) en el mandato
CPYF. En este caso, el orden en el que se
escriban las sentencias MONMSG no altera el funcionamiento del
programa.
A través
de estos ejemplos se puede observar que el comando MONMSG combinado
con Datos de comparación permite flexibilizar la captura
de mensajes de error, posibilitando definir más de un tratamiento
para un mismo código de error, según los valores presentes
en las variables del mensaje.
Para tener en cuenta...
- Una forma práctica de agregar caracteres de prompteo
es la siguiente: promptear el comando, ingresar los caracteres
de prompteo en el parámetro seleccionado, limpiar el resto
del campo y luego presionar intro 2 veces. En la pantalla del
editor se pueden visualizar los caracteres ingresados y los valores
*N que incorpora como valor default para los parámetros.
- Es posible realizar pruebas con caracteres de prompteo desde
la línea de comandos.
- Si en un programa CL se incluye la sentencia
DSPLIB ??LIB(&BIBL) el efecto es el siguiente: cuando
se muestra el prompt del comando, el campo Biblioteca aparece
con el contenido de la variable &BIBL. Esto no quita la posibilidad
de ingresar otro nombre de biblioteca, pero ese nuevo valor no
se almacenará dentro de la variable &BIBL.
- Recordar que en el parámetro EXEC del comando MONMSG
es posible ingresa un único comando.
Cuando el monitoreo se realiza a nivel de comando (MONMSG
ubicado debajo del mandato que produce el error), y se necesita
ejecutar más de una sentencia, se deben utilizar los comandos
DO y ENDDO para abrir y cerrar un bloque de mandatos respectivamente.
Si el monitoreo es a nivel de programa (MONMSG antes de
la primer sentencia ejecutable o luego de las declaraciones de
variables), el único comando permitido en el parámetro
EXEC es GOTO.
- Los monitoreos de mensajes locales o a nivel de comando tienen
prioridad sobre monitoreos globales o a nivel de programa. La
utilización del parámetro "Valor de comparación"
no altera este esquema.
|
|