En esta sección: |
Puede tener dos tipos de segmentos descendientes en un solo origen de datos secuencial de formato fijo, VSAM o ISAM:
En la estructura de datos mostrada a continuación, el primer registro (de tipo 01) incluye varias secuencias diferentes de campos repetidos, que deben estar descritas como segmentos descendientes con un atributo OCCURS. El origen de datos también presenta dos registros independientes, de tipo 02 y 03, con información relacionada a la del registro de tipo 01.
La relación entre los distintos tipos de registros se expresa como de principal a secundario. Los secundarios que contienen los registros de tipo 02 y 03 no tienen un atributo OCCURS. Se diferencian de su principal mediante la declaración de campo, donde field=RECTYPE.
La descripción de este origen de datos es:
FILENAME = EXAMPLE1, SUFFIX = FIX,$ SEGNAME = A, SEGTYPE=S0,$ FIELDNAME = RECTYPE ,ALIAS = 01 ,USAGE = A2 ,ACTUAL = A2 ,$ FIELDNAME = T1 ,ALIAS = ,USAGE = A2 ,ACTUAL = A1 ,$ FIELDNAME = N1 ,ALIAS = ,USAGE = A1 ,ACTUAL = A1 ,$ SEGNAME = B, PARENT = A, OCCURS = VARIABLE, SEGTYPE=S0,$ FIELDNAME = B1 ,ALIAS = ,USAGE = I2 ,ACTUAL = I2 ,$ FIELDNAME = B2 ,ALIAS = ,USAGE = I2 ,ACTUAL = I2 ,$ SEGNAME = C, PARENT = B, OCCURS = B1, SEGTYPE=S0,$ FIELDNAME = C1 ,ALIAS = ,USAGE = A1 ,ACTUAL = A1 ,$ SEGNAME = D, PARENT = B, OCCURS = 7, SEGTYPE=S0,$ FIELDNAME = D1 ,ALIAS = ,USAGE = A1 ,ACTUAL = A1 ,$ SEGNAME = E, PARENT = A, SEGTYPE=S0,$ FIELDNAME = RECTYPE ,ALIAS = 02 ,USAGE = A2 ,ACTUAL = A2 ,$ FIELDNAME = E1 ,ALIAS = ,USAGE = A1 ,ACTUAL = A1 ,$ SEGNAME = F, PARENT = E, SEGTYPE=S0,$ FIELDNAME = RECTYPE ,ALIAS = 03 ,USAGE = A2 ,ACTUAL = A2 ,$ FIELDNAME = F1 ,ALIAS = ,USAGE = A1 ,ACTUAL = A1 ,$
Produce la siguiente estructura de datos:
Los segmentos A, B, C y D pertenecen al mismo tipo de registro. Los segmentos E y F están almacenados como registros diferentes.
Nota:
Imagine que quiere describir un origen de datos que, a grandes rasgos, presenta este aspecto:
A RECTYPE B C RECTYPE B C |
A RECTYPE D RECTYPE D |
Debe describir tres segmentos en su archivo máster, con A como segmento raíz, y segmentos para B, C y D como dos segmentos OCCURS descendientes de A.
El siguiente diagrama refleja estos tres segmentos.
Cada uno de los dos segmentos OCCURS descendientes del ejemplo depende del indicador de RECTYPE, que aparece por cada repetición.
La sintaxis para los RECTYPE dentro de los segmentos OCCURS es la misma que para el uso de campos RECTYPE y segmentos OCCURS.
Puesto que cada segmento OCCURS depende del indicador de RECTYPE para su evaluación, RECTYPE debe aparecer al principio del segmento OCCURS. Esto permite describir orígenes de datos complejos, incluidos aquellos con grupos repetidos anidados o paralelos, que dependen de los RECTYPE.
En este ejemplo, B/C y D representan un grupo repetido, anidado, mientras que E representa uno repetido, paralelo.
A |
RECTYPE B C |
RECTYPE D |
RECTYPE E |
RECTYPE E |
FILENAME=SAMPLE,SUFFIX=VSAM,$ SEGNAME=ROOT,SEGTYPE=S0,$ GROUP=GRPKEY ,ALIAS=KEY ,USAGE=A8 ,ACTUAL=A8 ,$ FIELD=FLD000 ,E00 ,A08 ,A08 ,$ FIELD=A_DATA ,E01 ,A02 ,A02 ,$ SEGNAME=SEG001,PARENT=ROOT,OCCURS=VARIABLE,SEGTYPE=S0 ,$ FIELD=RECTYPE ,A01 ,A01 ,ACCEPT=B OR C ,$ FIELD=B_OR_C_DATA ,E02 ,A08 ,A08 ,$ SEGNAME=SEG002,PARENT=SEG001,OCCURS=VARIABLE,SEGTYPE=S0,$ FIELD=RECTYPE ,D ,A01 ,A01 ,$ FIELD=D_DATA ,E03 ,A07 ,A07 ,$ SEGNAME=SEG003,PARENT=ROOT,OCCURS=VARIABLE,SEGTYPE=S0 ,$ FIELD=RECTYPE ,E ,A01 ,A01 ,$ FIELD=E_DATA ,E04 ,A06 ,A06 ,$
Cómo: |
En otra combinación del indicador de registros y OCCURS, uno de los registros contiene un indicador seguido de un grupo repetido. En este caso, el indicador de registros se encuentra en la parte fija del registro, no en cada repetición. A grandes rasgos, el registro se parece a éste:
El primer registro contiene la información del encabezado, que son los valores de A y de B, seguidos de un segmento OCCURS con C y D, que fue identificado por el indicador de registros precedente. El segundo registro cuenta con un indicador de registro y un grupo repetido diferente, en este caso para E.
El siguiente diagrama explica esta relación:
Puesto que los segmentos OCCURS están identificados por el indicador de registros, en vez de por el segmento principalA/B, debe utilizar la palabra clave MAPFIELD. MAPFIELD identifica los campos del mismo modo que RECTYPE, aunque como cada segmento OCCURS tiene su propio valor para MAPFIELD, el valor de éste se encuentra asociado a cada segmento OCCURS por medio de un campo complementario, llamado MAPVALUE.
El siguiente diagrama explica esta relación:
MAPVALUE recibe el ALIAS del campo que actúa como indicador de registros. Puede tener cualquier nombre.
FIELD = name, ALIAS = MAPFIELD, USAGE = format, ACTUAL = format,$
donde:
Es el nombre que ha elegido para este campo.
MAPFIELD recibe el ALIAS del campo que actúa como indicador de RECTYPE.
Sigue el formato normal de los campos.
Sigue el formato normal de los campos.
Los valores de los segmentos descendientes dependen del valor de MAPFIELD. Aparecen descritos como segmentos independientes (uno por cada valor posible de MAPFIELD) y todos descienden del segmento que incluye el MAPFIELD. Aparece un campo especial, MAPVALUE, descrito como el último campo de estos segmentos descendientes, después del campo ORDER (si se ha usado uno). El valor real de MAPFIELD se proporciona como el ALIAS de MAPFIELD.
FIELD = MAPVALUE, ALIAS = alias, USAGE = format, ACTUAL = format, ACCEPT = {list|range} ,$
donde:
Indica que el segmento depende de un MAPFIELD en su segmento principal.
Es el valor primario de MAPFIELD si no se ha especificado una lista ACCEPT. Si hay una lista ACCEPT, puede tratarse de cualquier valor.
Es igual que el formato MAPFIELD en el segmento principal.
Es igual que el formato MAPFIELD en el segmento principal.
Es una lista de una o varias líneas con los valores especificados de MAPFIELD, para los registros que presentan el mismo diseño de segmento. El número máximo de caracteres permitido en la lista es de 255. Cada elemento de la lista debe estar separado por un espacio en blanco o por la palabra clave OR. Si la lista incluye espacios en blanco y comas insertados, debe ir colocada entre comillas simples. La lista puede incluir un único valor de MAPFIELD.
Por ejemplo:
FIELDNAME = MAPVALUE, ALIAS = A, USAGE = A1, ACTUAL = A1, ACCEPT = A OR B OR C,$
Es un rango o intervalo de una o varias líneas con los valores específicos de MAPFIELD, para los registros que tienen el mismo diseño de segmento. El número máximo de caracteres permitido en el rango es de 255. Si el rango incluye espacios en blanco y comas insertados, debe ir colocado entre comillas simples (').
Para especificar un rango de valores, incluya el valor más bajo, la palabra clave TO y el valor más alto, en este orden.
Si utiliza el origen de datos de ejemplo al principio de la sección, el archivo máster correspondiente tendrá este aspecto:
FILENAME=EXAMPLE,SUFFIX=FIX,$ SEGNAME=ROOT,SEGTYPE=S0,$ FIELD =A, ,A14 ,A14 ,$ FIELD =B, ,A10 ,A10 ,$ FIELD =FLAG ,MAPFIELD ,A01 ,A01 ,$ SEGNAME=SEG001,PARENT=ROOT,OCCURS=VARIABLE,SEGTYPE=S0 ,$ FIELD =C, ,A05 ,A05 ,$ FIELD =D, ,A07 ,A07 ,$ FIELD =MAPVALUE ,1 ,A01 ,A01 ,$ SEGNAME=SEG002,PARENT=ROOT,OCCURS=VARIABLE,SEGTYPE=S0 ,$ FIELD =E, ,D12.2 ,D8 ,$ FIELD =MAPVALUE ,2 ,A01 ,A01 ,$
Nota: MAPFIELD sólo puede existir en un segmento OCCURS que no haya sido reasignado. Esto significa que la definición del segmento no puede incluir POSITION=fieldname.
Puede usar MAPFIELD y MAPVALUE con los orígenes de datos SUFFIX=FIX y SUFFIX=VSAM.
WebFOCUS |