Un archivo EGL contiene un
conjunto de componentes cada uno de los cuales es una unidad discreta y con nombre. Algunos componentes (como por ejemplo un programa) son componentes generables; cada uno de los cuales constituye la base de una unidad compilable. Un componente generable debe tener el mismo nombre que el archivo fuente EGL que contiene
el componente; y, en este caso, las mayúsculas/minúsculas del nombre son significativas:
miComponente es diferente de MICOMPONENTE.
Un archivo fuente EGL (extensión .egl) puede incluir cero o un componente generable y de cero a muchos otros componentes.
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 componente no generable function es la unidad de lógica básica. El resto de especies de
componentes lógicos pueden incluir funciones.
- Puede definir cualquiera de los siguientes tipos de programas, que se
diferencian por el tipo de
interfaz. Cada
uno es un componente generable:
Puede definir cualquiera de los tipos de programas anteriores como
programa principal. Una
transferencia de programa que no es una llamada, un proceso del sistema
operativo o, en algunos casos, el usuario inician ese tipo de programa. Además, puede
declarar un programa básico o textUI como programa
llamado, al que solamente puede invocarse mediante una llamada.
Para obtener
información detallada sobre el despliegue en tiempo de ejecución de los programas principales y
llamados, consulte la sección 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 visualizarse en formato PDF, XML, texto, CSV o HTML.
- Un servicio es un componente generable que contiene código
al que se accederá del siguiente modo:
- Desde código EGL por medio de una conexión TCP/IP (en cuyo caso el componente
contiene los detalles de implementación de un servicio EGL); o bien
- Desde cualquier código por medio de una conexión HTTP (en cuyo caso el componente
contiene
los detalles de implementación de un servicio Web EGL).
- Una biblioteca también es un componente generable, un
conjunto de funciones y variables compartidas que pueden ponerse a disposición de
programas, pageHandlers, servicios EGL y otras bibliotecas localmente.
- 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 contienen información acerca de las clases de datos más elementales. Estos componentes son parecidos a las entradas de un diccionario de datos de todo el sistema; 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 una bases para datos complejos. Una variable cuyo tipo
es un componente de registro incluye campos y se denomina registro.
Hay dos categorías de
componentes de registro disponibles: fijos y no fijos. La última de ellas
se utiliza más ampliamente, y se describe en primer lugar.
Cada campo de un componente de
registro no fijo puede estar basado en cualquiera de los elementos siguientes:
- Un tipo primitivo como por ejemplo STRING
- Un componente DataItem
- Un componente de 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.
Puede utilizar un
componente de registro no fijo para crear variables para el proceso general o para acceder a
una
base de datos relacional.
La longitud de los datos del registro no fijo puede variar
en
tiempo de ejecución.
- Los componentes de registro fijo 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 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 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 la sección Interfaz de usuario de consola.
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 se utiliza como un tipo para una o varias variables pero, en este caso, cada variable se llama
formulario de consola en lugar de registro. La tecnología ConsoleUI también
incluye otros componentes que se definen automáticamente y que pueden utilizarse como
base de las variables; para obtener detalles, consulte el apartado Interfaz
de usuario 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 incluye una estructura fija e interna como la de un registro fijo, pero un
formulario no puede incluir una subestructura.
Un formulario sólo 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 formGroups.
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.
- Un componente de registro de subtipo
VGUIRecord es una organización de datos que se presenta al
usuario en el contexto de un programa VGWebTransaction.
Las interfaces de usuario Web se crean con Page Designer, que crea un archivo JSP
y (si no está trabajando en un programa VGWebTransaction) lo asocia a un PageHandler EGL. El archivo JSP es similar a un componente de UI para las aplicaciones que
interactúan con el usuario mediante la Web.
Para obtener detalles acerca del acceso
Web, consulte la sección Soporte Web.
- Los componentes de acceso permiten interactuar con código externo:
- Un componente de interfaz es un componente no generable que permite
acceder a funciones desde un servicio EGL, desde un servicio Web (EGL u otro) o desde código
Java.
- El componente de informe y el componente
de datos de informe están predefinidos y se utilizan como base de las
variables que ayudan a rellenar un informe durante la ejecución. El informe se basa en
una biblioteca de código fuente abierto basado en Java denominada JasperReports. Para
obtener una introducción a la tecnología EGL, consulte la sección Visión general de
informes de EGL.
- Los componentes de construcción se definen en archivos de construcción EGL (extensión .eglbld)
y 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.