Un archivo EGL contiene un
conjunto de
componentes cada uno de los cuales es una unidad discreta y con nombre:
- Cada componente generable como por ejemplo un programa, es la base de
una unidad compilable. Un componente generable debe tener el mismo nombre que el archivo fuente EGL
que contiene el componente.
- Algunos componentes no generables también están disponibles y se llaman
subcomponentes.
Un archivo fuente EGL puede incluir cero o un componente generable y de cero a muchos
subcomponentes.
Los componentes se dividen en las categorías siguientes:
- Los componentes lógicos definen una secuencia de tiempo de ejecución que se escribe en el lenguaje de procedimiento EGL.
- El subcomponente función es la unidad de lógica básica. El resto de especies de
componentes lógicos pueden incluir funciones.
- Puede definir dos tipos de programas que se diferencian por el tipo de interfaz. Cada
uno es un componente generable:
- Un programa de acción proporciona páginas interactivas a navegadores Web.
- Un programa básico evita la interacción con el usuario, o bien limita
esa interacción a una especie determinada de interfaz basada en caracteres. La tecnología de
interfaz en este caso funciona de la manera siguiente:
- Visualiza la salida en un indicador de mandatos
- Permite que el usuario interactúe con el programa de forma inmediata, con cada pulsación de
tecla definiendo potencialmente un suceso distinto para que lo maneje el programa.
Para obtener detalles sobre esta clase de interfaz, consulte la sección
UI de consola.
Para obtener detalles sobre esta clase de interfaz
que solo está disponible si genera salida en
Java,
consulte la sección UI de consola.
- Un programa textUI interactúa con el usuario de la forma siguiente:
- Visualiza un conjunto de campos en un indicador de mandatos
- Visualiza un conjunto de campos en un indicador de mandatos o una pantalla
3270
- Acepta la entrada de campo del usuario solo cuando el usuario pulsa una tecla de sumisión.
Puede definir cada tipo de programa para que sea un
programa principal.
Esa clase de programa se inicia de cualquiera de estas formas:
- Por el usuario
- Por una transferencia de programa que no sea una llamada
- Directamente por un proceso de sistema operativo
Además, puede declarar cualquiera de los dos tipos de programa para que sea un
programa llamado, al que solamente puede invocarse mediante una
llamada.
Se puede llamar a un programa básico como a una subrutina
desde otro programa o desde un manejador de páginas y puede desplegarse en el contexto de un
Servicio Web EGL. Para obtener información detallada sobre el despliegue en tiempo
de ejecución de los programas principales y llamados, consulte Configuraciones de
tiempo de ejecución.
- Un pageHandler es un componente generable que controla la interacción
entre el usuario y una página Web.
- Un manejador del tipo JasperReport es un componente generable que
contiene funciones personalizadas que se invocan en momentos distintos durante la ejecución de un
archivo de diseño JasperReports. Los datos devueltos por cada función se incluyen en el informe de
salida, que puede representarse en formato PDF, XML, texto o HTML.
- Una biblioteca también es un componente generable, un conjunto de
funciones y variables compartidas que pueden ponerse a disposición de programas, pageHandlers y
otras bibliotecas.
- Los componentes de datos definen las estructuras de datos que están disponibles en el programa.
Las clases siguientes de componentes de datos se utilizan como tipos en declaraciones de
variable:
- Los componentes DataItem son subcomponentes que contienen información acerca de las
clases de datos más elementales. Estos componentes son parecidos a las entradas de un diccionario
de datos; cada componente incluye detalles acerca del tamaño de los datos, el tipo, las reglas de
formato, las reglas de validación de entra y las sugerencias de visualización. Un componente
dataItem se define una vez y puede utilizarlo como la base para cualquier número de variables
primitivas o campos de registro.
El componente dataItem proporciona una forma adecuada de crear
una variable a partir de un tipo primitivo. Por ejemplo, tenga en cuenta la definición siguiente de
myStringPart, que es un componente dataItem de tipo serie:
DataItem
myStringPart String { validValues = ["abc", "xyz"] }
end
Cuando desarrolla una función, puede declarar una variable de tipo
myStringPart:
myString myStringPart;
La declaración siguiente tiene
el mismo efecto que la anterior:
myString STRING { validValues = ["abc", "xyz"] };
Tal como se muestra, el nombre de un componente dataItem es simplemente un alias para un tipo
primitivo con valores de propiedad específicos.
- Los componentes de registro son subcomponentes que son una base para datos complejos.
Una variable cuyo tipos es un componente de registro incluye campos. Cada campo puede estar basado
en cualquiera de los elementos siguientes:
- Un tipo primitivo como por ejemplo STRING
- Un componente dataItem
- Un registro fijo (tal como se describe más adelante)
- Otro componente de registro
- Una matriz de cualquiera de las clases precedentes
Cada campo puede ser también un diccionario o un arrayDictionary (tal como se describe
posteriormente) o una matriz de diccionarios o arrayDictionaries.
La variable basada en un
componente de registro se llama registro y la longitud de los datos del registro puede variar en
tiempo de ejecución.
Puede utilizar un componente de registro para crear variables para el
proceso general o para acceder a una base de datos relacional.
- Los componentes de registro fijo son subcomponentes que son una base para los datos
complejos que son de longitud fija. Una variable cuyo tipo es un componente de registro fijo
incluye campos y cada campo puede tener cualquiera de los elementos siguientes como un tipo:
- Un tipo primitivo como por ejemplo CHAR
- Un componente dataItem
Cada campo puede estar subestructurado. Por ejemplo un campo que especifica un número de
teléfono puede definirse de la forma siguiente:
10 phoneNumber CHAR(10);
20 areaCode CHAR(3);
20 localNumber CHAR(7);
Aunque puede utilizar componentes de registro fijo para cualquier clase de
proceso, se utilizan principalmente para operaciones de E/S en archivos VSAM, colas de mensajes
MQSeries y otros
archivos secuenciales.
En cierta medida, EGL soporta componentes de registro fijos para
permitir la compatibilidad con productos anteriores como por ejemplo
VisualAge
Generator.
Aunque puede utilizar registros fijos para acceder a bases de datos relacionales o para proceso
general, es recomendable que evite utilizar registros fijos para esos propósitos.
- Un componente de diccionario es un subcomponente que siempre está disponible, no se
define. Una variable basada en un componente de diccionario puede incluir un conjunto de claves y
los valores relacionados y puede añadir y eliminar entradas de clave y valor en tiempo de ejecución.
- Un componente arrayDictionary es un subcomponente que siempre está disponible, no se
define. Una variable basada en un componente arrayDictionary permite acceder a una serie de
matrices recuperando el mismo elemento numerado de cada matriz. Un conjunto de elementos recuperado
de esta forma es en sí mismo un diccionario con cada nombre de matriz tratado como una clave
emparejada con el valor en el elemento de matriz.
Un arrayDictionary resulta especialmente útil
en relación con la tecnología de visualización descrita en ConsoleUI.
El otro componente de datos es
dataTable, que se trata como
una variable en lugar de como tipo de variable:
- dataTable es un componente generable que pueden compartir varios
programas. Contiene una serie de filas y columnas, incluye un valor primitivo en cada casilla y se
trata como una variable que (en muchos casos) es global para la unidad de ejecución.
- Los componentes UI (interfaz de usuario) describen el diseño de los datos
presentados al usuario en la pantalla de fonts fijos y los formularios de impresión. Los
componentes de UI se utilizan en contextos distintos y son de los tipos siguientes:
- Un componente de registro de subtipo
consoleForm es una organización de datos que se presenta al usuario en el
contexto de la tecnología consoleUI. Igual que otros componentes de registro, cada uno es un
subcomponente y se utiliza para una o varias variables pero en este caso, cada variable se llama
formulario de consola en lugar de registro. Para otros detalles, consulte
UI de consola
- Un formulario también es una organización de datos presentada al
usuario. Una clase de formulario organiza los datos enviados a una pantalla en un programa textUI y
otro organiza los datos enviados a una impresora en cualquier clase de programa.
Cada formulario
es un subcomponente que incluye una estructura fija, interna como la de un registro fijo, pero un
formulario no puede incluir una subestructura.
Un formulario solo está a disposición de un
programa, pageHandler o biblioteca si un formGroup incluye o hace referencia al formulario, tal
como se describe a continuación.
- Un componente formGroup es un conjunto de texto y formularios de
impresión y es un componente generable. Un programa sólo puede incluir un formGroup para la mayoría
de usos, junto con un formGroup para la salida relacionada con la ayuda. Puede incluirse el mismo
formulario en múltiples formGroup.
Los formularios de un formGroup son globales para un programa,
aunque el acceso debe especificarse en una sentencia de utilización específica de programa. Se hace
referencia a los formularios como variables.
Las interfaces de usuario Web se crean con Page Designer, que crea un archivo JSP y lo
asocia a un pageHandler EGL. El archivo JSP sustituye el cometido de un componente UI para las
aplicaciones que interactúan con el usuario mediante la Web.
Otro componente
de UI es un tipo de componente de registro con propiedades que afectan a la presentación
de los datos. Para obtener información detallada sobre este componente de registro de UI, consulte la sección Soporte Web.
- Los componentes de construcción definen diversas características de proceso:
- Un componente descriptor de construcción controla el proceso de generación e indica qué otros componentes de control se leen durante dicho proceso.
- Un componente de opciones de enlace proporciona detalles sobre cómo un programa generado se transfiere a y desde otros programas. El componente también ofrece detalles sobre cómo un programa COBOL generado accede a archivos de regiones CICS remotas. La información contenida en este componente se utiliza durante la generación, la prueba y la ejecución.
- Un componente de asociaciones de recursos relaciona un registro EGL con la información necesaria para acceder a un archivo de una determinada plataforma destino; la información contenida en este componente se utiliza durante la generación, la prueba y la ejecución.
- Un componente de control de enlaces (que sólo se aplica cuando la plataforma destino es CICS para z/OS) describe cómo acceder a una base de datos DB2 desde uno o más programas. La información de este componente se utiliza durante la generación y la preparación.
- Un componente de edición de enlaces (que sólo se aplica cuando la plataforma destino es CICS para z/OS) describe cómo formar un módulo de carga a partir de dos o más programas. La información de este componente se utiliza durante la generación y la preparación.
Un registro fijo, dataTable o formulario (ya sea texto o impresión) incluye una estructura
fija. La estructura se compone de una serie de campos, cada uno de los cuales tiene un tamaño y
un tipo que se conocen durante la generación y en el caso de dataTable o un registro fijo, el campo
puede subestructurarse.