martes, 18 de noviembre de 2008

Prompt selectivo de mandato

La función del prompt selectivo en los mandatos es útil en un programa CL interactivo. Con esta función podemos ahorrarnos algún paso de parámetro en el programa.

El prompt selectivo se utiliza insertando caracteres especiales delante de los parámetros de los mandatos, los valores permitidos son:
  • ?? Muestra el prompt del parámetro y permite cambiarlo.
  • ?* Muestra el prompt del parámetro pero no permite cambiarlo
  • ?- Oculta el parámetro.
  • ?< Muestra el prompt del parámetro y permite cambiarlo, pero el valor por omisión es el que le enviamos desde el programa.
  • ?& Solo se muestra el prompt del parámetro si se pulsa F10 y permite cambiarlo.
  • ?% Solo se muestra el prompt del parámetro si se pulsa F10, pero no permite cambiarlo.
Ademas si colocamos un ? delante del mandato nos modifica el comportamiento de los prompt selectivos:
  • blanco Muestra solo los parámetros con prompt selectivo, no permite F9.
  • ? Muestra prompt del mandato y permite cambiar parámetros y pulsar F9.
Un ejemplo para ilustrar esta función, queremos crear un programa que restaure objetos desde un *SAVF, pero queremos dejar al usuario la elección de ciertos parámetros, de otros informarle de su valor y ocultar el resto aunque estén definidos, para ello usaremos el código siguiente:

RSTOBJ ??OBJ(*ALL) SAVLIB(LIBSAV) ?-DEV(*SAVF) OBJTYPE(*ALL) ?*SAVF(LIBSAVF/SAVF) ??RSTLIB(LIBSAV2)

Al ejecutar el programa obtendremos la siguiente pantalla:


De esta forma dejamos al usuario cambiar que objetos quiere restaurar y en que biblioteca, aunque le mostramos una por omisión y si la deja en blanco el prompt vuelve a mostrar el valor que le hemos pasado desde programa; también puede ver que archivo de salvar se utilizará, pero no el resto de parámetros, ni aun pulsando F10 o F9.

Veamos que ocurre si añadimos el carácter ? delante del mandato RSTOBJ, también añadimos ?- en el parámetro DEV :

? RSTOBJ ??OBJ(*ALL) SAVLIB(LIBSAV) ?-DEV(*SAVF) OBJTYPE(*ALL) ?*SAVF(LIBSAVF/SAVF) ??RSTLIB(LIBSAV2)


Ahora vemos el resto de parámetros obligatorios que no se mostraban antes, excepto DEV que tiene la opción de prompt ?-, y además podemos pulsar F10 para ver el resto de parámetros.

Para controlar el prompt de los parámetros opcionales se utiliza ?% y ?&, aunque puede complicarnos el programa ya que hay parámetros que pueden depender de si usamos otros.

Nota: Si usamos el prompt selectivo también debemos de incluir la siguiente instrucción por si nos pulsan F3=Salir o F12=Cancelar:
MONMSG MSGID(CPF6801) /* F3 o F12 */

Más información en iSeries Information Center
Publicar un comentario en la entrada