openUI

La sentencia OpenUI permite al usuario interactuar con un programa cuya interfaz se basa en consoleUI. La sentencia define eventos de usuario y programa y especifica cómo responder a cada uno de ellos.

La sintaxis de la sentencia OpenUI es la siguiente:


Sentencia OpenUI
OpenAttributes
OpenAttributes define un conjunto de pares de propiedad y valor, cada uno separado del siguiente por una coma, como en este ejemplo:
  allowAppend = yes, allowDelete = no
Cada una de las propiedades afecta a la interacción de usuario y en algunos casos sobreescribe una propiedad de la variable consoleUI a la que se hace referencia en OpenableElements. Las propiedades son las siguientes:
allowAppend
Especifica si el usuario puede insertar datos al final de un arrayDictionary en pantalla; si el valor es yes, las implicaciones son las siguientes:
  • El usuario inserta una fila de datos moviendo el cursor a la línea arrayDictionary que sigue a la última línea que incluye datos
  • La acción del usuario añade un elemento al final de la matriz dinámica que está enlazada a dicho arrayDictionary
  • Para el tipo de variable: ArrayDictionary
  • Tipo de propiedad: Boolean
  • Ejemplo: allowAppend = no
  • Valor por omisión: yes; pero el valor por omisión es no si la propiedad de openUI displayOnly está establecida en yes
allowDelete
Especifica si el usuario puede suprimir una fila de un arrayDictionary en pantalla; si el valor es yes, las implicaciones son las siguientes:
  • El usuario suprime una fila moviendo el cursor a dicha fila y pulsando la tecla a la que se hace referencia en ConsoleLib.key_delete.
  • La acción del usuario suprime el elemento relacionado de la matriz dinámica que está enlazada a dicho arrayDictionary.
  • Para el tipo de variable: ArrayDictionary
  • Tipo de propiedad: Boolean
  • Ejemplo: allowDelete = no
  • Valor por omisión: yes; pero el valor por omisión es no si la propiedad de openUI displayOnly está establecida en yes
allowInsert
Especifica si el usuario puede insertar una fila en un arrayDictionary en pantalla; si el valor es yes, las implicaciones son las siguientes:
  • El usuario inserta la fila moviendo el cursor a una ficha existente y pulsando la tecla a la que se hace referencia en ConsoleLib.key_insert.
  • La fila nueva precede a la fila que muestra el cursor
  • La acción del usuario inserta un elemento en la matriz dinámica que está enlazada a dicho arrayDictionary.
  • Para el tipo de variable: ArrayDictionary
  • Tipo de propiedad: Boolean
  • Ejemplo: allowInsert = no
  • Valor por omisión: yes; pero el valor por omisión es no si la propiedad de openUI displayOnly está establecida en yes
bindingByName

Indica cómo enlazar una serie de variables con una serie de ConsoleFields; concretamente, si se debe emparejar cada nombre de variable con un nombre de ConsoleField. El nombre de variable se lista en BindClause y el nombre de ConsoleField es el valor del campo Nombre de ConsoleField.

  • Para el tipo de variable: ConsoleForm, ConsoleField o Dictionary; pero no arrayDictionary
  • Tipo de propiedad: Boolean
  • Ejemplo: bindByName = yes
  • Valor predeterminado: no
Los valores son los siguientes:
no (valor predeterminado)
Emparejar variables y ConsoleFields por posición:
  • La posición de cada variable en la lista; y
  • La posición de cada ConsoleField en el consoleForm.

Independientemente de que los consoleFields se listen explícitamente en la sentencia openUI o se listen en una declaración dictionary, su orden define el orden de los consoleFields con la finalidad de enlazar por posición. (Su orden también define el orden de tabulación para la entrada del usuario, como se ha indicado en el apartado Componentes ConsoleUI y variables relacionadas.)

yes
Emparejar variables y ConsoleFields por nombre.

Si un consoleField se lista o se encuentra en una declaración dictionary cuando en la lista de enlaces no hay ninguna variable coincidente, la entrada del usuario en el consoleField se pasa por alto. De forma parecida, se pasa por alto una variable de enlace que no coincida con ningún campo.

Como mínimo un consoleField y una variable deben estar enlazados durante la ejecución; de lo contrario, se produce un error.

color
Especifica el color del texto en los ConsoleFields. El valor altera temporalmente el color especificado en la declaración de ConsoleField.
  • Para el tipo de variable: ConsoleForm, ConsoleField, ArrayDictionary o Dictionary
  • Tipo de propiedad: ColorKind
  • Ejemplo: color = red
  • Valor predeterminado: white
Los valores son los siguientes:
defaultColor o white (valor predeterminado)
Blanco
black
Negro
blue
Azul
cyan
Cian
green
Verde
magenta
Magenta
red
Rojo
yellow
Amarillo
currentArrayCount
Especifica el número de elementos que están disponibles en la matriz dinámica a la que está enlazado el arrayDictionary en línea. Si no se especifica este valor, todos los elementos pueden utilizarse en el arrayDictionary.
  • Para el tipo de variable: ArrayDictionary
  • Tipo de propiedad: INT
  • Ejemplo: currentArrayCount = 4
  • Valor predeterminado: none
displayOnly
Especifica si los consoleFields se visualizan sólo para verlos. Si el valor es yes, el usuario no puede modificar los datos, que están protegidos contra actualizaciones.
  • Para el tipo de variable: ArrayDictionary, Dictionary, ConsoleField, ConsoleForm
  • Tipo de propiedad: Boolean
  • Ejemplo: displayOnly = yes
  • Valor predeterminado: no
help
Especifica el texto que debe visualizarse cuando el usuario pulsa la tecla identificada en ConsoleLib.key_help.

Este texto de ayuda está destinado al mandato openUI. En algunos casos, el texto asociado con la tecla es más específico del contexto. Por ejemplo, cada opción de un menú puede tener su propio mensaje de ayuda.

  • Para el tipo de variable: ConsoleForm, ConsoleField, ArrayDictionary o Dictionary
  • Tipo primitivo: String
  • Ejemplo: help = "Actualizar el valor"
  • Valor predeterminado: Serie vacía
helpKey
Especifica una tecla de acceso para buscar el paquete de recursos que contiene el texto que debe visualizarse cuando se produce la siguiente situación:
  • El cursor está en una variable de ConsoleUI (como por ejemplo, ConsoleForm) que se identifica en OpenableElements; y
  • El usuario pulsa la tecla identificada en ConsoleLib.key_help.
Si se especifica a la vez help y helpKey, se utiliza help.
  • Para el tipo de variable: ConsoleForm, ConsoleField, ArrayDictionary o Dictionary
  • Tipo de propiedad: String
  • Ejemplo: helpKey = "myKey"
  • Valor predeterminado: Serie vacía

El paquete de recursos se identifica mediante la variable de sistema ConsoleLib.messageResource, tal como se describe en messageResource.

highlight
Especifica los efectos especiales (si los hay) que se utilizan al visualizar el ConsoleField. El valor altera temporalmente el valor equivalente especificado en la declaración de ConsoleField.
  • Para el tipo de variable: ConsoleForm, ConsoleField, ArrayDictionary o Dictionary
  • Tipo de propiedad: HighlightKind[]
  • Ejemplo: highlight = [reverse, underline]
  • Valor predeterminado: [noHighLight]
Los valores son los siguientes:
noHighlight (valor predeterminado)
No produce ningún efecto especial. La utilización de este valor altera temporalmente cualquier otro.
blink
No tiene ningún efecto
reverse
Invierte los colores del texto y del fondo, de forma que (por ejemplo), si la pantalla tiene un fondo negro con letras blancas, el fondo pasa a ser negro y el texto pasa a ser blanco.
underline
Coloca un subrayado debajo de las áreas afectadas. El color del subrayado es el color del texto, aunque también se haya especificado el valor reverse.
intensity
Especifica la fuerza del font visualizado.
  • Para el tipo de variable: ConsoleField, ConsoleForm, ArrayDictionary o Dictionary
  • Tipo de propiedad: IntensityKind[]
  • Ejemplo: intensity = [bold]
  • Valor predeterminado: [normalIntensity]
Los valores son los siguientes:
normalIntensity (valor predeterminado)
No produce ningún efecto especial. La utilización de este valor altera temporalmente cualquier otro.
bold
Hace que el texto aparezca en negrita.
dim
Hace que el texto aparezca con menor intensidad, según sea apropiado cuando un campo de entrada está inhabilitado.
invisible
Elimina cualquier indicación de que el ConsoleField se encuentra en el formulario.
isConstruct

Especifica si la finalidad de la sentencia openUI es crear criterios de selección que se utilizarán en una sentencia SQL, como por ejemplo SELECT.

  • Para el tipo de variable: ConsoleField, ConsoleForm, Dictionary
  • Tipo de propiedad: Boolean
  • Ejemplo: isConstruct = no
  • Valor predeterminado: yes
Los valores son los siguientes:
no (valor predeterminado)
Cada ConsoleField está enlazado a una variable, como de costumbre.
yes

La sentencia openUI debe enlazarse a una única variable de un tipo de carácter. Dicha variable no proporciona valores iniciales para los ConsoleFields, pero sí recibe la entrada del usuario, que está formateada para utilizarla en una cláusula SQL WHERE.

maxArrayCount
Especifica el número máximo de filas que puede haber en la matriz dinámica enlazada al arrayDictionary en pantalla. Una vez que se ha alcanzado el máximo, el usuario no puede insertar más filas.
  • Para el tipo de variable: ArrayDictionary
  • Tipo de propiedad: INT
  • Ejemplo: maxArrayCount = 20
  • Valor predeterminado: none
setInitial
Especifica si se visualiza el valor inicial de un ConsoleField (según lo definido en la declaración de consoleForm) hasta que el usuario modifica dicho valor. (Especifique el valor inicial estableciendo el campo initialValue de ConsoleField.)
  • Para el tipo de variable: ConsoleField, ConsoleForm, Dictionary, ArrayDictionary
  • Tipo de propiedad: Boolean
  • Ejemplo: setInitial = yes
  • Valor predeterminado: no

Si el valor de setInitial es no, los valores de las variables enlazadas se extraen y visualizan inicialmente.

OpenableElements
Las variables de ConsoleUI sobre las que la sentencia openUI puede actuar:
  • ConsoleForm
  • Un consoleField o uno de los siguientes elementos:
    • Una lista de consoleFields, cada uno separado del siguiente por una coma.
    • Un dictionary declarado en un consoleForm y que haga referencia a un conjunto de consoleFields de dicho consoleForm
    • Un arrayDictionary declarado en un consoleForm y que hace referencia a un conjunto de matrices de consoleField de dicho consoleForm
  • Menu
  • Prompt
  • Window
BindClause
La lista de variables primitivas, registros o matrices que están enlazadas a las variables de ConsoleUI. Las características de las variables de enlace dependen de las características de la variable de consoleUI en la que actúe la sentencia openUI:
  • Para un consoleField, puede especificar una variable primitiva.
  • Para un arrayDictionary en pantalla, puede especificar una matriz de registros, un elemento por fila en el arrayDictionary; y, si cada fila del arrayDictionary representa un solo valor, puede especificar una matriz de variables primitivas.
  • Para un dictionary o una lista de consoleFields, puede especificar una lista de variables primitivas. Como alternativa, puede especificar una matriz de registros, cada uno de cuyos elementos contenga una serie de campos enlazados a los consoleFields. Esta alternativa es equivalente a enlazar una matriz dinámica con un arrayDictionary en pantalla que sólo tenga una fila; puede añadir, insertar o suprimir un registro para cambiar la matriz dinámica, y en cualquier caso sólo se visualizará un registro simultáneamente.
  • Para una solicitud, puede especificar un campo primitivo que reciba la respuesta del usuario.

Para obtener información detallada sobre enlaces, consulte el apartado de OnEventBlock (más adelante), así como el apartado Componentes de ConsoleUI y variables relacionadas.

OnEventBlock
Un bloque de evento es una estructura de programación que incluye de 0 a muchos manejadores de eventos, cada uno de los cuales contiene el código que se ha escrito para responder a un determinado evento. Un manejador de eventos empieza con una cabecera OnEvent:
  OnEvent(claseEvento: calificadoresEvento)
claseEvento
Uno de varios eventos. Los valores válidos se describen en el apartado Tipos de eventos.
calificadorEvento
Datos que definen más el evento. Estos datos podrían ser el ConsoleField especificado o la pulsación de tecla realizada.

Las sentencias EGL que responden a un determinado evento están entre la cabecera OnEvent y la siguiente cabecera OnEvent (si existe), como se muestra más adelante en un ejemplo:

El usuario interactúa continuamente con el programa, y éste ejecuta un manejador de eventos cuando se produce el evento asociado con el manejador de eventos. Sin embargo, si la finalidad de la sentencia openUI es visualizar una solicitud, la interacción del programa de usuario es menos parecida a bucle:
  1. Un manejador de eventos (potencialmente uno de varios) captura una pulsación de usuario y responde
  2. La sentencia openUI finaliza

Ningún bloque de evento está disponible para una ventana.

Considere el siguiente ejemplo para guiar la interacción entre el usuario y un ConsoleForm:
		openUI {bindingByName=yes}
			 activeForm
			 bind firstName, lastName, ID
			 OnEvent(AFTER_FIELD:"ID")
				  if (employeeID == 700)
        firstName = "Angela";
        lastName = "Smith";
				  end
  end
Este código actúa de la manera siguiente:
Considere estos detalles relativos al ejemplo anterior:

Puede finalizar una sentencia openUI emitiendo una sentencia exit con el formato exit openUI.

Tipos de eventos

ConsoleUI da soporte a los siguientes eventos:
BEFORE_OPENUI
El entorno de ejecución EGL empieza a ejecutar la sentencia OpenUI. Este evento está disponible para todas las variables ConsoleUI excepto las basadas en Window.
AFTER_OPENUI
El entorno de ejecución EGL está a punto de detener la ejecución de la sentencia OpenUI. Este evento está disponible para todas las variables ConsoleUI excepto las basadas en Window.
ON_KEY:(ListaDeSeries)
El usuario ha pulsado una tecla específica, indicado por una serie, como por ejemplo "ESC", "F2" o "CONTROL_W". Puede identificar varias teclas separando una serie de la siguiente, como en este ejemplo:
  ON_KEY:("a", "ESC") 

Este evento está disponible para todas las variables ConsoleUI excepto las basadas en Window.

BEFORE_FIELD:(ListaDeSeries)
El usuario ha movido el cursor al ConsoleField especificado, como se indica mediante una serie que coincide con el valor del campo Nombre de ConsoleField. Puede identificar varios consoleField en el mismo consoleForm separando una serie de la siguiente, como se indica en este ejemplo:
  BEFORE_FIELD:("field01", "field02") 
AFTER_FIELD:(ListaDeSeries)
El usuario ha movido el cursor fuera del ConsoleField especificado, como se indica mediante una serie que coincide con el valor del campo Nombre de ConsoleField. Puede identificar varios consoleField en el mismo consoleForm separando una serie de la siguiente, como se indica en este ejemplo:
  AFTER_FIELD:("field01", "field02") 
BEFORE_DELETE
En relación con un arrayDictionary en pantalla, el usuario ha pulsado la tecla especificada en ConsoleLib.key_deleteLine, pero el entorno de ejecución EGL todavía no ha suprimido la fila. El programa puede invocar a consoleLib.cancelDelete para evitar suprimir la fila.
BEFORE_INSERT
En relación con un arrayDictionary en pantalla, el usuario ha pulsado la tecla especificada en ConsoleLib.key_insertLine, pero el entorno de ejecución EGL todavía no ha insertado una fila. El programa puede invocar a consoleLib.cancelInsert para evitar insertar la fila.
BEFORE_ROW
En relación con un arrayDictionary en pantalla, el usuario ha movido el cursor a una fila.
AFTER_DELETE
En relación con un arrayDictionary en pantalla, el usuario ha pulsado la tecla especificada en ConsoleLib.key_deleteLine, y el entorno de ejecución EGL ha suprimido una fila.
AFTER_INSERT
En relación con un arrayDictionary en pantalla, el usuario ha pulsado la tecla especificada en ConsoleLib.key_insertLine; el entorno de ejecución EGL ha insertado una fila; y el cursor abandona la fila insertada.

El usuario puede editar la fila antes de comprometer los cambios a una base de datos, como ocurre generalmente en el manejador AFTER_INSERT.

AFTER_ROW
El usuario ha movido el cursor fuera de una fila en un arrayDictionary en pantalla.
MENU_ACTION:(ListaDeSeries)
El usuario ha seleccionado un menuItem, como se indica mediante una serie que coincide con el valor del campo Nombre de menuItem. Puede identificar varios menuItems separando una serie de la siguiente, como en este ejemplo:
  MENU_ACTION:("item01", "item02") 

isConstruct

Cuando la propiedad isConstruct = yes, el texto colocado en la variable enlazada al mandato openUI tiene un formato especial, como se muestra en el siguiente ejemplo:
  1. Una sentencia openUI actúa sobre un ConsoleForm de tres ConsoleFields (employee, age y city), y cada campo está asociado a una columna de tabla SQL del mismo nombre.

    Un consoleField se asocia a una columna de tabla SQL estableciendo la propiedad SQLColumnName de ConsoleField, y el usuario debe establecer la propiedad dataType de consoleField, como se indica en el apartado Propiedades y campos de ConsoleField.

  2. El usuario actúa de la manera siguiente:
    • Deja en blanco el campo employee
    • Escribe lo siguiente en el campo age:
        > 25
    • Escribe lo siguiente en el campo city:
        = 'Sarasota'
  3. Cuando el usuario abandona la variable en pantalla sobre la que actúa la sentencia openUI, la variable enlazada recibe el siguiente contenido:
      AGE > 28 AND CITY = 'Sarasota'

Como se muestra en el ejemplo, EGL coloca el operador AND entre cada cláusula que proporciona el usuario.

La tabla siguiente muestra la entrada de usuario válida y la cláusula resultante. La expresión tipos SQL simples hace referencia a tipos SQL que no son estructurados ni de tipo LOB.

Símbolo Definición Tipos de datos soportados Ejemplo Cláusula resultante (para una columna de caracteres llamada C) Cláusula resultante (para una columna numérica llamada C)
= Igual a Tipos SQL simples =x, ==x C = 'x' C = x
> Mayor que Tipos SQL simples >x C > 'x' C > x
< Menor que Tipos SQL simples <x C < 'x' C < x
>= No menor que Tipos SQL simples >=x C >= 'x' C >= x
<= No mayor que Tipos SQL simples <=x C <= 'x' C <= x
<> o != No igual a Tipos SQL simples <>x o !=x C != 'x' C != x
.. Rango Tipos SQL simples x.y o x..y C BETWEEN 'x' AND 'y' C BETWEEN x AND y
* Comodín para String (como se describe en la tabla siguiente) CHAR *x o x* o *x* C MATCHES '*x' no aplicable
? Comodín de un solo carácter (como se describe en la tabla siguiente) CHAR ?x, x?, ?x?, x?? C MATCHES '?x' no aplicable
| O lógico Tipos SQL simples x|y C IN ('x', 'y') C IN (x, y)

El signo igual (=) puede significar IS NULL; y el signo no igual (!= o <>) puede significar IS NOT NULL.

Una cláusula MATCHES es el resultado de la especificación por parte del usuario de uno de los caracteres comodín descritos en la tabla siguiente.

Símbolo Efecto
* Coincide con cero o más caracteres.
? Coincide con un solo carácter cualquiera.
[ ] Coincide con cualquier carácter encerrado entre corchetes.
- (guión) Cuando se utiliza entre caracteres que están encerrados entre corchetes, un guión coincide con cualquier carácter del rango entre los dos caracteres, ambos inclusive. Por ejemplo, [a-z] coincide con cualquier letra en minúsculas o carácter especial dentro del rango en minúsculas.
^ Cuando se utiliza entre corchetes, un signo de intercalación inicial coincide con cualquier carácter no incluido dentro de los corchetes. Por ejemplo, [^abc] coincide con cualquier carácter excepto a, b, c.
\ Es el carácter de escape; el siguiente carácter es un literal. Permite incluir cualquiera de los caracteres comodín en la serie sin tener el efecto de comodín.
Cualquier otro carácter fuera de los corchetes Debe coincidir exactamente.
Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.