Está en la página 1de 186

Curso de Capacitación

CICS

Septiem bre
INDICE GENERAL

MÓDULO I ................................................................................................................................................ 5
INTRODUCCIÓN A CICS ................................................................................................................................. 5
Procesamiento en Lotes ............................................................................................................................ 5
Procesamiento en línea ............................................................................................................................ 7
Flujo de las Transacciones CICS .............................................................................................................. 8
El Entorno CICS .................................................................................................................................... 11
Componentes del CICS ........................................................................................................................... 12
Interfase a Nivel de Comando ................................................................................................................ 15
Características de un programa CICS .................................................................................................... 16
Programas CICS Conversacionales y Pseudo-Conversacionales ............................................................ 17
Concepto de COMMAREA ..................................................................................................................... 17
Bloque de Interfase de Ejecución (EIB) .................................................................................................. 17
MÓDULO II ............................................................................................................................................. 19
CONTROL DE PROGRAMAS ........................................................................................................................... 19
Consideraciones sobre los programas de aplicación .............................................................................. 19
Invocación de un programa .................................................................................................................... 20
Comandos de Control de Programas ...................................................................................................... 20
Programa modular ................................................................................................................................. 24
Iniciación de una Tarea ......................................................................................................................... 27
CONTROL DE ARCHIVOS .............................................................................................................................. 29
Definición de Areas de trabajo de Entrada/Salida .................................................................................. 29
Comandos de Control de Archivos ......................................................................................................... 30
Lectura de un registro ............................................................................................................................ 30
Atención de condiciones de excepción .................................................................................................... 32
Actualización de un registro ................................................................................................................... 35
Eliminación de Registros de un Archivo VSAM ...................................................................................... 37
Liberación de un Registro ...................................................................................................................... 37
Resumiendo ............................................................................................................................................ 41
Agregado de Registros ........................................................................................................................... 41
MÓDULO III ........................................................................................................................................... 45
CONTROL DE ARCHIVOS II ........................................................................................................................... 45
Qué es la búsqueda secuencial (Browse)?............................................................................................... 45
Consideraciones VSAM .......................................................................................................................... 46
Consideraciones DAM/BDAM ................................................................................................................ 46
Consideraciones ISAM ........................................................................................................................... 46
Pasos para una búsqueda secuencial ...................................................................................................... 46
Posicionar .............................................................................................................................................. 48
Lectura de Registros............................................................................................................................... 52
Reconocimiento de fin de archivo ........................................................................................................... 55
Fin de Archivo Físico ............................................................................................................................. 56

Página -1-
Fin de Archivo Lógico ............................................................................................................................ 56
Terminación de la búsqueda ................................................................................................................... 57
Reposicionamiento ................................................................................................................................. 60
El procesamiento secuencial VSAM con saltos ....................................................................................... 63
Técnicas adicionales de Procesamiento .................................................................................................. 63
Búsquedas secuenciales múltiples .......................................................................................................... 63
Actualización de Registros .................................................................................................................... 65
Ejemplos de Uso..................................................................................................................................... 68
Consideraciones sobre diseño de aplicaciones ....................................................................................... 71
Tiempo de respuesta ............................................................................................................................... 72
Puja por recursos ................................................................................................................................... 72
Indice alternativo de VSAM .................................................................................................................... 73
La condición de excepción clave duplicada ............................................................................................ 75
Actualización de Registros ..................................................................................................................... 77
Relación entre el CICS y el DB2 ............................................................................................................ 77
Relación entre planes, programas y transacciones ................................................................................. 77
Manejo de unidades de trabajo en CICS................................................................................................. 78
Performance ........................................................................................................................................... 78
Temporary Storage (TS) ......................................................................................................................... 79
Conceptos de Almacenamiento Temporario ........................................................................................... 79
Registros de Almacenamiento Temporario ............................................................................................. 79
Condiciones de Excepción ...................................................................................................................... 80
Comandos de Almacenamiento Temporario. ........................................................................................... 81
Comando WRITEQ ................................................................................................................................. 81
Comando READQ .................................................................................................................................. 83
Comando DELETEQ .............................................................................................................................. 85
MÓDULO IV............................................................................................................................................ 86
Interprete a nivel comandos ................................................................................................................... 86
Invocación del intérprete........................................................................................................................ 86
Transacciones CECS .............................................................................................................................. 86
Transacción CECI .................................................................................................................................. 87
Diseño de pantalla ................................................................................................................................. 89
Línea de comandos ................................................................................................................................. 89
Línea de estado ...................................................................................................................................... 89
Area de información ............................................................................................................................... 91
Area de mensajes ................................................................................................................................... 93
Teclas de función ................................................................................................................................... 94
Area de teclas de función ....................................................................................................................... 95
DEPURACIÓN DE PROGRAMAS CEDF .......................................................................................................... 111
Detección de errores ............................................................................................................................ 111
Errores en la Preparación de los Programas ........................................................................................ 111
Errores en tiempo de Ejecución............................................................................................................ 112
Facilidad de Rastreo ............................................................................................................................ 112
Columnas ‘Trace Type’ (Tipo de Rastreo) ............................................................................................ 117
Columnas ‘Field A’ y ‘Field B’ ............................................................................................................ 117
Columna ‘REQD’ ................................................................................................................................. 117

Página -2-
Columna ‘ID’ ....................................................................................................................................... 117
Columna ‘REG14’ ................................................................................................................................ 118
Columna ‘Trace Table’ ........................................................................................................................ 118
Vuelco de Transacción ......................................................................................................................... 119
Facilidad de diagnóstico de Ejecución (EDF) ...................................................................................... 121
Seguimiento de una Tarea .................................................................................................................... 122
Depuración y Prueba de una Transacción ............................................................................................ 132
MÓDULO V ........................................................................................................................................... 135
TEMAS VARIOS DE UTILIZACIÓN DEL CICS .................................................................................................. 135
Comando de Formateo de entrada........................................................................................................ 135
Comando de formateo de Salida ........................................................................................................... 136
Introducción ......................................................................................................................................... 138
Objetivos .............................................................................................................................................. 139
Facilidades de Recuperación del CICS ................................................................................................ 139
HANDLE CONDITION ........................................................................................................................ 139
HANDLE ABEND ................................................................................................................................ 140
Registros Protegidos ............................................................................................................................ 142
Control Exclusivo ................................................................................................................................. 143
Unidad lógica de trabajo...................................................................................................................... 143
Backout Dinámico de transacciones ..................................................................................................... 144
ABEND del Sistema.............................................................................................................................. 145
LOGGING ............................................................................................................................................ 146
JOURNALING ..................................................................................................................................... 147
JOURNALS Automáticos ...................................................................................................................... 147
Journal del Usuario ............................................................................................................................. 149
Comando Journal ................................................................................................................................. 149
Comandos de fecha y hora .................................................................................................................. 151
Administración de los tiempos y de las tareas....................................................................................... 151
Obtención de la hora ............................................................................................................................ 151
Obtención de la fecha........................................................................................................................... 152
FORMATTIME ..................................................................................................................................... 153
Función ................................................................................................................................................ 153
Sintaxis del Comando ........................................................................................................................... 153
Opciones Formattime ........................................................................................................................... 154
Condición FORMATTIME .................................................................................................................... 156
MÓDULO VI.......................................................................................................................................... 156
Funciones del BMS .............................................................................................................................. 156
Independencia de dispositivos .............................................................................................................. 157
Independencia de Formato ................................................................................................................... 158
Mapas físicos ....................................................................................................................................... 159
Conjuntos de Mapas ............................................................................................................................. 159
(MAPSET) ............................................................................................................................................ 159
Mapas simbólicos ................................................................................................................................. 163
Creación de conjuntos de ..................................................................................................................... 165
Mapas físicos y simbólicos. .................................................................................................................. 165

Página -3-
Definición de conjunto de..................................................................................................................... 168
Mapas Macro DFHMSD ...................................................................................................................... 168
Definición de mapas ............................................................................................................................. 173
Macro DFHMDI .................................................................................................................................. 173
Definición de campos ........................................................................................................................... 176
Macro DFHMDF ................................................................................................................................. 176
Modificación del Byte de Atributo ........................................................................................................ 183

Página -4-
Módulo I

Introducción a CICS

Procesamiento en Lotes
El CICS amplía en gran medida la programación de las aplicaciones en
línea. No obstante ello, antes de examinar la programación en línea, Veamos
las características del procesamiento en lotes. La figura 1-1 muestra el
método típico utilizado para actualizar un archivo en un entorno de
procesamiento en lotes.

REORDENES
ARCHIVO
MAESTRO DE
INVENTARIOS

Fig. 1-1.
Ejemplo de Entorno
de Procesamiento
en Lotes ACTUALIZACION ARCHIVOS
MAESTRO

INFROME DE
ESTADO de
EMISIONES Y INVENTARIO
RECIBOS

Probablemente haya escrito programas para ejecutar estas operaciones.


Puede recordar que en estos programas debía:

 Definir y asignar valores a las áreas de datos y variables


 Abrir todos los archivos
 Usar una rutina de entrada para leer un registro maestro o de detalle en
el momento adecuado
 Procesar el registro de detalle (en nuestro ejemplo, modificaciones de
inventario) y actualizar el archivo maestro

Página -5-
 Imprimir el registro actualizado en el informe de inventario
 Crear, si fuera necesario, un archivo de salida de reposición de ítems
 Cerrar los archivos cuando el programa haya concluido su
procesamiento

Veamos ahora los requerimientos de la programación batch. Para trabajar


con un archivo ha de comenzar por describirlo con la instrucción pertinente
del lenguaje de programación que esté utilizando.

A continuación debe codificar instrucciones para OPEN, CLOSE, READ,


WRITE para acceder al archivo. Las posibilidades de tales instrucciones
varían en función del lenguaje de programación, el sistema operativo y el
método de acceso que esté utilizando. En el programa han de incorporarse
todas las áreas de entrada/salida y de trabajo, definiéndolas durante la
compilación o adquiriéndolas dinámicamente al ejecutarse el programa.

INSTRUCCIONES

Fig. 1-2.
Diagrama
Conceptual de la
Memoria de un METODOS DE ACCESO
Programa Batch

AREAS DE ENTRADA/SALIDA

AREAS DE TRABAJO

En el procesamiento en lotes, el programa ha de atender con frecuencia


diferentes tipos de transacciones de entrada. En ocasiones, el resultado es
un programa largo y complicado. Además, como en un momento dado se
procesa todo un lote de transacciones, los varios departamentos de usuarios
deben disponer de sus documentos de entrada en un momento y lugar
designados. En el procesamiento en lotes no se procesa un ítem de datos
hasta que todo el lote esté listo. Luego, cuando el programa de aplicación
pide que los datos sean leídos en memoria, todos los ítems de datos son
procesados. Después de procesados todos los datos, la salida impresa se
devuelve a los departamentos de usuarios. El tiempo transcurrido entre la
creación de la entrada y la devolución de la salida impresa puede ser de
horas o de días.

Página -6-
Procesamiento en línea
Veamos un ejemplo de lo que quiere significarse con el vocablo en línea.
La Figura 1-3 muestra tres tipos de transacciones que podrían atenderse en
una aplicación de inventarios.

Consulta de
Estado de PROGRAMA 1
Existencias

ARCHIVO
MAESTRO DE
PARTES
Fig. 1-3 Pendientes
Ejemplo de Entorno
en Línea
PROGRAMA 2

Despachadas

Un ítem de datos está listo toda vez que un operador lo ingresa en la


terminal. Así, no se programa por adelantado el momento de la entrada de
los datos. El programa ha dejado de requerir la lectura de los datos, en lugar
de ello, ahora es el ítem de datos el que pide la ejecución del programa.
Un mensaje ingresado por un operador de terminal requiere con frecuencia
un respuesta inmediata. Por ejemplo, si ingresara una consulta sobre el nivel
de "stock" de un ítem del inventario, desea saber de inmediato si se dispone
de existencia. La consulta, en un sistema en línea, se atiende de inmediato.
Los mensajes pueden ser transmitidos concurrentemente desde varias
terminales. Si aquellos mensajes fueran de tipos diferentes (de consulta de
estado de "stock", de actualización del Archivo Maestro de Items), cada uno
es procesado por el programa adecuado. Esto significa, que en lugar de
escribir un programa largo y complejo para procesar diferentes tipos de
transacciones, el programador puede escribir varios programas cortos, y por
lo tanto relativamente simples, para procesar cada uno de los tipos de
transacción.

Del análisis anterior podemos determinar tres características del


procesamiento en línea, con respecto al procesamiento en lotes.

Página -7-
En un entorno en línea, los departamentos de una empresa pueden ingresar
datos concurrentemente y al azar, cada uno de ellos en sus propias
terminales. Una transacción ingresada en una terminal consta de
transacción, también llamado "ID de transacción " (pre-definida por el
programador de sistemas) y de datos. Cada una de las transacciones crea
una unidad de trabajo dentro del CICS llamada "tarea" (task).

TRANSACCION

TAREA

XD12 ROMERO E HIJOS 504,37....

DATOS

"UNIDAD DE TRABAJO"
CODIGO DE
TRANSACCION

TRANSACCION INGRESADA
DESDE UNA TERMINAL

Varias transacciones pueden acceder el mismo archivo al mismo tiempo

Los programas requeridos para atender transacciones concurrentes deben


estar disponibles para su ejecución concurrente en la misma partición/región

Para su ejecución concurrente, ha de haber una interfase que pueda hacer lo


siguiente.

Aceptar datos tan pronto estén listos para ser transmitidos


Recordar de qué terminal provinieron los datos
Llamar el programa adecuado y transferirle los datos
Controlar el uso compartido de los recursos dentro de la partición/región

Esa interfase, como ya lo habrá conjeturado es el CICS

Flujo de las Transacciones CICS

El CICS supervisa toda la actividad de comunicación de datos, lo que


significa que

administra las terminales


administra los datos
administra los programas de aplicación

Página -8-
Veamos qué sucede cuando se ingresa una transacción CICS en una
terminal.
Una transacción ingresada por un operador de terminal consta de dos partes:
una "ID de transacción" seguida de los "datos" que han de ser procesados.

En un ejemplo muy básico, supongamos que un operador desea consultar el


estado de un ítem del inventario. La ID de la transacción es "STAT" y el
número de artículo a comprobar es "19523"

STAT 19523

Cuando se ingresa esta información, un módulo de administración CICS la


lee en la partición/región CICS. Los datos se transfieren a un buffer de
terminal que ha sido adquirido para alojar el mensaje.

PARTICION/REGION CICS

BUFFER DE TERMINAL
STAT 19523
STAT 19523
MENSAJE DE
ENTRADA

Adviértase que no puede ingresarse ninguna otra transacción desde Terminal


1 hasta que se haya completado la transacción requerida corriente. Luego de
haber sido ingresada la transacción, el CICS valida la ID de la transacción.
Toda ID de transacción ha de predefinirse, y está asociada con un programa
de aplicación. Por ejemplo.

STAT STATPGM

NOMBRE DEL PROGRAMA DE APLICACION


RESPONSABLE DE PROCESAR LA
TRANSACCION CUYA ID ES STAT

ID DE TRANSACCION A SER
ASOCIADA CON EL PROGRAMA
STATPGM

Página -9-
Para una ID de la transacción válida, el CICS crea una "tarea" para procesar
esa transacción. En la siguiente ilustración, esta tarea es representada por el
rectángulo rotulado TASK1. TASK1 es en realidad un bloque de control que
contiene información que el programa de aplicación y el CICS necesitan para
llevar a cabo la unidad de trabajo a completar.

PARTICION/REGION CICS

BUFFER DE TERMINAL
STAT 19523
STAT 19523
MENSAJE DE
ENTRADA
BLOQUE DE CONTROL

TAREA 1

El siguiente paso consiste en cargar, si fuera necesario, el programa de


aplicación que ha sido codificado para procesar la transacción STAT. El
System Programmer puede identificar a los programas de aplicación de uso
frecuente como residentes en memoria virtual. EL CICS puede cargar
dinámicamente, toda vez que fueran necesarios, los programas raramente
utilizados.

Ahora puede comenzar el programa de aplicación que procesa la transacción


STAT. Puesto que ésta es una transacción de consulta, el programa emite un
pedido de lectura del registro del archivo maestro que tenga el número de
artículo 19523. El registro se transfiere a un "buffer de archivo" , que luego
se asocia con la tarea.

PARTICION/REGION CICS
STAT 19523

MENSAJE DE
ENTRADA BUFFER DE TERMINAL

STAT 19523

BLOQUE DE CONTROL
BIBLIOTECA DE BLOQUE
TAREA 1DE CONTROL
PROGRAMAS
TAREA 1

STATPGM
BUFFER DE ARCHIVOS
ARCHIVO
MAESTRO

Página -10-
Al terminar la transacción, se liberan los recursos adquiridos (por ejemplo
almacenamiento principal) y las conexiones establecidas durante el
procesamiento de la tarea. La terminal queda luego disponible para el
ingreso de otra transacción.

El Entorno CICS
El CICS es el programa principal de la partición/región en la que está
ubicado. Los programas de aplicación operan bajo el CICS. La figura 1-4
ilustra las varias particiones o regiones que atiende un sistema operativo,
incluso la partición/región CICS y la ubicación de los programas de
aplicación en relación con el CICS

DOS/VS o OS/VS
SISTEMA OPERATIVO

PARTICION/REGION CICS/VS

PROGRAMA PROGRAMA PROGRAMA


ARCHIVOS de de de
APLICACION APLICACION APLICACION

PARTICION/REGION 'X'
Fig. 1-4
Entorno CICS/VS
PARTICION/REGION 'Y''

El CICS controla la ejecución concurrente de los programas. Diferentes


programas pueden procesar concurrentemente diferentes tipos de datos o el
mismo programa puede procesar concurrentemente diferentes mensajes con
el mismo código de transacción. Por ejemplo, mientras una transacción está
en un estado de espera, esperando quizás que termine una operación de
entrada/salida, puede procesarse una segunda transacción. Así, varias
transacciones que están siendo atendidas concurrentemente por el mismo
programa pueden provocar la creación de diferentes tareas que comparten
las mismas instrucciones.

Página -11-
TRANSACCION TRANSACCION TRANSACCION
'A ' 'A ' 'A '

TAREA TAREA TAREA


A1 A2 A3

PROGRAMACION
DE
APLICACION

PARTICION/REGION CICS

Puesto que varias tareas pueden compartir el mismo programa de aplicación


las instrucciones del programa de aplicación no han de experimentar
modificaciones, esto es, durante la ejecución no debe modificarse
dinámicamente la codificación.

En el entorno CICS deben observarse dos reglas de programación

Todo programa de aplicación en línea debe devolver el control al CICS


Las instrucciones no se modificarán dinámicamente

Componentes del CICS

El sistema CICS consta de :

Módulo de Administración
Tablas
Bloques de Control

Los MÓDULOS DE ADMINISTRACIÓN son los programas CICS que


mantienen una interfase entre el sistema operativo y los programas de
aplicación.
Todo módulo de administración cumple una función particular. Por ejemplo,
cuando un programa de aplicación emite un pedido de lectura de un registro
el módulo de administración "File Control Program" (control de archivo)
procesa el pedido. Cuando un programa de aplicación emite un pedido de
transmisión de un mensaje a una terminal el módulo de administración
"Terminal Control Program" (control de terminales) actúa como la interfase.

Página -12-
Los pedidos de entrada/salida se hacen al CICS, en lugar de hacerlo al
sistema operativo como en el caso de procesamiento en lotes.

A nivel programa de aplicación, la administración de las comunicaciones por


el CICS es tan completa que la comunicación con las terminales puede ser
tan simple como leer un registro de entrada o escribir una línea de salida.

El CICS toma a su cargo la parte difícil de las operaciones de


entrada/salida, dejando al programa de aplicación sólo la lógica de la
ejecución . Para comunicarse con el CICS los programadores COBOL, PL/I o
ASSEMBLER pueden utilizar las instrucciones con las que están
familiarizados. No importa bajo que sistema operativo trabajan los usuarios.

MODULO DE MODULO DE
CONTROL CONTROL

Programa de Programa de
control de control de
archivos terminales

ARCHIVO A
TERMINAL

PROGRAMA PROGRAMA
DE DE
APLICACION APLICACION

LEER ENVIAR
ARCHIVO A MENSAJE

Página -13-
Las TABLAS definen el entorno del sistema CICS. Las tablas, generadas por
el System Programmer, están funcionalmente asociadas con los módulos de
administración. Por ejemplo, todas las definiciones de archivos están en la
"File Control Table" (tabla de control de archivos), de modo que todos los
programas de aplicación y tareas pueden compartirlas. Por este motivo, los
archivos no se definen en el programa de aplicación, a diferencia de los
programas batch. La "Terminal Control Table" (tabla de control de
terminales) define cada terminal de la red, el programa de aplicación no
necesita así ocuparse de los atributos físicos de las varias terminales del
sistema. No todos los módulos de administración tienen tablas asociadas.

MODULO DE MODULO DE
CONTROL CONTROL

Programa de Programa de
control de control de
archivos terminales

Terminal 'X'
ARCHIVO A

PROGRAMA PROGRAMA
DE DE
APLICACION APLICACION

LEER ENVIAR
ARCHIVO A MENSAJE

Ent.Terminal 'X'
Ent. Archivo A

TABLA DE
TABLA DE CONTROL DE
CONTROL DE TERMINALES
ARCHIVOS

Página -14-
Los BLOQUES de CONTROL contienen información sobre el tipo de
sistema. Al iniciarse una transacción se crea un bloque de control llamado
Area de Control de Tarea. El Area de Control de Tarea contiene información
perteneciente a la tarea. Por ejemplo, el Area de Control de Tarea contiene
señaladores del programa de aplicación y de la entrada de la terminal de la
"Terminal Control Table"

MODULO DE
CONTROL

Programa de
control de
terminales

Terminal 'X'

PROGRAMA
AREA DE
DE
CONTROL DE
APLICACION
TAREA

RECIBIR TAREA A
MENSAJE

Ent.Terminal 'X'

TABLA DE CONTROL
DE TERMINALES

Interfase a Nivel de Comando


La interfase a Nivel de Comando es una interfase entre los programas de
aplicación y el CICS.

Los programas ya no necesitan llamar directamente a los varios módulos de


administración del CICS. En lugar de ello, los pedidos de servicios se
expresan con comandos dirigidos a la Interfase a Nivel comando, la que a su
vez asegura la comunicación con el módulo correspondiente de
administración del CICS.

La interfase a Nivel de Comando elimina la necesidad de aprender la


estructura interna y la operación del CICS. Le permite programar una
aplicación en línea como si fuera una aplicación batch.

Página -15-
Características de un programa CICS

Un programa de aplicación que se ha de ejecutar en la partición/región CICS


ha de ser reentrante. Un programa reentrante es aquel que no se modifica a
sí mismo. si un programa no se modifica a sí mismo puede ser compartido
concurrentemente. Así, mientras procesa una transacción, un programa
puede atender otra con la misma ID que se inicie en otra terminal.

La ventaja de un programa reentrante radica en que sólo es necesario cargar


una vez el programa de aplicación, pudiendo luego ser utilizado por múltiples
tareas.
Empero, sólo se comparte la porción ejecutable del programa.

El CICS provee a cada tarea que ejecuta el programa una copia del área de
trabajo del programa. Esto se debe al hecho de que el contenido del área de
trabajo variará entre una tarea y la siguiente.

Todas las áreas adquiridas y liberadas dinámicamente durante la ejecución


de una tarea son parte del " Area de Almacenamiento Dinámico" (DSA) del
CICS. Así, la copia del área de trabajo de un programa para tarea se coloca
en la DSA.

La figura 2-1 ilustra la iniciación concurrente de dos transacciones XXXX


desde dos terminales. Ambas tareas usan el mismo programa de aplicación.

TRANSACCION 1

TAREA 1
Memoria de
trabajo
TCA
Fig. 2-1.
Area de
Almacenamiento Memoria de
Dinámico Trabajo
TAREA 2
TRANSACCION 2
ARCHIVOS

TCA

Memoria de
trabajo

Página -16-
Programas CICS Conversacionales y Pseudo-Conversacionales

Los programas conversacionales funcionan f de la siguiente manera:

recepción de la información ingresada


N
veces envío de la información a la pantalla
fin

Este produce que las tareas permanezcan en estado de espera a la


respuesta del usuario durante un gran porcentaje de tiempo, manteniendo
tomados durante todo ese tiempo memoria, recursos, etc...

Una manera más eficiente de resolver este problema es la siguiente:

recepción
N envío
veces fin del programa invocándose a sí mismo nuevamente
o
fin (la última vez)
usando el comando
RETURN TRANSiD

Esto hace que la tarea inicial termine, y al ingresar el usuario datos


nuevamente se inicia una nueva tarea con el mismo programa. Este proceso
se llama 'pseudo conversacional' y tiene las siguientes ventajas:

No se utiliza innecesariamente la memoria durante la entrada/ salida normal


ni durante el tiempo que el operador necesita para tomar decisiones
El operador sólo necesita conocer el código inicial de transacción. El
operador ignora si el programa ha sido dividido en dos o más tareas.

Concepto de COMMAREA

Los datos utilizados o creados por un programa deben, en ocasiones, ser


transferidos a otro programa para su procesamiento o información.
Cuando es necesario transferir estos datos, deben almacenarse en un área
de trabajo denominada COMMAREA.
Esta área de comunicaciones es externa al programa llamado y debe
definirse en la LINKAGE SECTION.

Bloque de Interfase de Ejecución (EIB)

Además de los servicios (tales como lectura de un registro) prestados por los
varios módulos de administración del CICS, el CICS conserva ciertos datos

Página -17-
que el programa de aplicación puede necesitar durante la ejecución - datos
tales como el número de la tarea, la hora y la fecha.

El CICS registra este tipo de datos internos en áreas a las que el programa
de aplicación no tiene acceso. Empero, el CICS copia los datos en un
Bloque de Interfase de Ejecución (EIB), que se crea en el momento de
iniciarse la tarea. Hay un EIB por tarea. El Traductor de Comandos incluye
automáticamente una copia del EIB en el programa de aplicación.

El EIB de una tarea almacena información que el programa de aplicación


puede recuperar luego utilizando los nombres de campos EIB.

He aquí los nombres y sus contenidos.

EIBTIME Hora en la que fue arrancada la tarea

EIBDATE Fecha en la que fue arrancada la tarea

EIBTASKN Número de tarea asignado por el CICS a la tarea

EIBTRNID ID de la transacción

EIBTRMID Identificación de terminal

EIBAID Tipo de operación de entrada requerida en la terminal, es decir


si oprimió la tecla ENTER, PF3,PF1

EIBCPOSN Posición del cursor en la pantalla en el momento de la entrada

EIBCALEN Longitud del área de comunicación (COMMAREA) transferida a


un programa de aplicación llamado por otro programa de
aplicación. COMMAREA permite la transferencia de datos de
un programa a otro cuando una transacción provoca la
ejecución de un sucesión de varios programas. COMMAREA
puede utilizarse también para transferir datos de una tarea a
otra.

EIBFN Código que representa la función requerida por el último


comando CICS desde el programa de aplicación.

EIBRCODE El código de respuesta CICS para el último comando recibido y


procesado.

EIBREQID Identificador de pedido asignado por el CICS a un pedido de


administración de tiempo

Página -18-
Módulo II

Control de Programas

Consideraciones sobre los programas de aplicación

En la operación real, es común que una tarea requiera la ejecución de varios


programas de aplicación.

Supongamos que un operador ingresa datos en una terminal para agregar o


actualizar un registro. Entre las operaciones a llevar a cabo pueden incluirse:

 Usar una rutina de verificación para comprobar la clave


 Probar un código para determinar si la entrada es un nuevo registro o
una actualización
 Agregar un nuevo registro o actualizar un registro existente
 Procesar condiciones de excepción (de haberlas)

Un programa en un ambiente batch podría consistir en los siguientes


segmentos de programa:

RUTINA DE INICIALIZACION

RUTINA DE VALIDACION

RUTINA DE VERIFICACION
DE CODIGO

RUTINA DE AGREGADO
DE UN REGISTRO

RUTINA DE ACTUALIZACION
DE UN REGISTRO

RUTINA DE MANEJO DE
SITUACIONES ANORMALES

Existen ciertas desventajas en el programa anterior, de procesarse en un


ambiente batch o en un entorno CICS

Página -19-
Las rutinas para agregar y actualizar están ambas presentes, aunque solo se
necesita una de ellas para procesar una transacción dada
Las rutinas para atender condiciones anormales también están presentes,
aún cuando durante el procesamiento de una transacción quizá no se
necesite de ellas

Se dispone de dos métodos para reducir el total general de memoria que un


programa de aplicación necesita en cualquier momento: vinculación y
transferencia de control.

Ambos métodos transferirán el control de un programa de aplicación a otro.


Las anteriores funciones del batch podrían atenderse en el CICS de la
siguiente manera. Por ejemplo:

 La rutina de validación constituye un programa separado


 Después de probado el código de la transacción, sólo es necesario
cargar una rutina (agregado o actualización) para atender transacción
 En el procesamiento secuencial de la transacción, la rutina de
inicialización podría desasignarse de la tarea tan pronto como el control
haya sido transferido al siguiente paso (agregado o actualización)
 Las rutinas para procesar condiciones anormales se cargan sólo al
detectarse tales condiciones

Invocación de un programa

Dos son los comandos que facilitan la transferencia del control de un


programa a otro. Cuando se usa LINK el control retorna finalmente al
programa llamador, con XCTL, no.

Comandos de Control de Programas

El comando LINK se usa en su programa para llamar a otro programa, cuyo


nombre se encierra entre paréntesis.

EXEC CICS LINK PROGRAM (name)

Si fuera necesario se carga el programa llamado, y se le da el control.

Supongamos que está ejecutado el programa A. En un punto dado, el


programa A emite el comando LINK para el programa B. 'Por definición, B es
de nivel lógico inferior a A'. Se emite el comando LINK, A detiene la ejecución
pero no termina. Se carga B, recibe el control y ejecuta hasta que dentro de

Página -20-
B se detecta un comando RETURN. En ese momento, el control se devuelve
al programa llamador (en este caso, el programa A). se reanuda la ejecución
de A en la instrucción que sigue de inmediato al comando LINK.
La secuencia puede ser diagramada de la siguiente manera:

PROGRAMA A

PROGRAMA B
EXEC CICS LINK

PROGRAMA DE
NIVEL LOGICO
SUPERIOR
EXEC CICS
RETURN

PROGRAMA DE
NIVEL LOGICO
INFERIOR

El comando RETURN se codifica así:

EXEC CICS RETURN

Este comando se usa para devolver el control:

 al programa del siguiente nivel lógico superior, o


 al CICS cuando termina la tarea

Cuando un programa de aplicación emite un comando LINK a otro programa


de aplicación, el nombre del programa llamado debe estar en la PPT. Si no lo
estuviera, se produce un error de identificación de programa (PGMIDERR).
Para evitar una terminación anormal si en la PPT no se hallara el nombre de
un programa llamado, debe codificarse una sentencia de condición HANDLE
que especifique PGMIDERR, se colocará delante de la sentencia LINK.

Página -21-
Por ejemplo:

Programa A

EXEC CICS HANDLE CONDITION PGMIDERR (NOPROG) ...

EXEC CICS LINK PROGRAM ( 'PROGRAMB' )

END EXEC CICS RETURN

NOPROG *** RUTINA DE DIAGNOSTICO DE ERRORES ***

GO TO END

En el ejemplo anterior, si el CICS no conociera PROGRAMB en el momento


de emitirse el comando LINK, el control se transfiere a la rutina de error
(NOPROG) del programa A.

En la vinculación, el RETURN se produce siempre al programa llamador. En


ocasiones, particularmente en el caso en que sea necesario dividir en dos o
más partes menores a un programa de muchos pasos secuenciales, no es
necesario retornar al programa llamador. Si un programa de aplicación fuera
invocado por un comando XCTL, el control se transferirá al programa
nombrado, no obstante, el programa llamador no volverá a ganar el control
después de haberse emitido el XCTL. (La tarea libera al programa llamador y
éste puede ser eliminado de memoria si no lo están utilizando otras tareas).
Por ejemplo:

PROGRAMA X PROGRAMA Y PROGRAMA Z

EXEC CICS
EXEC CICS XCTL EXEC CICS XCTL RETURN

Adviértase que cuando un programa se ejecuta por medio de un XCTL el


programa invocado es del mismo nivel lógico del programa llamador.

El formato del comando XCTL es el siguiente:

Página -22-
EXEC CICS XCTL PROGRAM (name)

Se usa este comando para llamar a otro programa. El programa llamado se


carga si fuera necesario y recibe el control.

Cuando en un programa invocado por un comando XCTL se emite un


comando RETURN, el retorno se produce al siguiente nivel lógico más alto
o al CICS (si no se emitió ningún LINK). Por ejemplo:

PROGRAMA A

EXEC CICS LINK


PROGRAMA X PROGRAMA Y PROGRAMA Z

EXEC CICS
RETURN

EXEC CICS
EXEC CICS XCTL EXEC CICS XCTL RETURN
AL CICS

En resumen:

 LINK transfiere el control al programa llamado sobre una base


temporaria. El control se devolverá al programa que emitió el comando
LINK.

 XCTL transfiere el control al programa llamado sin devolver más tarde el


control al programa llamador.

 El programa llamador y el llamado son del mismo nivel


lógico
 Salvo que otra tarea estuviera ejecutando al programa
llamador, su memoria queda disponible para otro uso

Puede también producirse el error PGMIDERR en conexión con la función


XCTL. Para evitar la terminación anormal de una tarea, deberá codificarse

Página -23-
una sentencia de condición HANDLE que especifique PGMIDERR y que
preceda al comando XCTL. Por ejemplo:

PROGRAMA A

EXEC CICS HANDLE CONDITION PGMIDERR (NOPROG) ...

EXEC CICS LINK PROGRAM ( 'PROGRAMB' )

END EXEC CICS RETURN

NOPROG *** RUTINA DE DIAGNOSTICO DE ERROR***

GO TO END

Si el CICS no pudiera identificar a PROGRAMB, el sistema devuelve el


control al programa original, en el rótulo NOPROG.

La principal ventaja de la vinculación (LINK) o de la transferencia del control


(XCTL) es reducir el total general de memoria que un programa de aplicación
necesita en un momento dado.

Un LINK debiera usarse para segmentar programas cuyas funciones pueden


o no ser necesarias (por ejemplo, rutina de condiciones anormales, rutinas
de actualización o de agregado).

Un XCTL debiera usarse para subdividir grandes programas en dos o más


partes cuando no haya un motivo lógico para retornar a la parte anterior
después de la ejecución de una parte subsiguiente.

El comando EXEC CICS RETURN se utiliza para retornar al programa del


siguiente nivel más alto o para devolver el control al CICS.

Programa modular

En la introducción a este módulo presentamos un ejemplo de aplicación. He


aquí ese ejemplo tal como podría representarse en un programa batch, o en
un programa CICS sin posibilidades de vinculación.

Página -24-
RUTINA DE INICIALIZACION

RUTINA DE VALIDACION

RUTINA DE VERIFICACION
DE CODIGO

RUTINA DE AGREGADO
DE UN REGISTRO

RUTINA DE ACTUALIZACION
DE UN REGISTRO

RUTINA DE MANEJO DE
SITUACIONES ANORMALES

La figura 2-1 ilustra este programa tal como podría dividirse en módulos en
los que se utilizan los comandos LINK y XCTL para mantener el flujo lógico y
proveer un uso óptimo del almacenamiento.

INICIALIZAR

Actualización AGREGADO
VALIDACION (LINK)

RETURN RETURN
TEST
Fig. 2-1. Validación
Ejemplo de Agregado
Transferencia del (XCTL) AL CICS AL CICS
ni actualización

control de un programa
Ni agregado

a otro bajo el CICS Actualización


RETURN
(XCTL)

RETURN

AL CICS

Página -25-
Los programas para inicializar, agregar un registro y actualizar son todos del
mismo nivel lógico. El comando RETURN devuelve el control al programa del
siguiente nivel lógico más alto, en este caso, CICS. Se usa LINK para llamar
al programa VALIDATE porque INITIALIZE tiene más 'trabajo' que hacer.
Cuando el control se retransfiere de VALIDATE a INITIALIZE se prueba un
código para determinar si debe invocarse ADD o UPDATE.
Luego de la prueba, deja de ser necesario el programa INITIALIZE. Por lo
tanto, XCTL es el comando que se usa para llamar a ADD o UPDATE.

Bajo el CICS una transacción puede asociarse con otra, terminando los
programas de procesamiento con el siguiente comando:

EXEC CICS RETURN TRANSID (name)

Una vez procesada la primer transacción, el comando RETURN retransfiere


el control al CICS. EL PCP analiza el parámetro TRANSID y almacena el
código de transacción conjuntamente con otra información concerniente a la
terminal asociada con la tarea que acaba de completarse. Al recibirse el
siguiente mensaje de la misma terminal (por ejemplo, la respuesta
'selección') se crea una nueva tarea con el código de transacción VAC2.

PROCESO DE REQUERIMIENTO INICIAL


VAC1
VAC1 PAISES, FECHAS
EXEC CICS RECEIVE .......
HOTELES, TARIFAS
EXEC CICS SEND .......

EXEC CICS RETURN

TRANSID ('VAC2')

PROCESO DE SELECCION
VAC2
EXEC CICS RECEIVE ....... SELECCION

EXEC CICS SEND ....... CONFIRMACION

EXEC CICS RETURN

Página -26-
Iniciación de una Tarea

Hemos hablado de las formas de iniciar un programa, veamos ahora como


puede iniciarse una tarea.

el operador digita una ID de transacción en la terminal


el programa de aplicación indica una tarea especificando la ID de la
transacción en el comando EXEC CICS RETURN

Hay todavía otra manera de iniciar una tarea. El programa de aplicación


puede iniciar una tarea en una terminal específica emitiendo el siguiente
comando:

EXEC CICS START TRANSID (name) TERMID (name)

ID de ID de
TRANSACCION TERMINAL

Para iniciar de inmediato la tarea, puede agregarse la opción INTERVAL (0)


al comando START. Si la tarea ha de iniciarse posteriormente, INTERVAL
puede especificarse de la siguiente manera:

INTERVAL (hhmmss)

PERIODO DE TIEMPO LUEGO DEL


CUAL SE ARRANCARA LA TAREA

Supongamos, POR ejemplo, que son las 3 de la tarde y que desea iniciar
una nueva tarea a las 5.

12 12

3 3

Página -27-
El período de tiempo INTERVAL se ilustraría como (020000). La tarea se
iniciaría luego de transcurridas dos horas. Aunque no se recomienda, puede
especificarse un intervalo de hasta 99 horas.

Página -28-
Control de Archivos

Definición de Areas de trabajo de Entrada/Salida

Un programa de aplicación procesa registros lógicos, no registros físicos.


Para procesar un registro lógico define un área de trabajo, en el
almacenamiento de trabajo del programa de aplicación.

El área de trabajo es el espacio en el que lee un registro o construye un


registro que ha de ser grabado. El Programa de Interfase de Ejecución
transfiere los datos entre el área de trabajo de su programa y las áreas de
trabajo que pertenecen al FCP. La figura 2.2 ilustra ejemplos de codificación
de una definición de un área de trabajo Entrada/Salida y de un comando
READ en el cual se referencia el área de trabajo. La opción RIDFLD
especifica el área que contiene la clave del registro. El operador,
generalmente, ingresa la clave, la que por lo tanto, está disponible en el área
de entrada.

No hay definiciones de archivos en los programas de aplicación CICS porque


los atributos de los archivos se definen, para cada archivo, en la FCT.
Los archivos se abren al inicializarse el CICS.
Los registros que han sido leídos y los que han de grabarse se hallan en el
área de trabajo del programa de aplicación.

El control exclusivo asegura que los programas de aplicación que lean y


actualicen el mismo dato produzcan resultados correctos.

Fig. 2-2.
Lectura de un
Registro de un WORKING-STORAGE SECTION.
Archivo 01 INPUT-AREA.
02 INPUT-KEY PIC X(6).

01 RECORD-AREA.
02 RECORD-KEY PIC X(6).

PROCEDURE DIVISION.

EXEC CICS READ INTO (RECORD-AREA)


FILE ('GENLEDGR')
RIDFLD (INPUT-KEY)
END-EXEC.

Página -29-
Comandos de Control de Archivos

Lectura de un registro

Para recuperar un registro de un archivo se usa el comando READ. He aquí


un ejemplo:

EXEC CICS READ INTO (RDAREA)


FILE ('FILEA')
RIDFLD (NUMBER)

La figura 2.3 da opciones y argumentos del comando READ que pueden


codificarse en su programa en función del método de acceso que se use.

METODO DE ACCESO EXEC CICS READ COMENTARIOS

VSAM INTO (data-area)

DAM/BDAM LENGTH (data-area)


Fig. 2-3.
Parámetros del ISAM FILE (name) NOMBRE DEL ARCHIVO
Comando READ RIDFLD (data-name) CAMPO DE IDENTIFICACION DEL
REGISTRO

DAM/BDAM DEBKEY DESBLOQUE POR CLAVES


DEBREC DESBLOQUE POR REGISTROS
RELATIVOS

VSAM GENERIC
KEYLENGTH (data-value) CLAVE PARCIAL

VSAM GTEQ BUSQUEDA POR MAYOR O IGUAL QUE


EQUAL BUSQUEDA POR IGUAL
RBA DIRECCION RELATIVA DE BYTE
RRN NUMERO RELATIVO DE REGISTRO

INTO identifica el área de trabajo en la que ha de colocarse un registro


después de haber sido leído. Si estuviera trabajando con registros de
longitud variable, la descripción del registro ha de ser suficientemente grande
como para contener el registro de longitud máxima.

Página -30-
LENGTH especifica una media palabra binaria S9(4) COMP que da la
longitud del área de trabajo. Define el registro más largo que aceptará el
programa. La longitud del registro leído se coloca en el campo binario de dos
bytes definido por length. Si un registro fuera más largo que lo especificado,
se lo trunca y se lo coloca en el área de trabajo, advirtiéndose la condición
LENGERR. La longitud real del registro se coloca en LENGTH.

Esta opción es necesaria al procesar registros de longitud variable. No es


necesario especificarla para registros de longitud fija si el área de trabajo
fuera del tamaño del registro de longitud fija.

FILE especifica un nombre simbólico o literal que identifica la entrada de la


FCT que describe el archivo a leer. Si se usara un nombre simbólico ha de
ser definido como un campo de ocho caracteres en el cual el nombre del
archivo se ha colocado alineado a la izquierda.

RIDFLD identifica el nombre simbólico del área que contiene la clave del
registro a leer. El formato y el contenido de RIDFLD varía en función del
método de acceso que esté usando.

Para los archivos ISAM, debe especificarse una clave completa de registro
Para los archivos VSAM KSDS, puede especificarse una clave completa o
genérica. Cuando se usa una clave genérica, deben también especificarse
las opciones KEYLENGTH y GENERIC. estas opciones se describen en
párrafos subsiguientes. Luego de completado el READ, RIDFLD contendrá la
clave completa el registro leído. Por lo tanto, ha de ser lo suficientemente
grande como para acomodar la clave del registro completa
Para los archivos VSAM ESDS o KSDS accedidos mediante el RBA, RIDFLD
contiene la dirección binaria del byte relativo de 4 bytes (RBA). Cuando se
especifica el RBA, deberá incluirse la opción RBA.
Para los archivos VSAM RRDS, RIDFLD contiene el número binario de
registro relativo de 4 bytes (RRN). Cuando se especifica el RRN, debe
codificarse la opción RRN.
Para los archivos DAM/BDAM, RIDFLD consta de tres subcampos: La
referencia de bloque identifica el bloque contiene el registro a procesar.
Puede especificarse como un número de bloque relativo, como número de
pista y registro relativo, o como una dirección real en disco.

Puede especificarse una clave física si el conjunto de datos ha sido grabado


con clave. Su longitud debe corresponderse con la longitud de clave
especificada para el archivo en la FCT.

Para registros bloqueados, puede especificarse un argumento de


desbloqueado si el CICS hubiera de desbloquear los registros. el argumento
de desbloqueo puede ser una clave de registro lógico (opción DEBKEY) o un
número de registro relativo (opción DEBREC). Si se especificara una clave,
su longitud debe corresponderse con la longitud de clave del registro lógico
definida para el archivo en la FCT. Si se omitiera el argumento de
desbloqueo (DEBKEY o DEBREC), se recuperará todo el bloque para el
procesamiento.

GENERIC identifica a la clave usada para buscar un archivo VSAM KSDS


como una clave parcial, cuya longitud se especifica en KEYLENGTH.

Página -31-
KEYLENGTH es un campo binario de dos bytes que identifica la longitud de
la clave especificada en RIDFLD. Esta opción debe incluirse si utiliza una
clave genérica, ya que indica la longitud de la clave genérica. De otra manera
no es necesario especificar KEYLENGTH.

Las siguientes dos opciones especifican la condición deseada de clave de


registro que satisface la búsqueda de archivos VSAM KSDS. Si no se
especifica ninguna, se sumirá EQUAL.

GTEQ significa que una clave de registro mayor que, o igual a la clave
especificada en el comando READ satisface la búsqueda.

EQUAL significa que una clave de registro idéntica a la clave especificada en


el comando READ satisface la búsqueda.

Esta opción debe ser especificada para archivos VSAM si la clave de


búsqueda es una clave genérica.

En la figura 2.4 se da un ejemplo del efecto de una combinación de estas


opciones en un archivo VSAM. Supongamos que el archivo tiene claves
1005, 1007 y 1021,

Parametros codificdos en el comando READ REGISTRO LEIDO

GENERIC KEYLENGTH RIDFLD


Fig. 2-4.
Resultados del
Comando OMITIDO OMITIDO EQUAL 1005 1005

OMITIDO OMITIDO EQUAL 1006 NO ENCONTRADO

OMITIDO OMITIDO GTEQ 1006 1007

SI 3 EQUAL 102 1021

SI 3 EQUAL 101 NO ENCONTRADO

SI 3 GTEQ 101 1021

Atención de condiciones de excepción

Todas las operaciones de entrada/salida de archivos (esto es, READ,


WRITE, REWRITE) pueden provocar condiciones de excepción. Estas

Página -32-
condiciones pueden ser especificadas en una sentencia HANDLE que
precede a un comando READ, WRITE, etc. Luego , de producirse la
condición de excepción, el control se transferirá a la sentencia de programa
especificada en las opciones de la sentencia HANDLE. Por ejemplo:

EXEC CICS HANDLE CONDITION


LENGERR (TOOLONG)
NOTFND (NOREC)
ERROR (OTHER)

Los parámetros TOOLONG, NOREC y OTHER son rótulos de sentencias de


su programa de aplicación a los cuáles se transferirá el control de producción
cualquiera de las condiciones nombradas.

La siguiente lista agrupa condiciones de excepción de Control de Archivos de


acuerdo con el tipo de información que generan. También se dan
sugerencias generales sobre la acción que el programa podría tomar.

Condiciones que dan información de procesamiento al programa.

ENDFILE: se ha alcanzado el fin de archivo

NOTFND: el registro con la clave especificada no está en el archivo

Estas condiciones indican el estado de la operación. El procesamiento puede


continuar después de tomarse la acción que fuere adecuada.

Condiciones que indican errores del programa de aplicación

INVREQ: Pedido inválido

LENGERR: Error de longitud para un registro leído o grabado

FILE NOT FOUND: El nombre del archivo no está en la FCT

ILLOGIC: Solamente VSAM - error VSAM no cubierto por otras categorías de


respuesta CICS.

Estas condiciones indican usualmente un error del programa de aplicación.


Probablemente se requiere una modificación del programa de aplicación.
El programa podría emitir un comando ABEND, o producir un vuelco y
terminar normalmente. Estas condiciones no debieran producirse una vez
que el programa está en producción.

Condiciones que indican un estado externo del sistema

IOERR: Error de entrada/salida no cubierto por otra condición de excepción


CICS.

NOTOPEN: El archivo requerido no está abierto.

Página -33-
Estas condiciones indican que el archivo que se está procesando no está
disponible. el programa de aplicación podría transmitir un mensaje a la
terminal maestra CICS alertando al operador para que observe el Sistema.
El operador de la terminal solicitante podría también ser notificado que la
transacción no puede completarse en ese momento.

La figura 2.5 muestra un ejemplo de codificación de la definición del


almacenamiento de trabajo y del comando READ. Corresponde que advierta
las verificaciones de errores que pueden especificarse en un programa de
aplicación de este tipo.

Fig. 2-5.
Recuperación (lectura solamente)
de un registro (COBOL).

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPCOB1.
*
*EL PROGRAMA LEE UN REGISTRO CON LA CLAVE LAX01 EN UN ARCHIVO LLAMADO MAESTRO
*
*
*
***EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PIC S9(4) COMP VALUE 25.
77 RECORD-KEY PIC X(5) VALUE 'LAX01'.
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
*** VERIFICACION DE ERROR ***
EXEC CICS HANDLE CONDITION LENGERR (RTOOLONG)
NOTFND (NOREC) ERROR (OTHERR)
END-EXEC.

EXEC CICS READ INTO (FILE-AREA) FILE ('MASTER')


RIDFLD (RECORD-KEY) LENGTH (LEN)
END-EXEC.
*** REGISTRO DEL PROCESO ***
.
.
.
RTOOLONG.
*ERROR DE PROCESAMIENTO.EL REGISTRO LEIDO ES MAS EXTENSO QUE *
*EL NUMERO DE BYTES ESPECIFICADOS EN LA LONGITUD DEL CAMPO (LEN)*
.
.
.

Página -34-
NOREC.
*ERROR DE PROCESAMIENTO.EL REGISTRO CON LA CLAVE *
*ESPECIFICADA NO ESTA EN EL ARCHIVO *
.
.
OTHERR.
*ERROR DE PROCESAMIENTO.HA SURGIDO OTRO ERROR *

Actualización de un registro

La actualización de un registro involucra la lectura del registro (comando


READ con UPDATE), su modificación en memoria, y su nueva grabación en
la misma ubicación de un dispositivo de almacenamiento de acceso directo.

En la fig.2.6 pueden observarse las opciones del comando READ para una
actualización. Estas opciones tienen el mismo significado que las usadas en
el comando de lectura solamente. UPDATE es la opción que indica al FCP
que ha de obtenerse un registro para su posterior actualización.

METODO DE ACCESO EXEC CICS READ

VSAM INTO (data-area)

DAM/BDAM LENGTH (data-area)

ISAM FILE (name)

UPDATE

RIDFLD (data-name)

DAM/BDAM DEBKEY

DEBREC

Fig. 2-6.
Comandos READ y VSAM GENERIC
REWRITE
KEYLENGTH (data-value)

VSAM GTEQ

EQUAL

RBA

RRN

EXEC CICS REWRITE

VSAM FROM (data-area)

DAM/BDAM LENGTH (data-area)

ISAM FILE (name)

Página -35-
El comando REWRITE se usa para actualizar un registro que ha sido leído
por un READ con la opción UPDATE. En el comando REWRITE, la opción
FROM identifica el área que contiene el registro que ha de grabarse
nuevamente. La longitud del registro se especifica en la opción LENGTH.
Adviértase que LENGTH puede ser una constante en el comando REWRITE.
La figura 2.7 ilustra un ejemplo de actualización de archivo en el cual se
define un área de trabajo, una lectura de registro para actualización y la
regrabación del registro. Revise el ejemplo.

Fig. 2-7.
Actualización de Archivo.
(COBOL).
IDENTIFICATION DIVISION.
*
* EL PROGRAMA LEE Y ACTUALIZA UN REGISTRO CON EL CODIGO LAX01 EN
* UN ARCHIVO LLAMADO MAESTRO *
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PIC S9(4) COMP VALUE 25.
77 RECORD-KEY PIC X(5) VALUE 'LAX01'.
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
*VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION LENGERR(RTOOLONG)
NOTFND(NOREC) ERROR(OTHERR)
END-EXEC.
EXEC CICS READ INTO(FILE-AREA) FILE('MASTER')
RIDFLD(RECORD-KEY) LENGTH(LEN) UPDATE
END-EXEC.
***REGISTRO DEL PROCESO ***
.
.
.
EXEC CICS REWRITE FROM(FILE-AREA) FILE('MASTER')
LENGTH(LEN) END-EXEC.
.
.
.
RTOOLONG.
*ERROR DE PROCESAMIENTO. EL REGISTRO LEIDO ES MAS EXTENSO *
*QUE EL NUMERO DE BYTES ESPECIFICADOR EN LA LONGITUD DEL *
*CAMPO (LEN)*
.
.
.
NOREC.
*ERROR DE PROCESAMIENTO.EL REGISTRO CON LA CLAVE ESPECIFICADA*

Página -36-
*NO ESTA EN EL ARCHIVO *
.
.
.
OTHERR.
*ERROR PROCESSING - OTHER ERROR HAS OCCURRED *
.
.
.

Eliminación de Registros de un Archivo VSAM

Solamente se pueden borrar registros cuando se trata de archivos VSAM


KSDS o RRDS. con frecuencia, cuando ha de eliminarse un registro, éste ha
de ser primero leído para determinar que ya no es necesario . En este caso,
se leería el registro para actualización y luego se lo eliminaría si fuera
necesario.

En la figura 2.8 pueden observarse los parámetros para esta operación.

METODO DE ACCESO EXEC CICS READ

VSAM INTO (data-area)


(KSDS)
FILE (name)

UPDATE
Fig. 2-8.
Comandos READ y RIDFLD (data-name)
DELETE
GTEQ EQUAL

RBA RRN

EXEC CICS DELETE

FILE (name)

Liberación de un Registro

Cuando se ha leído un registro utilizando un comando READ para 'lectura


solamente', ese registro sigue estando a disposición de otras tareas para su
lectura. Cuando un registro ha sido leído para su actualización, el registro
queda automáticamente bajo control exclusivo. Una vez ejecutado un
comando REWRITE o DELETE a continuación de un READ para
actualización, el FCP cancela automáticamente el control permitiendo que

Página -37-
otra tarea tenga acceso a ese registro. Cuando la tarea termina también se
cancela el control exclusivo.

Empero, dispone de la opción, luego de leer el registro para actualización, de


no grabar nuevamente o de eliminar el registro. En ese caso, puede cancelar
el control exclusivo con el siguiente comando:

EXEC CICS UNLOCK FILE (file-name)

Si no emitiera este comando, ninguna otra tarea podrá acceder al registro (o


cualquier registro del mismo intervalo de control VSAM) hasta que la tarea
termine.

La figura 2.9 ilustra un ejemplo de una operación de 'delete' a continuación


de una lectura para actualización.
Fig.2-9.
DELETE a continuación de
una Lectura para Actualización.
(COBOL).
IDENTIFICATION DIVISION.
*
* EL PROGRAMA LEE Y BORRA UN REGISTRO CON EL CODIGO LAX01 EN *
* UN ARCHIVO LLAMADO MAESTRO *
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PIC S9(4) COMP VALUE 25.
77 RECORD-KEY PIC X(5) VALUE 'LAX01'.
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
*VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION LENGERR(RTOOLONG)
NOTFND(NOREC) ERROR(OTHERR)
END-EXEC.
EXEC CICS READ INTO(FILE-AREA) FILE('MASTER')
RIDFLD(RECORD-KEY) LENGTH(LEN) UPDATE
END-EXEC.
.
.

***SI EL REGISTRO NO DEBE SER SUPRIMIDO, LO LIBERA ***


EXEC CICS UNLOCK FILE('MASTER')

Página -38-
END-EXEC.

* OTHER PROCESSING *
.
.
*PARA SUPRIMIR EL REGISTRO *
EXEC CICS DELETE FILE('MASTER')
END-EXEC.
RTOOLONG.
*ERROR DE PROCESAMIENTO. EL REGISTRO LEIDO ES MAS EXTENSO *
*QUE EL NUMERO DE BYTES ESPECIFICADOR EN LA LONGITUD DEL *
*CAMPO (LEN)*
.
.
.
NOREC.
*ERROR DE PROCESAMIENTO.EL REGISTRO CON LA CLAVE ESPECIFICADA*
*NO ESTA EN EL ARCHIVO *
.
.
.
OTHERR.
*ERROR PROCESSING - OTHER ERROR HAS OCCURRED *

Si ha de eliminarse sólo un registro, puede codificarse simplemente el


comando DELETE sin ningún comando READ para actualización que le
preceda.
En este caso sólo son necesarias las opciones FILE y RIDFLD. Por ejemplo,
sólo necesita codificar este comando en su programa.

EXEC CICS DELETE

FILE ('MAESTRO')

RIDFLD ('RECORD-KEY')

IDENTIFICA EL
REGISTRO A SER
BORRADO

Cuando se especifica una clave genérica, se borra todo el grupo de registros


que tiene un prefijo común identificado por la clave genérica. La figura 2.10
da cuenta de las opciones para este tipo de operación de borrado.

Página -39-
METODO DE ACCESO EXEC CICS DELETE

Fig. 2-10. VSAM FILE (name)


Opciones DELETE
RIDFLD (data-name)
para una Clave
Genérica Común GENERIC

KEYLENGTH (data-value)

NUMREC (data-value)

RBA RRN

La opción NUMREC siempre se codifica con la opción GENERIC y especifica


un campo binario de dos bytes. en este campo el CICS devolverá el número
de registros que borró el VSAM.

La fig. 2.11 da ejemplo de un programa para borrar registros de un archivo


VSAM KSDS en base a una clave genérica.

Fig.2-11.
DELETE de un Grupo de Registros
(COBOL).
IDENTIFICATION DIVISION.
*
* EL PROGRAMA ELIMINA REGISTROS CON CLAVES GENERICAS LA EN *
* UN ARCHIVO LLAMADO MAESTRO *
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 RECORD-KEY PIC X(5) VALUE 'LAX01'.
77 REC-DEL PIC S9(4) COMP.
.
.
.
PROCEDURE DIVISION.
*VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
NOTFND(NOREC) ERROR(OTHERR)
END-EXEC.
EXEC CICS DELETE FILE('MASTER') KEYLENGTH(2)
RIDFLD(RECORD-KEY) GENERIC NUMREC(REC-DEL)
END-EXEC.
***EL NUMERO DE REGISTROS ELIMINADOS ESTA EN EL CAMPO REC-DEL***
.
.

Página -40-
.
NOREC.
*ERROR DE PROCESAMIENTO.EL REGISTRO CON LA CLAVE ESPECIFICADA*
*NO ESTA EN EL ARCHIVO *
.
.
.
OTHERR.
*ERROR DE PROCESAMIENTO - HA SURGIDO OTRO ERROR *
.
.
.

Resumiendo

La función de la opción RIDFLD en un comando READ es contener la clave


del registro a leer ( el formato varía en función del método de acceso que se
use)

Un comando READ que incluya la opción UPDATE debe preceder aun


comando REWRITE. Es optativo para un DELETE.

El comando DELETE se permite en los siguientes métodos de acceso de


VSAM: KSDS y RRDS.

Agregado de Registros

Se agregan registros a un archivo de acceso directo mediante el comando


WRITE. Las opciones son estas:

METODO DE ACCESO EXEC CICS WRITE

VSAM FROM (data-area)


DAM/BDAM
Fig. 2-12. ISAM LENGTH (data-value)
Comando WRITE
FILE (name)

RIDFLD (data-name)

VSAM RBA RRN

MASSINSERT

FROM indica el área de trabajo en la que se encuentra el registro a grabar.

Página -41-
MASSINSERT permite grabar múltiples registros en secuencia ascendente
usando el mismo área de trabajo. La operación MASSINSERT se aplica
solamente a archivos VSAM. Termina por fin de la tarea o con el comando
EXEC CICS UNLOCK.

Fig.2-13.
Agregado de Registro.
(COBOL)
IDENTIFICATION DIVISION.
PROGRAM-ID. FCPCOB6.
*
* EL PROGRAMA AGREGA UN REGISTRO CON LA CLAVE LAX01 A UN REGISTRO *
* LLAMADO MAESTRO *
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
RECORD-KEY PIC X(5) VALUE 'LAX01'.
01 FILE-AREA.
02 RECORD-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
*VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION DUPREC(RECTHERE)
ERROR(OTHERR)
END-EXEC.

*LA CLAVE Y LA DESCRIPCION ES INTRODUCIDA DENTRO DEL AREA DE ARCHIVO*


MOVE RECORD-KEY TO REC-KEY.
MOVE 'NEW RECORD ADDED' TO REC-DESC.
EXEC CICS WRITE FROM(FILE-AREA) FILE('MASTER')
RIDFLD(RECORD-KEY) LENGTH(25) END-EXEC.
.
.
RECTHERE.
*ERROR DE PROCESAMIENTO.EL REGISTRO YA ESTA EN EL ARCHIVO*
.
.
.
OTHERR.
*ERROR DE PROCESAMIENTO - HA SURGIDO OTRO ERROR *
.
.
.

Página -42-
Fig.2-14.
MASSINSERT para VSAM.
(COBOL)

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPCOB7.
*
* EL PROGRAMA AGREGA 5 REGISTROS SECUENCIALES COMENZANDO CON LA *
* CLAVE XLAX01 A UN ARCHIVO LLAMADO MASTER*
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PICS9(4)COMP VALUE 25.
01 RECORD-KEY-A PIC X(5) VALUE 'LAX01'.
02 RECORD-KEY-A PIC X(3).
02 RECORD-KEY-N PIC 9(2).
01 FILE-AREA.
02 RECORD-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
*VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION DUPREC(RECTHERE)
ERROR(OTHERR)
END-EXEC.
.
.
.
MOVE 'LAX01' TO RECORD-KEY.
MASS-INS.
MOVE RECORD-KEY TO REC-KEY.
MOVE'NEW RECORD INSERTED' TO REC-DESC.
EXEC CICS WRITE FROM(FILE-AREA) FILE('MASTER')
RIDFLD(RECORD-KEY) MASSINSERT END-EXEC.
ADD 1 TO RECORD-KEY-N.
IF RECORD-KEY-N LESS THAN 6 THEN GO TO MASS-INS
ELSE
EXEC CICS UNLOCK FILE('MASTER') END-EXEC.
.
.
RECTHERE.
*ERROR DE PROCESAMIENTO.EL REGISTRO YA ESTA EN EL ARCHIVO*
.
.
.
OTHERR.
*ERROR DE PROCESAMIENTO - HA SURGIDO OTRO ERROR *
.
.
.

Página -43-
El comando UNLOCK debería ejecutarse para liberar el control exclusivo de
un registro después de un READ para actualización cuando el programa de
aplicación determina que no es necesario un REWRITE o un DELETE.

El comando UNLOCK puede también ejecutarse para terminar la función


MASSINSERT.

La inserción masiva permite el agregado de un grupo de nuevos registros


cuyas claves están en secuencia ascendente. De aplicación solamente a
archivos VSAM.

Página -44-
Módulo III
Control de Archivos II

Qué es la búsqueda secuencial (Browse)?

'Browsing' es una búsqueda secuencial de cualquier cuerpo organizado de


datos.
A modo de analogía, un estudiante recorre el catálogo de fichas de una
biblioteca en procura de libros sobre programación de computadoras, es
decir que recorre un archivo para hallar los datos que necesita.

En un programa de aplicación CICS la recuperación secuencial de los


registros puede llevarse a cabo esencialmente de la misma manera.
Utilicemos el ejemplo de la biblioteca para hacer una comparación.

El estudiante El programa CICS

Se dirige a la gaveta del Prepara 'Programación de


catálogo que contiene las Computadora' como
tarjetas 'Programación de criterio de búsqueda y
Computadoras', encuentra ordena al CICS que
primer ficha. comience allí

Pasa las fichas a una y Lee y procesa registros


toma nota de la secuencialmente
información deseada.

Hasta que encuentra una Lee un registro de


ficha de digamos 'Prospección' o llega al fin
'Prospección', entonces de un archivo. Emite un
sabe que el trabajo se ha comando para que el
completado de modo que CICS termine el proceso
deja el catálogo de recuperación
secuencial.

Utilizando los comandos de búsqueda secuencial en su programa de


aplicación CICS puede procesar secuencialmente archivos VSAM,
DAM/BDAM e ISAM. Aunque los conceptos generales y los comandos son
los mismos en los tres métodos de acceso, existen algunas diferencias en las
técnicas de procesamiento.

Página -45-
Consideraciones VSAM

Un browsing para VSAM puede comenzar en cualquier registro del archivo.


El punto de partida puede ser provisto por una clave completa, una clave
genérica, por una dirección de byte relativo (RBA) o un número de
registro relativo (RRN).

Cuando emite el primer comando de lectura, se le devolverá el registro cuya


clave sea igual a la especificada. De no existir tal registro, el CICS entregará
el primer registro que tenga una clave mayor o se activará la condición
NOTFND, de acuerdo con la opción especificada al iniciarse la búsqueda.

Consideraciones DAM/BDAM

Los archivos DAM/BDAM son recorridos por referencia a 'bloques físicos' en


lugar de claves de registro. Cuando comienza un recorrido DAM/BDAM, debe
identificar el bloque que contiene el primer registro que desea recuperar. La
recuperación secuencial comienza con el bloque especificado y continúa
hacia delante en todo el archivo. Cada uno de los subsiguientes comandos
de lectura devolverá a su programa el bloque siguiente del archivo.

Consideraciones ISAM

El barrido puede iniciarse en cualquier registro de un archivo ISAM. La


posición inicial es provista por una 'clave de registro', que puede ser
'completa' o 'genérica'.

Al emitir el primer comando de lectura, se devuelve a su programa de


aplicación el registro que tenga una clave igual. En caso de no existir el
registro, se obtendrá el primer registro que tenga un valor de clave mayor
que el de la clave especificada. Durante la búsqueda su programa recibirá los
registros que estén marcados para ser borrados, por lo tanto, debe estar
preparado para reconocerlos y tratarlos adecuadamente.

Pasos para una búsqueda secuencial

Una operación de búsqueda secuencial consta de tres procedimientos.

Establecer posición - Para iniciar la búsqueda debe primero posicionarse


en el archivo. Este paso identifica al CICS el lugar del archivo en el que
desea comenzar la recuperación secuencial.

Leer registros - Una vez establecida la posición, se emiten uno o más


comandos para 'leer registros' secuencialmente. A medida que se obtiene un
registro se lo procesa de acuerdo con la lógica de su programa de aplicación.

Página -46-
Terminar búsqueda - Los registros se leen y procesan hasta que decide
que no es necesario proseguir con la recuperación secuencial e indica al
CICS que se ha completado la operación.

La figura 3.1 resume la lógica general de programa para atender una


búsqueda secuencial.

POSICIO-
NAMIENTO

Fig. 3-1.
Flujo de la Típica
Operación de LEER SIGUIENTE
Recorrido REGISTRO

SI
Procesa el
PROCESA
registro ?

NO

NO
fin de búsqueda ?

SI

TERMINA
BUSQUEDA

Puede 'reposicionar' en cualquier momento de una operación secuencial.


Puede alterar la posición actual en el archivo y, opcionalmente, las
características de la búsqueda. Una vez restablecida la posición, puede
continuar con la recuperación y el procesamiento secuenciales.

Página -47-
Posicionar

Para iniciar y establecer la posición de una búsqueda, use el comando


STARTBR. Este comando solamente especifica el punto inicial del recorrido,
con esta operación no se leen registros.

METODO DE ACCESO EXEC CICS READ COMENTARIOS

VSAM FILE (name) NOMBRE DEL ARCHIVO

DAM/BDAM RIDFLD (data-name) CAMPO DE IDENTIFICACION DEL


Fig. 3-2. REGISTRO
Comando STARTBR
ISAM KEYLENGTH (data-value) LONGITUD DE CLAVE PARCIAL

GENERIC CLAVE PARCIAL

DAM/BDAM DEBKEY DESBLOQUE POR CLAVES

DEBREC DESBLOQUE POR REGISTROS


RELATIVOS

VSAM GTEQ BUSQUEDA POR MAYOR O IGUAL QUE

EQUAL BUSQUEDA POR IGUAL

RBA LA CLAVE ES POR DIRECCION


RELATIVA DE BYTE

RRN LA CLAVE ES NUMERO RELATIVO DE


REGISTRO

La figura 3.2 ilustra el formato del comando STARTBR. Explicamos a


continuación sus parámetros y opciones:

RIDFLD especifica la clave del registro del archivo en el que desea comenzar
la búsqueda. La posición inicial puede especificarse de una variedad de
maneras.

Para archivos ISAM y VSAM secuenciados por clave (KSDS), RIDFLD puede
contener una clave completa o genérica. Cuando se usa una clave genérica,
deben especificarse las opciones GENERIC y KEYLENGTH, RIDFLD ha de
ser lo suficientemente grande como para contener la clave completa de un
registro. No es necesario inicializar las posiciones que siguen a la clave
genérica. La figura 3.3 da un ejemplo de cómo especificar una clave
genérica.

Página -48-
Página -49-
Fig. 3-3. CAMPO DE CLAVE DEL REGISTRO
Especificación de
una clave genérica C O M P U T A C I O N

Reckey is 20 bytes

EXEC CICS STARTBR


FILE (name)
RIDFLD(RECKEY)
GENERIC
KEYLENGTH (11)

 Para archivos VSAM secuenciados por entrada (ESDS) y de registro


relativo (RRDS), RIDFLD puede contener una dirección de byte relativo
(RBA) o un número de registro relativo (RRN). Debe codificarse RBA
cuando se especifica una dirección de byte relativo. Debe codificarse
RRN cuando se especifica un número de registro relativo.
 Para archivos DAM/BDAM, RIDFLD contiene una referencia a bloque
(esto es, pista y registro relativos o bloque relativo). El formato de esta
referencia a bloque debe concordar con el método de direccionamiento
especificado para ese archivo en la entrada de la Tabla de Control de
Archivos CICS (FCT). Aunque sólo se requiere la referencia a bloque, el
campo que especifique ha de ser lo bastante grande como para
acomodar una clave completa de registro.

Si el archivo tuviese registros bloqueados, el CICS los desbloqueará si


especifica la opción DEBKEY o DEBREC.

Para archivos ISAM y VSAM KSDS, puede iniciarse la búsqueda desde el


comienzo del archivo especificado:

 un RIDFLD de ceros hexadecimales


 la opción GENERIC con KEYLENGTH (0). En ese caso el contenido de
RIDFLD no es significativo.

Para iniciar una búsqueda desde el comienzo de un archivo DAM/BDAM el


RIDFLD debe contener una referencia al primer bloque del archivo.

Para archivos VSAM, puede iniciarse una búsqueda al final del archivo,
yendo hacia atrás. Esto es útil cuando desea obtener los registros en
secuencia descendente. Para comenzar al final del archivo, el RIDFLD
deberá contener FF's hexadecimales. No se especificarán las opciones
GENERIC y KEYLENGTH.

GTEQ/EQUAL indica el tipo de búsqueda para un archivo VSAM KSDS.

 Si se especifica GTEQ y no existe registro alguno, la posición se


establece en el siguiente registro del archivo. Esta es la acción asumida.

Página -50-
 Si se especifica EQUAL y no existe registro alguno, se activa la
condición NOTFND.

La figura 3.4 ilustra un ejemplo de la codificación, requerida para iniciar una


operación secuencial.

Fig.3-4.
Posicionamiento.
(COBOL)
IDENTIFICATION DIVISION.
PROGRAM-ID. FCPCOB10.
*
* SE INICIA EL EXAMEN DEL ARCHIVO CON CLAVE VSAM UTILIZANDO LA CLAVE *
* GENERICA EQUAL*
* EL EXAMEN COMIENZA EN LA CLAVE GENERICA 'LAX !
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RECORD-KEY.
02 KEY-PFX PIC X(3) VALUE 'LAX'.
02 KEY-NUM PIC X(2).
.
.
.
PROCEDURE DIVISION.
*VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
NOTFND(NOREC)
ERROR(OTHERR)
END-EXEC.
.
.
.

EXEC CICS STARTBR


FILE('MASTER') RIDFLD(RECORD-KEY)
GENERIC KEYLENGTH(3) EQUAL
END-EXEC.
.
.

*** REALIZA LA RECUPERACION SECUENCIAL Y PROCESAMIENTO ***


.
.

NOREC.
*ERROR DE PROCESAMIENTO.EN EL ARCHIVO NO EXISTEN REGISTROS QUE*
TENGAN LA CLAVE GENERICA ESPECIFICADA(LAX)
.
.
OTHERR.
*ERROR DE PROCESAMIENTO - HA SURGIDO OTRO ERROR *
.

Página -51-
.
.

Lectura de Registros
Para recuperar registros secuencialmente en secuencia ascendente, use el
comando READNEXT.
La figura 3.5 ilustra los parámetros y las opciones de este comando.

METODO DE ACCESO EXEC CICS READNEXT

Fig. 3-5 VSAM INTO (data-area)¦SET(pointer-ref)


Comando
DAM/BDAM LENGTH (data-area)
READNEXT
ISAM FILE (name)

RIDFLD (data-area)

KEYLENGTH (data-value)

VSAM RBA

RRN

INTO o SET identifican el área en la que desea que el CICS lea el registro.
Se especifica una opción o la otra.

INTO especifica que quiere que el registro sea devuelto en un área de trabajo
definida dentro de su programa.
SET indica que quiere procesar el registro en el "buffer de archivo". El CICS,
colocará en el campo especificado en la opción SET un 'pointer' a la
dirección del registro leído dentro del buffer.

La figura 3.6 da ejemplos de cómo definir un área de entrada de un archivo


usando la opción SET .

Página -52-
Fig. 3-6.
Definición de Area de
Entrada con la Opción
SET LINKAGE SECTION.
01 REC-PTRS.
02 FILLER PIC XXXX.
02 MAST-PTR PIC S9(8) COMP.

COBOL 01 MASTER-RECORD.
02 FIELDA PIC (5).
02 FIELDB PIC XX.
.
.
.

Otras opciones del comando READNEXT, que se ilustran en la figura 6.7,


son las siguientes:

LENGTH (un campo binario de dos bytes) especifica la longitud esperada del
registro a procesar. EL CICS usará este campo para devolver a su programa
la longitud real del registro leído.

 Con la opción INTO, LENGTH debe contener un valor no mayor que la


longitud del área de datos definida en su programa.

 Con la opción SET, no es necesario especificar la opción LENGTH.

RIDFLD identifica el registro a procesar el nombre de los datos que codifica


aquí es el mismo especificado en el comando STARBR que inició está
operación de recorrido. Tras completarse cada uno de los comandos
READNEXT, se actualiza el RIDFLD con la clave completa del último registro
leído. A esto se debe que RIDFLD ha de ser suficientemente grande como
para contener la clave completa de un registro.

RBA ║ RRN - debe codificarse sí también se especificó en el comando


STARTBR que inició esta operación de búsqueda.

La figura 3.7 da ejemplo de la codificación requerida para leer registros


secuencialmente a partir de la posición establecida en el ejemplo anterior.

Página -53-
Fig.3-7.
Lecturas de Registros.
(COBOL)

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPCOB11.
*
* SE INICIA EL EXAMEN DEL ARCHIVO CON CLAVE VSAM UTILIZANDO LA CLAVE *
* GENERICA EQUAL*
* EL EXAMEN COMIENZA EN LA CLAVE GENERICA 'LAX !
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PIC S9(4) COMP.
01 RECORD-KEY.
02 KEY-PFX PIC X(3) VALUE 'LAX'.
02 KEY-NUM PIC X(2).
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC PIC X(20).

.
.
.

PROCEDURE DIVISION.
*VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
NOTFND(NOREC)
ERROR(OTHERR)
END-EXEC.
*
EXEC CICS STARTBR
FILE('MASTER') RIDFLD(RECORD-KEY)
INTO (FILE-AREA) LENGTH(LEN)
END-EXEC.
READ-SEQ.
MOVE 25 TO LEN.
EXEC CICS READNEXT
FILE('MASTER') RIDFLD(RECORD-KEY)
INTO(FILE-AREA) LENGTH(LEN)
END-EXEC.
***REGISTRO DEL PROCESO ***
.
.

***VUELTA ATRÁS PARA RECUPERAR EL REGISTRO SIGUIENTE***


.
.

NOREC.
*ERROR DE PROCESAMIENTO.EN EL ARCHIVO NO EXISTEN REGISTROS QUE*
*TENGAN LA CLAVE GENERICA ESPECIFICADA(LAX) .
.

Página -54-
.
OTHERR.
*ERROR DE PROCESAMIENTO - HA SURGIDO OTRO ERROR *
.
.
.
RTOOLONG.
*ERROR DE PROCESAMIENTO. EL REGISTRO LEIDO ES MAS EXTENSO QUE EL *
*NUMERO DE BYTES ESPECIFICADOS EN LA LONGITUD DEL CAMPO (LEN)*

Los archivos VSAM pueden ser leídos hacia atrás y hacia delante. Para leer
registros en secuencia descendente, use el siguiente comando:

EXEC CICS READPREV

INTO (data-area) ¦ SET(pointer-ref)

LENGTH (data-area)

FILE (name)

RIDFLD (data-area)

KEYLENGTH (data-value)

RBA ¦ RRN

Las opciones del comando READPREV son las mismas que las del comando
READNEXT, con las siguientes diferencias:

No puede especificarse una clave genérica para operaciones secuenciales


hacia atrás; de especificarse, se activa la condición INVREQ.
El registro identificado en el comando STARTBR debe existir en el archivo
para que la operación secuencial continúe. Si el registro requerido por el
primer comando READPREV no está en el archivo, se activa la condición
NOTFND.

Reconocimiento de fin de archivo

En algún punto de una operación secuencial su programa determinará que


no se requiere ya la búsqueda secuencial. Este 'fin de búsqueda' se reconoce
como fin de archivo. Hay dos tipos de condiciones de fin de archivo: físico
y lógico.

Página -55-
Fin de Archivo Físico

Se activa la condición ENDFILE al emitirse un comando READNEXT o


READPREV, el último registro es realmente el primer registro del archivo).

Fin de Archivo Lógico

Se produce el fin de archivo lógico cuando un programa de aplicación


determina que no es necesaria la recuperación secuencial. Esto puede
hacerse comparando la clave de cada uno de los registros leídos con algún
valor.

Tome o no su programa una determinación lógica de fin de archivo, es


siempre un buen procedimiento de programación contempla la condición
ENDFILE.

Fig.3-7.
Comprobación de fin de
Archivo (COBOL)
IDENTIFICATION DIVISION.
PROGRAM-ID. FCPC0B12.
*
* SE INICIA EL EXAMEN DEL ARCHIVO CON CLAVE VSAM UTILIZANDO LA *
* CLAVE GENERICA EQUAL *
* EL EXAMEN COMIENZA EN LA CLAVE GENERICA 'LAX.'
* RECUPERA LOS REGISTROS SECUENCIALMENTE EN SECUENCIA ASCENDENTE *
* CONTROLA PARA EL FIN FISICO Y LOGICO DEL ARCHIVO (CAMBIO EN LA *
* CLAVE GENERICA *
* AL FINAL DEL ARCHIVO, CONCLUYE LA REVISION *
*
* *** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PIC S9(4) COMP.
77 COMPARE-KEY PIC X(3) VALUE 'LAX'.
01 RECORD-KEY.
02 KEY-PFX PIC X(3) VALUE 'LAX'.
02 KEY-NUM PIC X(2).
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
* *VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
NOTFND(NOREC) ERROR(OTHER)
LENGERR(RTOOLONG)
ENDFILE(END-BROWS)
END-EXEC.

Página -56-
*
EXEC CICS STARTBR
FILE('MASTER') RIDFLD(RECORD-KEY)
GENERIC KEYLENGTH(3) EQUAL
END-EXEC.
READ-SEQ.
MOVE 25 TO LEN.
EXEC CICS READNEXT
FILE('MASTER') RIDFLD(RECORD-KEY)
INTO(FILE-AREA) LENGTH(LEN)
END-EXEC.
IF KEY-PFX IS GREATER THAN COMPARE-KEY
GO TO END-BROWS
ELSE
NEXT SENTENCE.
***REGISTRO DEL PROCESO ***
.
.
***VUELTA ATRAS PARA RECUPERAR EL REGISTRO SIGUIENTE ***
END-BROWS.
***CONCLUYE LA REVISION ***
.
.
.
NOREC.
* ERROR DE PROCESAMIENTO.EN EL ARCHIVO NO EXISTEN REGISTROS QUE
* TENGAN LA CLAVE GENERICA ESPECIFICADA ('LAX') *
.
.
.
OTHERR.
* ERROR DE PROCESAMIENTO. HA SURGIDO OTRO ERROR *
.
.
RTOOLONG.
* ERROR DE PROCESAMIENTO. EL REGISTRO LEIDO ES MAS EXTENSO QUE
* EL NUMERO DE BYTES ESPECIFICADOS EN LA LONGITUD DEL CAMPO
*(LEN)

Terminación de la búsqueda

Cuando se decide que no es necesario continuar con la lectura secuencial es


menester terminar la operación. Para terminar una búsqueda, utilice el
siguiente comando:

EXEC CICS ENDBR

FILE (name)

Página -57-
FILE especifica el nombre del archivo sobre el que se realizó la búsqueda
secuencial. No se requieren otros parámetros.

Al terminar una búsqueda, se liberan todos los recursos adquiridos en


conexión con la operación. Puesto que los recursos del sistema debieran ser
liberados tan pronto como dejen de ser necesarios, emite el comando
ENDBR tan pronto como lógicamente sea posible.

La figura 3.8 da ejemplo de la codificación requerida para terminar una


búsqueda secuencial.

Fig.3-8.
Terminación de la
Búsqueda (COBOL).

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPC0B13.
*
* SE INICIA EL EXAMEN DEL ARCHIVO CON CLAVE VSAM UTILIZANDO LA *
* CLAVE GENERICA EQUAL *
* EL EXAMEN COMIENZA EN LA CLAVE GENERICA 'LAX.'
* RECUPERA LOS REGISTROS SECUENCIALMENTE EN SECUENCIA ASCENDENTE *
* CONTROLA PARA EL FIN FISICO Y LOGICO DEL ARCHIVO (CAMBIO EN LA *
* CLAVE GENERICA *
* AL FINAL DEL ARCHIVO, CONCLUYE LA REVISION *
*
* *** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PIC S9(4) COMP.
77 COMPARE-KEY PIC X(3) VALUE 'LAX'.
01 RECORD-KEY.
02 KEY-PFX PIC X(3) VALUE 'LAX'.
02 KEY-NUM PIC X(2).
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
* *VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
NOTFND(NOREC) ERROR(OTHER)
LENGERR(RTOOLONG)
ENDFILE(END-BROWS)
END-EXEC.
*
EXEC CICS STARTBR
FILE('MASTER') RIDFLD(RECORD-KEY)
GENERIC KEYLENGTH(3) EQUAL

Página -58-
END-EXEC.
READ-SEQ.
MOVE 25 TO LEN.
EXEC CICS READNEXT
FILE('MASTER') RIDFLD(RECORD-KEY)
INTO(FILE-AREA) LENGTH(LEN)
END-EXEC.
IF KEY-PFX IS GREATER THAN COMPARE-KEY
GO TO END-BROWS
ELSE
NEXT SENTENCE.
***REGISTRO DEL PROCESO ***
.
.
***VUELTA ATRAS PARA RECUPERAR EL REGISTRO SIGUIENTE ***
END-BROWS.
EXEC CISC ENDBR
FILE('MASTER')
END-EXEC.
.
.
.
NOREC.
* ERROR DE PROCESAMIENTO.EN EL ARCHIVO NO EXISTEN REGISTROS QUE
* TENGAN LA CLAVE GENERICA ESPECIFICADA ('LAX') *
.
.
.
OTHERR.
* ERROR DE PROCESAMIENTO. HA SURGIDO OTRO ERROR *
.
.
.
RTOOLONG.
* ERROR DE PROCESAMIENTO. EL REGISTRO LEIDO ES MAS EXTENSO QUE
* EL NUMERO DE BYTES ESPECIFICADOS EN LA LONGITUD DEL CAMPO
* (LEN)

Página -59-
Reposicionamiento

Durante las operaciones normales de browse los registros de un archivo se


leen en secuencia, uno después del otro. Hay casos en los que la lógica de
aplicación requiere que una operación de búsqueda vaya de una porción a
otra de un archivo. esto puede llevarse a cabo terminando la búsqueda
corriente e iniciando otra nueva, especificando un nuevo punto de arranque
(secuencia ENDBR/STARTBR). Puede cumplirse la misma función emitiendo
el siguiente comando:

EXEC CICS RESETBR

FILE (name)

RIDFLD (data-area)

KEYLENGTH (data-value)

GENERIC

GTEQ ¦ EQUAL

RBA ¦ RRN

FILE es el nombre del archivo especificado en el comando STARTBR


original.

RIDFLD especifica la ubicación del archivo en la que desea que se reanude


la búsqueda. El nombre de los datos que aquí se codifica ha de ser el mismo
que el RIDFLD especificado en el comando STARTBR original. Antes de
emitir el comando RESETBR ha de transferirse la nueva ubicación a
RIDFLD.

Además de cambiar la ubicación inicial puede también modificar las


características de la búsqueda.

Puede modificarse con RESETBR el tipo de clave (completa o genérica)


especificando en el STARTBR original. Si se especificara una clave genérica,
en el comando RESETBR deben incluirse las opciones GENERIC y
KEYLENGTH
Para archivos VSAM, puede modificarse el tipo de búsqueda (GTEQ o
EQUAL)

La figura 3.9 da ejemplo de la codificación requerida para reposicionarse


durante una búsqueda secuencial.

Página -60-
Página -61-
Fig.3-9.
Reposicionamiento.
(COBOL)

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPC0B14.
*
* INICIA LA REVISION PARA UN ARCHIVO UTILIZANDO UNA CLAVE GENERICA
* RECUPERA REGISTROS HASTA QUE LA CLAVE GENERICA CAMBIA,Y ENTONCES
* RESTABLECE SU POSICION EN EL PRIMER REGISTRO RECUPERADO
*
*
* *** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RECORD-KEY.
02 KEY-PFX PIC X(3) VALUE 'LAX'.
02 KEY-NUM PIC X(2).
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC PIC X(20).
.
.
.
PROCEDURE DIVISION.
* *VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
ENDFILE(END-BROWS) ERROR(OTHERR)
END-EXEC.
EXEC CICS STARTBR
FILE('MASTER') RIDFLD(RECORD-KEY)
GENERIC KEYLENGTH(3)
END-EXEC.
EXEC CICS READNEXT
FILE('MASTER') RIDFLD(RECORD-KEY)
INTO(FILE-AREA)
END-EXEC.
***PASA REGISTROS HASTA QUE LA CLAVE GENERICA CAMBIA ***
.
.
.
***RESTAURA LA PRIMERA CLAVE DEL REGISTRO ***
EXEC CICS RESETBR
FILE('MASTER') RIDFLD(RECORD-KEY)
END-EXEC.
.
.
.
END-BROWS.
***CONCLUYE LA REVISION ***
.
.
.

Página -62-
OTHERR.
* ERROR DE PROCESAMIENTO. HA SURGIDO OTRO ERROR *
.
.
.

El procesamiento secuencial VSAM con saltos

Permite a un programa de aplicación ir hacia delante en un archivo


modificando el contenido del RIDFLD. Este procedimiento posibilita un rápido
acceso al azar de un archivo VSAM al reducir el tiempo de búsqueda de los
índices.

El procesamiento secuencial con salto se lleva acabo transfiriendo la clave


del siguiente registro a leer al RIDFLD especificado. Al emitirse el siguiente
comando de lectura READNEXT, el VSAM reconoce el cambio en la
secuencia normal de la búsqueda y en función de ello restablece la posición.

Siguen algunos puntos sobre el procesamiento secuencial con salto que


habrán de recordarse:

Secuencial con salto sólo se puede usar para ir hacia delante en un archivo
.
El tipo de identificación de registro especificado (clave completa o genérica,
RBA, RRN) ha de ser el mismo que el especificado en el STARTBR o último
RESETBR emitido para esta operación
Si se usara una clave genérica, debe codificarse la opción KEYLENGTH en
el comando READNEXT que especifica la nueva ubicación inicial.
Si el comando STARTBR o el último RESETBR especificó una búsqueda
EQUAL, y no existe un registro para la nueva identificación de registro, se
activa la condición NOTFND. (Si se activa la condición NOTFND y deseara
continuar la búsqueda, la rutina NOTFND podría emitir un comando
RESETBR con la opción GTEQ. Esto establecería la posición en el siguiente
registro del archivo. La recuperación secuencial de los registros podría
reanudarse luego en esa ubicación).

Técnicas adicionales de Procesamiento

Búsquedas secuenciales múltiples

Un programa de aplicación puede cumplir operaciones secuenciales


múltiples y concurrentes. Estas podrán ser sobre uno o varios archivos
conjuntamente.
Todo comando STARTBR inicia una operación separada. Cuando las
búsquedas múltiples son contra el mismo archivo, debe codificarse la opción
REQID en cada uno de los comandos de la operación secuencial.
Ejemplo:

EXEC CICS STARTBR

Página -63-
FILE (name)
RIDFLD (data-area)
REQID (data-value)
.
.

El data-value especificado por el programa de aplicación para REQID es un


número de identificación que el CICS utiliza para asociar los varios
comandos con cada una de las operaciones secuenciales contra el mismo
archivo.

No es necesario especificar la opción REQID cuando se leen múltiples


archivos.

La figura 3.10 da ejemplo de una operación múltiple. Se leen


concurrentemente dos archivos.

Fig.3-10.
Búsqueda Múltiple
(COBOL)

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPC0B15.
*
* REVISA DOS ARCHIVOS SIMULTANEAMENTE. LOS REGISTROS EN EL ARCHIVO
* 'INDEX'SENALAN POR CLAVE A LOS REGISTROS EN EL ARCHIVO 'MAESTRO'
* PUEDEN EXISTIR MULTIPLES REGISTROS DEL 'MAESTRO' POR CADA
* REGISTRO 'INDEX'. AMBOS ARCHIVOS TIENEN REGISTROS DE LONGITUD
*FIJA. USE LA OPCION 'SET'.
*
*
* *** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 INDX-KEY PIC X(3) VALUE 'LAX'.
01 MAST-KEY.
02 MAST-PFX PIC X(3).
02 MAST-NUM PIC X(2).
.
.
.
LINKAGE SECTION.
01 REC-PTRS.
02 FILLER PIC XXXX.
02 INDX-PTR PIC S9(8) COMP.
02 MAST-PTR PIC S9(8) COMP.
01 INDX-RECORD PIC X(25).
01 MAST-RECORD PIC X(90).

PROCEDURE DIVISION.
* *VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
ENDFILE(END-BROWS) ERROR(OTHERR)

Página -64-
END-EXEC.
EXEC CICS STARTBR
FILE('INDEX') RIDFLD(INDX-KEY)
END-EXEC.
EXEC CICS READNEXT
FILE('INDEX') RIDFLD(INDX-KEY)
SET(INDX-PTR)
END-EXEC.
***REGISTRO DE PROCESO 'INDEX'***
.
.
.
EXEC CICS STARTBR
FILE('MASTER') RIDFLD(MAST-KEY)
END-EXEC.
EXEC CICS READNEXT
FILE('MASTER') RIDFLD(MAST-KEY)
SET(MAST-PTR)
END-EXEC.
***REGISTROS DE PROCESO 'MASTER' ***
.
.
.
END-BROWS.
* LA RUTINA DE TERMINACION COMUN DETERMINA QUE REVISION HALLO EL
* FIN DEL ARCHIVO Y LO PROCESA DE ACUERDO CON ELLO. *
.
.
.
EXEC CICS ENDBR FILE('INDEX')
END-EXEC.
.
.
.
EXEC CICS ENDBR FILE('MASTER')
END-EXEC.
.
.
.
OTHERR.
* ERROR DE PROCESAMIENTO. HA SURGIDO OTRO ERROR *
.
.
.

Actualización de Registros

La búsqueda secuencial es una operación de lectura solamente, los registros


leídos no pueden ser actualizados. No obstante, usando el campo RIDFLD
de búsqueda secuencial, en un comando READ con la opción UPDATE,
podrá leer un registro para su actualización. Su programa debe introducir en
el registro las modificaciones que fueran necesarias y usar el comando
REWRITE para reemplazarlo en el archivo. Una vez terminada la
actualización, puede reanudarse el procesamiento secuencial. Advierta, en

Página -65-
cambio, que esta técnica n puede usarse en el OS/VS con Recursos
Compartidos VSAM ya que provocaría un bloqueo.

La figura 3.11da ejemplo de actualización de registros durante una operación


secuencial.

Página -66-
Fig.3-11.
Actualización de Registros
en una búsqueda secuencial
(COBOL)
IDENTIFICATION DIVISION.
PROGRAM-ID. FCPC0B16.
*
* REVISA UN ARCHIVO Y ACTUALIZA LOS REGISTROS APROPIADOS*
* LA REVISION COMIENZA CON REGISTRO 'LAX01' *
*
* *** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LEN PIC S9(4) COMP.
77 RECORD-KEY PIC X(5) VALUE 'LAX01'.
01 FILE-AREA.
02 REC-KEY PIC X(5).
02 REC-DESC.
.
.
PROCEDURE DIVISION.
* *VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION
LENGERR(RTOOLONG)
ENDFILE(END-BROWS)ERROR(OTHER)
END-EXEC.
*
EXEC CICS STARTBR
FILE ('MASTER') RIDFLD(RECORD-KEY)
END-EXEC.
MOVE 25 TO LEN.
EXEC CICS READNEXT
FILE ('MASTER') RIDFLD(RECORD-KEY)
END-EXEC.

***REGISTRO DEL PROCESO ***


.
.
***SI EL REGISTRO DEBIERA SER ACTUALIZADO ***

EXEC CICS READ


FILE ('MASTER') RIDFLD (RECORD-KEY)
INTO (FILE-AREA) LENGTH (LEN)
UPDATE
END-EXEC.
END-BROWS.
* CONCLUYE LA REVERSION *
.
.
.
RTOOLONG.
* ERROR DE PROCESAMIENTO. EL REGISTRO LEIDO ES MAS EXTENSO QUE
* EL NUMERO DE BYTES ESPECIFICADOS EN LA LONGITUD DEL CAMPO
* (LEN)

Página -67-
.
.
.
OTHERR.
* ERROR DE PROCESAMIENTO. HA SURGIDO OTRO ERROR *
.
.
.

Ejemplos de Uso

es posible codificar una transacción CICS que recorra en su totalidad un


archivo. Pero, para reducir el volumen de los datos a procesar en una
aplicación en línea, limite el alcance de las operaciones de búsqueda dándole
al CICS argumentos de búsqueda.

Qué clase de criterios de búsqueda podríamos emplear? Para dar respuesta


a esta pregunta volvamos al ejemplo del catálogo en fichas de la biblioteca.
Supongamos que el catálogo es un archivo VSAM. Los ítems del catálogo
tienen claves en función de los temas. Nuestra biblioteca cuenta con libros
sobre los siguientes temas relacionados con computación:

Computación, Aplicaciones
Computación, Carreras
Computación, Historia
Computación, Tecnología
Computación, Programación

Hemos de desarrollar aplicaciones que permitan al personal de la biblioteca


mantener el catálogo y qué usuarios de la biblioteca pueden consultar el
catálogo. Para llevar a cabo estas aplicaciones diseñamos una transacción
llamada ICAT.

Ejemplo 1: Se necesita información sobre todos los libros relacionados con


computación que estén actualmente en el archivo. La transacción de entrada
para cumplir esta función es

ICAT COMPUTACION

en donde 'COMPUTACION' indica que han de obtenerse todos los registros


cuyas claves comienzan con estos caracteres. En respuesta a esta
transacción el siguiente programa resume la información y la presenta de la
siguiente manera:

Página -68-
Computación,Aplicaciones
Compu-
Computación,Carreras tación Coleoptero
Computación,Historia Coloso
Computación,Programación Computación, Aplicaciones
RIDFLD
Computación, Carreras
Computación, Historia
Computación, Programación

Para esta transacción se pide una búsqueda de clave genérica

La codificación correspondiente al inicio de esta operación sería:

EXEC CICS STARTBR


GENERIC
KEYLENGTH (8)
RIDFLD (...)
FILE (...)
.
.

El alcance de esta operación de recorrido se limita a la porción del archivo


que contiene los registros sobre 'COMPUTACION'. La búsqueda genérica
es la aplicación más amplia de las técnicas de búsqueda limitada de
archivos para archivos con claves. Veamos ahora como puede reducirse
aún más el número de registros a procesar.

Ejemplo 2 : un estudiante ingresa una transacción para obtener información


sobre todos los libros relacionados con programación de computadoras:

ICAT COMPUTACION, PROGRAMACION

En respuesta a esta transacción nuestro programa produce una lista de


todos los registros cuya clave de tema es COMPUTACION
PROGRAMACION.

Adviértase en este ejemplo que alcanzaremos un fin de archivo lógico antes


del fin de archivo físico; no se activaría la condición ENDFILE. No obstante
ello, un programa debiera controlar siempre la condición ENDFILE para
cubrir la situación en la cual se recupera el último registro del archivo.

En este ejemplo se cumple una búsqueda no específica. La búsqueda se


limita a una sección particular del archivo pero es no específica en cuanto

Página -69-
han de obtenerse todos los registros de esa sección. No existen condiciones
específicas de selección que satisfacer.

Este tipo de búsqueda se usa típicamente cuando un operador desea


procesar un número de registros de una categoría o rango generales dados.
Cuando se lo usa con archivos con claves, es similar en cuanto a su
aplicación, a la búsqueda genérica. Pero, es de alcance menos amplio
puesto que la expansión de la clave de búsqueda proporciona un cambio
más directo en el archivo.

Para archivos sin claves, la búsqueda no específica es el medio para limitar


el alcance de la operación. especificando un punto inicial (por ejemplo, el
bloque 10 de un archivo DAM/BDAM) y un punto final (digamos, después de
haberse leído diez bloques), puede fijar límites de procesamiento. Cuanto
sigue ilustra una búsqueda no específica que comienza en el bloque 3 de un
archivo DAM/BDAM no bloqueado.

PROGRAMA DE
APLICACION

BLOCK 1
BLOCK3
BLOCK 2
RIDFLD
BLOCK 3

BLOCK 4

BLOCK 5

BLOCK 6

Ejemplo 3: Tras leer atentamente la lista de libros sobre programación de


computadora supongamos que el estudiante se interesa en los libros que ha
escrito un autor llamado J.MUCHOBIT. Para recuperar una lista de los
trabajos de este autor el estudiante ingresa:

ICAT COMPUTACION PROGRAMACION AUTOR = J. MUCHOBIT

Al revisar la lista el estudiante decide pedir información en detalle sobre un


libro particular, e ingresa:

ICAT 'COMPUTACION PROGRAMCION', TITULO = 'LA INVOLUCION DE


LOS METALENGUAJES'

La búsqueda cumplida en respuesta a estos pedidos se limita a una sección


particular del archivo (los registros de COMPUTACION, PROGRAMACION).
al especificar 'autor' y 'título' en transacciones, el estudiante indica el deseo
de saltear todos los registros que no satisfagan estos criterios de búsqueda
específica.

Página -70-
Una búsqueda específica puede limitarse a una sección particular de un
archivo. Dentro de esa sección, en cambio, sólo se seleccionan para su
procesamiento posterior los registros que satisfacen criterios de búsqueda
estrechamente definidos. Se toma esta decisión probando uno o más
criterios especificados, se lo saltea.

Cuanto sigue ilustra una búsqueda específica que comienza en el registro 10


de un archivo VSAM de registros relativos. Sólo se seleccionan para si
posterior procesamiento los registros marcados expirados.

RRN 1

RRN 12 EXPIRADO RRN 10


RRN 10 NO EXPIRADO
RRN 14 EXPIRADO RIDFLD
RRN 11 NO EXPIRADO

RRN 12 EXPIRADO

RRN 13 NO EXPIRADO

RRN 14 EXPIRADO

La selección de una técnica de búsqueda se basará principalmente en la


naturaleza de la aplicación que esté desarrollando. No obstante, intentará
seleccionar aquel que provea al operador de la terminal la información
requerida de la manera más eficiente.

Consideraciones sobre diseño de aplicaciones

La mayoría de los programas de aplicación CICS que codifique se ejecutarán


en respuesta a un pedido de procesamiento de un operador de terminal.
Puesto que el operador espera con frecuencia una respuesta, sus programas
han de poder darla rápida y eficientemente. Es importante recordar que para
ejecutar sus transacciones CICS se está usando un conjunto finito de
recursos. El uso ineficiente de los recursos, aún por sólo una transacción,
puede afectar la capacidad de respuesta del sistema completo,
especialmente si muchas terminales están ejecutando concurrentemente esa
transacción. Veamos algunas de las maneras por las que las transacciones
de búsqueda secuencial pueden impactar los recursos del sistema.

Página -71-
Tiempo de respuesta

Supongamos que un operador ingresa un pedido de búsqueda de cierta


información. Su programa emite un comando para posicionar al CICS en la
ubicación pertinente del archivo.

Luego emite comandos para leer secuencialmente los registros. Durante este
tiempo el operador espera una respuesta. El tiempo que demanda la lectura
de un solo registro puede ser relativamente corto. Pero para el operador que
está esperando unos pocos segundos le parecen mucho tiempo. Es
importante limitar el alcance de una búsqueda para minimizar el tiempo de
respuesta al operador de terminal solicitante.

Puja por recursos

Cuando varias transacciones recorren concurrentemente el mismo archivo,


luchan por el recurso archivo. Esa puja puede frenar la ejecución de
transacciones individuales en cualquier entorno. En un archivo VSAM, este
factor llega a ser crítico. El VSAM fija un límite al número de pedidos
concurrentes que pueden quedar pendientes, con respecto a un archivo, en
un momento dado. Este límite se llama 'string number'. Todo pedido contra
el archivo usa un 'string de VSAM'. El programador de sistemas especifica el
número de strings para cada archivo VSAM en la entrada de la FCT
correspondiente a ese archivo.

Cuando una transacción emite un pedido contra un archivo VSAM, debe


disponer de un string para poder procesar el pedido. Si no se dispone de uno
, la transacción solicitante ha de esperar que se complete uno de los otros
pedidos ya en curso, liberando así un string.

VSAMFIL

TAREA A

TAREA C TAREA B

STRINGS = 2

Página -72-
Toda vez que se inicia una búsqueda, se asigna un string de VSAM para
atender el pedido. Es importante advertir que el string está asignando
mientras dure la búsqueda, esto es, hasta que se emita el comando ENDBR.

Es responsabilidad del programador de sistemas determinar y especificar el


número de strings de VSAM. No obstante, el programador de aplicación, al
diseñar aplicaciones de búsqueda, ha de estar en el conocimiento de impacto
de este factor.

Dentro de su aplicación, limitará el tiempo durante el cual su programa


monopoliza un string del VSAM.

Indice alternativo de VSAM

CATALOGO

NRO ITEM

AUTOR TEMA

TITULO

Recordemos los ejemplos de la consulta del fichero de la biblioteca que ya


hemos visto en esta unidad. El archivo de catálogo en sí mismo tenía claves
de acuerdo con el tema. Dos de las transacciones de consulta proveían
acceso por autor y por título de libro. Si el porcentaje de esas transacciones
fuera lo suficientemente elevado, podría ser útil preparar un archivo de
referencias cruzadas. Si el catálogo fuera un archivo VSAM, estas
referencias cruzadas se llevan a cabo utilizando la facilidad de Índice
Alternativo.

El archivo para el cual se construyen índices alternativos se conoce como el


archivo base. Para el VSAM, todo índice alternativo es un archivo separado.

Página -73-
La combinación de un índice alternativo y el archivo base se conoce como un
camino del índice alternativo. El (los) camino(s) y el archivo base se definen
en la Tabla de Control de Archivos (FCT).

Los registros, en un programa de aplicación CICS, pueden procesarse


referenciando el archivo base o uno de los caminos de índice alternativo.

Página -74-
La condición de excepción clave duplicada

El programa de Control Archivos, en respuesta a un comando READ,


READNEXT o READPREV, puede activar la condición de excepción de clave
duplicada (DUPKEY) al procesar archivos de índices alternativos VSAM. Esta
condición indica que existen múltiples registros para la clave especificada en
el comando de lectura. Se dice que el archivo que se está procesando
contiene claves no únicas.

Esta situación podría plantearse en el ejemplo del catálogo. supongamos que


para el catálogo existe un índice alternativo con claves por autor. Puesto que
el catálogo puede contener entradas múltiples de libros para un autor, el
índice alternativo puede apuntar a múltiples registros de archivo base. El
camino de índice alternativo contiene tantos registros para un autor como
libros haya en el catálogo por ese autor. La condición de excepción DUPKEY
es el medio por el cual el CICS informa a un programa de aplicación que se
ha detectado esta situación. La figura 3.12 ilustra este ejemplo de un camino
de índice alternativo con claves no únicas.

INDICE
ALTERNATIVO

Fig. 63-12.
Indice Alternativo con LA COMPUTACION MODERNA
Claves no Unicas
LA CARRERA DE INFORMATICA

A.HUXLEY NUEVO TRATADO DE COMPUTACION

TEMAS DE BASES DE DATOS

LA INFORMATICA : A DONDE NOS LLEVA?

La acción asumida por el CICS, cuando se produce la condición DUPKEY, es


la de terminar anormalmente la tarea. Por lo tanto, si deseara cumplir un
procesamiento adicional, es necesario codificar un comando HANDLE
CONDITION o IGNORE CONDITION con la opción DUPKEY.

Una manera de procesar claves no únicas es la de iniciar una búsqueda


secuencial a partir del registro leído por el comando READ . Podrían luego
leerse y procesarse todos los registros que tengan esa clave. Procesado el
último registro, podría reanudarse su lógica normal de aplicación. La figura
3.13 ilustra el flujo de este enfoque de procesamiento.

Página -75-
COMIENZO

Fig. 3-13.
Procesamiento de
EXEC CICS READ
Indice Alternativo con
Clave no Unicas

SI
EXEC CICS
DUPKEY?
STARTBR

NO

PROCESO DEL EXEC CICS


REGISTRO READNEXT
READPREV

PROCESO DEL
DUPKEY?
REGISTRO

NO

PROCESO DEL
ULT. REGISTRO

EXEC CICS
ENDBR

La condición DUPKEY se activa con cada comando READNEXT o


READPREV que recupere una clave no única, excepto la última. Lo que ha
de recordarse es que el CICS terminará su tarea en esta situación, salvo,
que el programa de aplicación atienda la condición de excepción DUPKEY.

Página -76-
Actualización de Registros

Al actualizar registros utilizando índices alternativos VSAM, el objetivo último


de la operación de actualización es el registro del 'archivo base'. El VSAM
lleva a cabo automáticamente las actualizaciones que afectan al índice
alternativo, si así se especificara al crearse el archivo. Dada la manera en la
que el CICS procesa los pedidos de actualización, se recomienda hacer
todas las actualizaciones a través del 'archivo base' o de un camino simple
de índice alternativo. De no hacerse así puede verse afectada la integridad
del archivo.

Relación entre el CICS y el DB2

El uso de DB2 dentro de programas on-line es similar al uso del mismo en


programas batch. Sin embargo es necesario tener en cuenta algunos
conceptos que varían al pasar de un entorno batch a un entorno CICS, y
estos son:

 La relación entre planes DB2, programas y transacciones


 El manejo de unidades de trabajo dentro del CICS
 La performance.

Relación entre planes, programas y transacciones

En un entorno batch, los programas se ejecutan de manera consecutiva y


aislada, y si algún programa necesita ejecutar instrucciones de DB2, debe
correr asociado con un plan de DB2. Por lo tanto el plan se ejecuta siempre
asociado a un único programa, que es el que se está ejecutando, más allá de
que el plan contenga más de un DBRM debido al uso de rutinas que
contengan DB2.

En el ambiente CICS, en cambio, no existe una asociación directa entre el


programa y el plan. Los planes de DB2 se asocian con las transacciones, y
esto se hace a través de una de las tablas del CICS (la RCT Resource
Control Table). Por lo tanto, si la transacción ejecuta más de un programa,
todos se ejecutarán asociados al mismo plan.

Por lo tanto es recomendable no usar el comando XCTL para transferir el


control entre distintos programas CICS-DB2 si se quiere que ejecuten con
planes distintos, ya que al usar este comando cambia el programa pero no la
transacción. Es necesario entonces utilizar el comando START, que inicia
una nueva transacción y le transfiere el control al programa asociado con la
misma, permitiendo así el uso de planes distintos para los dos programas.

Página -77-
Manejo de unidades de trabajo en CICS

En CICS, todo el procesamiento del programa entre dos puntos de


sincronismo es conocido como una unidad lógica de trabajo (LUW Logical
unit of work) o simplemente unidad de trabajo. Generalmente, una unidad de
trabajo es una sucesión de acciones que forman un todo desde el punto de
vista lógico y que al completarse en su totalidad dejan al sistema en un
estado consistente.

Por ejemplo, las acciones de decrementar las existencias de un artículo en


una tabla de stock y generar una orden de compra por la misma cantidad
puede constituir una unidad de trabajo: ambas acciones deben completarse
antes que la transacción pueda considerarse completa. Si una de las
acciones ocurrió y la otra no, la base de datos pierde su consistencia.

Una unidad de trabajo puede concluir de las siguientes maneras

 Implícitamente al final de una transacción, por un comando EXEC CICS


RETURN.

 Explícitamente por un comando EXEC CICS SYNCPOINT realizado por


el programa de aplicación dentro de la transacción.

Se puede usar el comando SYNCPOINT comando con la opción ROLLBACK


para volver atrás los cambios realizados por la unidad de trabajo actual (es
decir desde el inicio de la transacción o desde el último SYNCPOINT
realizado). Por ejemplo, un programa que actualiza un conjunto de filas
relacionadas puede encontrar un error después de actualizar varias filas. El
programa puede usar el SYNCPOINT con ROLLBACK para volver atrás
todas las actualizaciones sin abandonar control.

El COMMIT y ROLLBACK de SQL no son sentencias válidas en un ambiente


CICS.

Las funciones de CICS usadas en los programas puede ser coordinado con
el DB2 para que los datos DB2 y no DB2 sean consistentes. Si se produce un
error, se volverán atrás todos los cambios (tanto los producidos en archivos
como los realizados en tablas DB2).

Performance

Con respecto a este tema hay que tener las mismas consideraciones que al
usar cualquier tipo de recursos bajo CICS. Es necesario tener en cuenta el
volumen de transacciones que se procesan, y la concurrencia de las mismas,
y tratar de minimizar el uso de recursos, y el tiempo que estos se encuentran
tomados por la transacción.

Página -78-
Temporary Storage (TS)

Conceptos de Almacenamiento Temporario

El Almacenamiento Temporario provee a los programas de aplicación CICS


un medio para almacenar datos que se usarán posteriormente.

El Almacenamiento Temporario provee también una conveniente facilidad de


transferencia de datos. Si, por ejemplo varias transacciones debieran
acceder a la información ingresada, esta información puede ser almacenada
en el Almacenamiento Temporario y recuperada desde él. La información
permanece en el Almacenamiento Temporario hasta se eliminada por un
programa de aplicación del usuario.

Registros de Almacenamiento Temporario

La información es escrita en el Almacenamiento Temporario en forma de


registros de longitud variable. Estos registros son almacenados por el
Programa de Control del Almacenamiento Temporario (TSP) en la memoria
principal o en el almacenamiento auxiliar (disco), dependiendo de cómo haya
sido definida la facilidad en el momento de generarse el sistema. En algunas
instalaciones se dispone de memoria principal y de almacenamiento auxiliar.
El programa de aplicación, luego, puede especificar el medio de
almacenamiento físico a utilizar.

A todo registro grabado en Almacenamiento Temporario se le asigna un


nombre por el cual es luego identificable por las tareas CICS. Esta
identificación de registro, o ID de datos, es definida por el programa de
aplicación que crea los datos en el momento de grabarse el registro.

Este es uno de los pocos casos en un sistema CICS en el que la


identificación de los datos reconocibles al CICS no ha de estar predefinida en
el sistema. Por supuesto, otros programas de aplicación que acceden los
datos han de conocer este nombre a fin de recuperar luego la información de
Almacenamiento Temporario.

Página -79-
La ID de datos del Almacenamiento Temporario es un nombre de 1 a 8
caracteres. Todo registro puede tener un nombre único, o bien pueden
guardarse varios registros bajo el mismo nombre, formando así una cola de
Almacenamiento Temporario, o grupo de mensajes.
Los registros de un grupo de mensajes del Almacenamiento Temporario, o
grupo pueden ser leídos secuencialmente en el orden en que fueron creados.
También son accesibles directamente por referencia a su posición relativa
dentro del grupo de mensajes.

Ya sea que una ID de datos del Almacenamiento Temporario se refiera a un


solo elemento de datos o a una cola de registros (grupo de mensajes), ésta
ha de ser única dentro del Sistema. Puesto que múltiples tareas pueden estar
ejecutando el mismo programa de aplicación, un programa que grabe en el
Almacenamiento Temporario ha de contar con un medio para crear
dinámicamente una ID de datos única para cada tarea. Una manera común
de hacer esto consiste en incluir la ID de la terminal solicitante como parte de
la ID de datos. Puesto que cada tarea está asociada con una terminal
diferente, la ID de datos es única. Por ejemplo, un programa de edición
podría construir una ID de datos que consista de la Id de la terminal
solicitante (TER3) y del código de la transacción (EDIT). Esta combinación
produciría la ID de datos única: TER3EDIT. (Recuerde que en el EIB de la
tarea se dispone del código de la transacción y de la ID de la terminal).

Los datos del Almacenamiento Temporario quedan disponibles para su


lectura hasta ser explícitamente eliminados por una transacción del usuario.

Por lo tanto, cualquier tarea puede acceder los datos del Almacenamiento
Temporario cualquier número de veces.

Condiciones de Excepción

Las condiciones de excepción que pueden darse durante la ejecución de un


comando de Almacenamiento Temporario son de tres categorías:

Condiciones que has de recibir una atención especial

ITEMERR: el número del registro especificado es mayor que el número


máximo en el conjunto de mensajes.

LENGERR: los datos leídos son demasiado largos.

Condiciones para las cuales es deseable una atención especial.

NOSPACE: El Almacenamiento Temporario carece de espacio para el


registro a ser escrito. La acción asumida por el CICS es la de suspender la
tarea hasta que se disponga de espacio, al ser liberado por otras tareas, la
tarea se reinicia.

Atención asumida por el sistema:

IOERR: Error de entrada/salida

Página -80-
INVREQ: La longitud de los datos a escribir es cero o excede la capacidad de
registro especificada para el almacenamiento auxiliar.

QIDERR: No puede hallarse la ID de datos en el Almacenamiento


Temporario.

Con la excepción de NOSPACE, y en el caso de no haberse especificado


estas condiciones en una sentencia HANDLE CONDITION o en una IGNORE
CONDITION, la acción asumida del CICS es la de terminar anormalmente la
tarea.

Comandos de Almacenamiento Temporario.

Comando WRITEQ

Para escribir datos al Almacenamiento Temporario se usa el siguiente


comando:

EXEC CICS WRITEQ TS

QUEUE (name)

FROM (data-area)

LENGTH (data-value)

ITEM (data-area)

REWRITE

MAIN ¦ AUXILIARY

QUEUE especifica la ID de datos a asignar al registro. Puede ser un literal o


el nombre de un área de datos de ocho bytes que contiene la ID de datos.

FROM identifica el área de trabajo que contiene los datos a grabar.

LENGTH identifica la longitud de los datos a almacenar. El data-value


entre paréntesis es el rótulo simbólico de un campo binario de dos bytes que
contiene la longitud, o la longitud en sí misma.

ITEM especifica el rótulo de un campo binario de dos bytes que contiene el


número del registro a grabar en el grupo de mensajes del Almacenamiento
Temporario. Los números de ítem comienzan con 1 y se incrementan
automáticamente en 1 por cada registro que se agrega. Este parámetro se
especifica cuando ha de actualizarse un registro. Con respecto a los registros

Página -81-
nuevos, el CICS devuelve el número del registro agregado en el área de
datos especificada por ITEM.

REWRITE especifica que ha de actualizarse el registro identificado por


número en ITEM.

MAIN indica que el registro ha de almacenarse en memoria principal. De


estar disponible en su instalación, úselo sólo para reservar un pequeño
monto de datos durante un corto período de tiempo.

AUXILIARY significa que el registro ha de almacenarse en e almacenamiento


auxiliar. SI no se codificara ni MAIN ni AUXILIARY, se asume AUXILIARY.

La figura 3.14 da un ejemplo de envío de un registro al Almacenamiento


Temporario. La ID de datos es 'TSO1'.

Fig.3-14.
Envío de un mensaje al
Almacenamiento
Temporario (COBOL)

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPC0B16.
*
* GRABACION SOBRE UN GRUPO DE MENSAJES EN ALMACENAMIENTO TEMPORARIO*
*
* *** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TS-DATA.
02 FLD1 ....
02 FLD2 ....
.
.
PROCEDURE DIVISION.
* *VERIFICACION DE ERROR *
EXEC CICS HANDLE CONDITION NOSPACE (FULL)
INVREQ (DATA-LEN) ERROR(OTHER)
END-EXEC.
* MOVIMIENTO DE DATOS EN LOS CAMPOS TS *

EXEC CICS WRITEQ TS QUEUE ('TSO1') FROM (TS-DATA)


LENGTH (40)
END-EXEC.
FULL.
* ERROR DE PROCESAMIENTO - ARCHIVO LLENO ***
.
.
DATA-LEN.
* ERROR DE PROCESAMIENTO - DATO INVALIDO *
.
.

Página -82-
.
OTHERR.
* ERROR DE PROCESAMIENTO. HA SURGIDO OTRO ERROR *
.

Comando READQ

Para leer datos al Almacenamiento Temporario se usa el siguiente comando:

EXEC CICS READQ TS

QUEUE (name)

INTO (data-area)

LENGTH (data-value)

ITEM (data-area) ¦ NEXT

QUEUE especifica la ID de datos con la cual fue grabado el registro que se


desea recuperar.

INTO especifica el área de trabajo en la que han de leerse los datos.

LENGTH especifica el rótulo de un campo binario de dos bytes que contiene


la longitud máxima del registro a recuperar. La longitud real del registro leído
se coloca en el campo LENGTH. Si la longitud del registro excediera el valor
del campo LENGTH, sólo se transfieren las primeras posiciones del registro
al área identificada por INTO, produciéndose una condición LENGERR.

ITEM indica recuperación directa del grupo de mensajes. Especifica el rótulo


de un campo binario de dos bytes que contiene el número de secuencia del
registro a leer del grupo (o cola) de mensajes, o el número de secuencia en
sí mismo.

NEXT indica que se desea lectura secuencial de registros. El parámetro


hace que el siguiente registro secuencial del grupo de mensajes sea devuelto
al programa. Si no se codificaran ITEM ni NEXT, se asume NEXT.

Cuando durante la lectura secuencial (opción NEXT) se detecta el fin de


grupo de mensajes, se produce la condición ITEMERR.

La figura 3.15 da ejemplo de la lectura de datos del Almacenamiento


Temporario.

Página -83-
Fig.3-15.
Actualización en el
Almacenamiento Temporario
(COBOL)

IDENTIFICATION DIVISION.
PROGRAM-ID. FCPC0B16.
*
* REEMPLAZO DE UN ITEM EN UN GRUPO DE MENSAJES DE ALMACENAMIENTO
* TEMPORARIO *
* *** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 ITEM-NO PIC S9(4) COMP.
01 TS-DATA.
02 FLD1 ....
02 FLD2 ....
.
.
PROCEDURE DIVISION.
*
EXEC CICS HANDLE CONDITION NOSPACE (FULL)
INVREQ (DATA-LEN) QIDERR (WRONG) ERROR(OTHER)
ITEMERR (NO-ITEM)
END-EXEC.
.
.

* MOVIMIENTO DE DATOS EN LOS CAMPOS TS *

EXEC CICS WRITEQ TS QUEUE ('TSO1') FROM (TS-DATA)


LENGTH (40) ITEM (ITEM-NO) REWRITE
END-EXEC.
FULL.
* ERROR DE PROCESAMIENTO - ARCHIVO LLENO ***
.
.
DATA-LEN.
* ERROR DE PROCESAMIENTO - DATO INVALIDO *
.
.
.
WRONGQ.
* ERROR DE PROCESAMIENTO - NOMBRE INVALIDO ID DE COLA *
.
.
OTHERR.

Página -84-
* ERROR DE PROCESAMIENTO. HA SURGIDO OTRO ERROR *
.
.
NO-ITEM.
* ERROR DE PROCESAMIENTO. EL REGISTRO NO ESTA EN EL GRUPO DE MENSAJES *
.
.
.

Comando DELETEQ

Recuerde que el espacio que ocupan los datos en el Almacenamiento


Temporario no es automáticamente liberado luego de haber sido utilizados
los datos. Por lo tanto, cuando deje de necesitar datos en el
Almacenamiento Temporario, debe liberar el espacio emitiendo el siguiente
comando.

EXEC CICS DELETEQ TS QUEUE (name)

QUEUE especifica la ID de datos a eliminar. No se especifican otros


parámetros. Al emitirse el comando, se eliminan todos los registros
almacenados bajo la ID especificada.

Página -85-
Módulo IV

Interprete a nivel comandos

El interprete a nivel comandos sirve como referencia para la sintaxis de la


interfase de programación a nivel comandos de CICS. Cualquier comando
EXEC CICS puede ser desplegado y la mayoría también ejecutado.

El programador de aplicaciones puede aprender a usar comandos mediante


prácticas con el intérprete o practicar con los comandos usando varias
opciones. El intérprete a nivel comandos emite los mismos mensajes de
diagnóstico de errores que el traductor ‘batch’ si se omiten parámetros o si
se especifican incorrectamente.

El intérprete puede usarse para actualizar registros de archivos. Para evitar


la actualización no autorizada es posible generar un módulo de
administración de seguridad mediante el CICS. Este módulo controla que
tanto el operador como la transacción estén autorizados a actualizar el
archivo.

Invocación del intérprete

El intérprete a nivel comandos es un programa de aplicación de CICS y


puede ser invocado mediante una de las dos transacciones que sirven para
tal fin, seguidas sus ID’s por un comando o no. Estas dos transacciones son
CECS y CECI.

Transacciones CECS

El formato de cualquier comando EXEC CICS puede ser mostrado por la


terminal mediante el ingreso del código de transacción CECS seguido por el
comando. Por ejemplo, para ver el comando para leer el archivo FILEA
(EXEC CICS READ FILE), ingrese lo siguiente por la terminal:

CECS READ FILE (‘FILEA’)

La sintaxis del comando es controlada y aparecerá una pantalla como la que


se ve en la figura 4.1. En este caso también aparecerá un mensaje de error
pues se omitió un campo obligatorio.

Página -86-
Fig.4-1.
Control de Sintaxis
de Comandos.

READ FILE ('FILEA')


STATUS: COMMAND SYNTAX CHECK NAME
EXEC CICS READ
File ('FILEA ')
SET () ¦ INTO ()
< Length () >
Ridfld ()
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

DFH70521 S RIDFLD OPTION MUST BE SPECIFIED

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Transacción CECI
La transacción CECI le permite no sólo verificar la sintaxis de los comandos sino
también ejecutarlos. Por ejemplo, para leer un registro con una clave de 000001
en FILEA, ingrese lo siguiente por la terminal

CECI READ FILE (‘FILEA’) RIDFLD (000001)

La sintaxis del comando es controlada y aparecerá la pantalla ilustrada en la


figura 4.2.

Página -87-
Fig.4-2.
Control de Sintaxis
de Comandos y Ejecución.

READ FILE ('FILEA')RIDFLD (000001)


STATUS: ABOUT TO EXECUTE COMMAND NAME
EXEC CICS READ
File ('FILEA ')
SET () ¦ INTO ()
Length ()
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Cuando se presiona la tecla INTO (o ENTER) se ejecuta el comando y aparece la


pantalla mostrada en la figura 4.3

Fig. 4-3
Ejecución de
Comando Completa.

READ FILE ('FILEA') RIDFLD(000001)


STATUS: COMMAND EXECUTION COMPLETE NAME=
EXEC CICS READ
File ('FILEA')
SET ()  INTO ('U000001LIEBERS S ..............................)
< Length (+00080) >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

RESPONSE: NORMAL EIBRCODE=X'000000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -88-
Diseño de pantalla

Hay cinco áreas claramente definidas dentro de la pantalla

 Línea de comandos
 Línea de estado
 Area de información
 Area de mensaje
 Area de teclas de función

Línea de comandos
Línea de comandos tal como fueron ingresados. En un programa de aplicación
siempre es necesario codificar EXEC CICS antes de la función de comando, pero
el intérprete no lo requiere. El intérprete a nivel comandos también permite el uso
de abreviaturas. Esto no es posible en los programas de aplicación, donde deben
codificarse los comandos tal como aparecen en el manual de referencia.

El comando mostrado en las dos figuras previas puede ser ingresado en su forma
abreviada tal como se ve en la figura 4.4
Fig. 4-4
Línea de Comandos

READ FILE ('FILEA') R (000001)


STATUS: ABOUT TO EXECUTE COMMAND NAME=
EXEC CICS READ
File ('FILEA ')
SET ()  INTO ()
Length ()
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Línea de estado
La línea de estado identifica el tipo de pantalla. Las figuras 4.5 a 4.7 muestran
tres tipos diferentes de pantallas.

Página -89-
Figura 4.5
Línea de estado -
Control de sintaxis de comandos

READ FILE ('FILEA')


STATUS: COMMAND SYNTAX CHECK NAME=
EXEC CICS READ
File ('FILEA ')
SET () ¦ INTO ()
Length ()
Ridfld ()
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

DFH70521 S RIDFLD OPTION MUST BE SPECIFIED

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Figura 4-6.
Línea de estado - A punto
de ejecutar un comando

READ FILE ('FILEA') RIDFLD (000001)


STATUS: ABOUT TO EXECUTE COMMAND NAME=
EXEC CICS READ
File ('FILEA ')
SET ()  INTO ()
Length ()
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -90-
Fig. 4-7.
Línea de estado
Ejecución de comando completa

READ FILE ('FILEA') RIDFLD (000001)


STATUS: COMMAND EXECUTION COMPLETE NAME=
EXEC CICS READ
File ('FILEA')
SET ()  INTO ('U000001LIEBERS S ............................'....)
< Length (+00080) >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

RESPONSE: NORMAL EIBRCODE=X'000000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Area de información

El área de información muestra el comando completo con todas las opciones.


Las opciones elegidas en la línea de comandos y las asumidas por defecto
aparecen con doble brillo.

Las terminales con capacidad de mayúsculas y minúsculas muestran las


abreviaturas posibles. Lo que puede ser ingresado (como mínimo, en la línea de
comandos ) aparece en mayúsculas mientras que el resto, opcional, estará en
minúsculas. Mire la figura 4.8

Página -91-
Fig.4.8
Area de Información.

READ FILE ('FILEA')


STATUS: ABOUT TO EXECUTE COMMAND NAME=
EXEC CICS READ
File ('FILEA ')
SET ()  INTO ()
< Length () >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset ()  Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Los signos mayor que (>) y menor que (<) indican parámetros opcionales y son
equivalentes a los paréntesis usados en el ‘Application Programmer’s Reference
Manual’ (SC33-0077). La barra vertical (│) indica alternativas. Las opciones que
carecen de los signos mayor y menor son obligatorias salvo cuando se trate de
campos receptores. Uno de estos campos es, en la figura 4.8, el área de INTO. Si
no se ingresa ningún campo receptor en línea de comandos, el intérprete lo define
automáticamente.

Tras la ejecución del comando READ FILE, el área INTO contiene el registro
pedido, tal como se muestra en la figura 4.9.
Fig. 4-9.
Area INTO

READ FILE ('FILEA') RIDFLD(000001)


STATUS: COMMAND EXECUTION COMPLETE NAME=
EXEC CICS READ
File ('FILEA')
SET ()  INTO ('U000001LIEBERS S ............................... '.....)
< Length ( 00080) >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

RESPONSE: NORMAL EIBRCODE=X'000000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -92-
El apóstrofo seguido por puntos en el área INTO indica que el registro era
demasiado largo para mostrarlo completo. Para ver todo el registro hay que dar
INTRO teniendo el cursor bajo los datos del área INTO. En la figura 4.10 vemos
el área INTO expandida.

Fig. 4-10.
Area INTO expandida

READ FILE ('FILEA') RIDFLD (000001)


EXPANSION OF: OPTION=INTO LENGTH=+00080 NAME=
00000 U000001LIEBERS S .....................................$
00064 0000.1 .....

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Area de mensajes

El intérprete de comandos da dos tipos de mensajes. Después de la ejecución de


un comando aparece el código de retorno de CICS tanto en inglés como en
hexadecimal. Ver figura 4.11.

Fig. 4-11.
Area de mensajes
Código de retorno CICS

READ FILE ('FILEA') RIDFLD(000001)


STATUS: COMMAND EXECUTION COMPLETE NAME=
EXEC CICS READ
File ('FILEA')
SET ()  INTO ('U000001LIEBERS S ............................... '.....)
< Length (+00080) >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

RESPONSE: NORMAL EIBRCODE=X'000000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -93-
Tras el control de sintaxis de un comando el área de mensajes puede tener un
mensaje de error del traductor. Si el comando está bien y no corresponde
mensaje alguno, el área queda en blanco. La figura 4.12 muestra un ejemplo de
un mensaje de error.

Fig.4-12.
Area de mensajes
Mensaje de error del traductor.

READ FILE ('FILEA')


STATUS: COMMAND SYNTAX CHECK
EXEC CICS READ
File ('FILEA ')
SET ()  INTO ()
< Length () >
Ridfld ()
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

DFH70521 S RIDFLD OPTION MUST BE SPECIFIED

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Teclas de función

La última línea de la pantalla muestra la función asignada a cada tecla PF (del


inglés, Program Function Key). La función se ejecuta directamente apretando la
PF elegida y luego la tecla INTRO. Si una terminal no tiene éste tipo de teclas,
puede conseguirse ejecutar la función deseada poniendo el cursor bajo tal función
y dando INTRO. El área de las teclas de función aparece en la Fig. 4.13.

Página -94-
Fig.4-13.
Area de Teclas de Función.

READ FILE ('FILEA') RIDFLD(000001)


STATUS: COMMAND EXECUTION COMPLETE NAME=
EXEC CICS READ
File ('FILEA')
SET ()  INTO ('U000001LIEBERS S ............................... '.....)
< Length ( 00080) >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

RESPONSE: NORMAL EIBRCODE=X'000000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Area de teclas de función

Veamos ahora las PFs con más atención.

PF2. Esta PF cambia el formato de la información variable de carácter a


hexadecimal. El modo hexadecimal quedará en efecto hasta que se pulse
nuevamente PF2 para volverlo a formato de carácter. La figura 4.14 muestra el
formato hexadecimal de la figura 4.13.

Página -95-
Fig.4-14.
Formato Hexadecimal.

READ FILE ('FILEA') RIDFLD(000001)


STATUS: COMMAND EXECUTION COMPLETE NAME=
EXEC CICS READ
File ('X'C6C9D3C5C1404040')
SET ()  INTO (X'E4F0F0F0F0F0F1 40 4040404040404040404040
'.....)
< Length (X'0080.) >
Ridfld (X'F0F0F0F0F0F1')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

RESPONSE: NORMAL EIBRCODE=X'000000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Fig. 4-15.
Formato hexadecimal del
área INTO expandida.

READ FILE ('FILEA') RIDFLD (000001)


EXPANSION OF OPTION=INTO LENGTH= +00080 NAME=
000000 E4F0F0F0 F0F0F1 40 U000001LIEBERS S
000010 40404040 40404040 40404000 00000000 .......
000020 00000000 00000000 00000000 00000000 ..................
000030 00000000 00000000 00000000 0000005B ..................
000040 F0F0F0F0 4BF0F100 00000000 00000000 ..................

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -96-
PF5. Pueden definirse variables y luego ser mostradas mediante PF5. Las
variables se usan para guardar información que se usará más tarde en una
sesión. Por ejemplo, si un comando ha de ser usado con frecuencia en una
sesión, puede almacenarse en una variable ingresando un nombre en el
parámetro NAME= y dando INTRO. Este nombre debe comenzar con un
ampersand (&). La figura 4.16 muestra una variable (&READS) cuando es
asignada a un comando.
Fig.4-16.
Asignación de variable.
Comando.

READ FILE ('FILEA') RIDFLD(000001)


STATUS: ABOUT TO EXECUTE COMMAND NAME&READS
EXEC CICS READ
File ('FILEA ')
SET ()  INTO ()
< Length () >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Este comando puede ser repetido, en más, simplemente ingresando &READS en


la línea de comandos.

Un campo receptor puede ser definido como una variable. Esto serviría para
transferir datos entre dos comandos asociados. En la figura 4.17 el área INTO es
definida como una variable (&SAVEIO).

Página -97-
Fig. 4-17.
Asignación de variable.
Campo receptor.

READ FILE ('FILEA') RIDFLD(000001) UPDATE


STATUS: ABOUT TO EXECUTE COMMAND NAME=
EXEC CICS READ
File ('FILEA ')
SET ()  INTO (&SAVEIO)
< Length () >
Ridfld ('000001')
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Los datos guardados en &SAVEIO pueden ser alterados tal como veremos más
tarde y vuelto s a incorporar al archivo usando el comando REWRITE con la
opción FROM especificada como &SAVEIO.

La figura 4.18 muestra un segundo método para asignar una variable a los datos
del área INTO. En este caso, tenemos un área expandida INTO en formato
hexadecimal. La variable &SAVEIO se define en el parámetro NAME=

Fig.4-18.
Asignación de variable.

READ FILE ('FILEA') RIDFLD (000001)


EXPANSION OF OPTION=INTO LENGTH= +00080 NAME=&SAVEIO
000000 E4F0F0F0 F0F0F1 40 U000001LIEBERS S
000010 40404040 40404040 40404000 00000000 .......
000020 00000000 00000000 00000000 00000000 ..................
000030 00000000 00000000 00000000 0000005B ..................
000040 F0F0F0F0 4BF0F100 00000000 00000000 ..................

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -98-
Dando PF5 y oprimiendo INTRO aparecen todas las variables asociadas con una
sesión dada del intérprete, tal como puede verse en la figura 4.19.

Fig.4-19.
Resultado de PF5.

READ FILE ('FILEA') RIDFLD (000001)


VARIABLES
&DFHC +00016 THIS IS A SAMPLE
&DFHW +00046 EXEC CICS WRITEQ QUEUE('..CIL77A') FROM(&DFHC)
&DFHR +00045 EXEC CICS READQ QUEUE('..CIL77A') INTO(&DFHC)
&READS +00038 READ FILE('FILEA') RIDFLD(000001)
&SAVEIO +00080 U000001LIEBERS S .................................

Contents
Length
Name

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Las tres primeras variables fueron usadas para guardar datos entre sesiones.
Después de haberse familiarizado con los comandos y comenzado a usar el
intérprete de comandos, le aconsejamos leer el párrafo sobre almacenamiento de
variables en el capítulo del intérprete que está en el ‘Application Programmer’s
Reference Manual (Command Level)’ (SC33-0077).

La pantalla de la figura anterior puede usarse para dar de alta variables. Esto se
consigue agregando una nueva línea donde se especifica el nuevo nombre, la
longitud y contenido. Asimismo, puede eliminarse una variable poniendo el cursor
bajo el ampersand del nombre y apretando la tecla de ERASE EOF o BORRE FIN
CAMPO. Finalmente, también es factible alterar tanto el contenido como la
longitud simplemente ingresando la nueva información sobre la existente.

PF9. Es posible que durante el control de sintaxis haya más de un error y por
consiguiente haga falta más de un mensaje. En ese caso el área de mensajes
muestra cuantos mensajes fueron generados, tal como se ve en la figura 4.20.

Página -99-
Fig. 4-20.
Múltiples mensajes de error.

READ
STATUS: COMMAND SYNTAX CHECK
EXEC CICS READ
File ()
SET ()  INTO ()
< Length () >
Ridfld ()
<Keylength () <Generic>>
<SYsid () >
<SEGset () ¦Segsetall >
< Rba  RRn  DEBRec  DEBKey >
< Gteq  Equal >
< Update >

MESSAGES: 2 SEVERE, 0 ERROR, 0 WARNING, O INFORMATION

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Para ver los mensajes hay que presionar PF9 y aparecerán en la forma en que se
muestran en la figura 4.21.

Fig.4-21.
Múltiples mensajes de error.
Segunda pantalla.

READ FILE ('FILEA')


SYNTAX MESSAGES
DFH70251 S FILE OPTION MUST BE SPECIFIED.
DFH70521 S RIDFLD OPTION MUST BE SPECIFIED.

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER

Página -100-
PF7, PF8, PF10, PF11: A veces toda la información no entra en una sola pantalla.
En la figura 4.22 el signo más (+) que hay junto a la última opción está indicando
que sigue más información.

Fig. 4-22.
Información de múltiples páginas.

ASS
STATUS: COMMAND EXECUTION COMPLETE
EXEC CICS ASSing
+ < Facility ('L77A') >
< Restart('.') >
< SCRNWd (+00080) >
< SCRNHt (+00024) >
< Sigdata('....') >
< Unattend('.') >
< Extds ('.') >
< Color ('.') >
< PS ('.') >
< Hiligth ('.') >
< Abcode (' ') >
< Prinsysid (' ') >
< STARTcode ('TD') >
< Applid ('DBDCCICS') >
< Sysid ('dfh')>
< DELimiter('.') >
< Validation ('.') >

RESPONSE: INVREQ EIBRCODE=X'E00000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Esos datos adicionales pueden ser vistos dando PF8 (avanza media página) o
PF11 (avanza página completa). Esta última opción es la que se usó para el
ejemplo de la figura 4.23.

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -101-
Fig.4-23.
Paginado hacia delante.

ASS
STATUS: COMMAND EXECUTION COMPLETE
EXEC CICS ASSing
+ < CWaleng (+00512) >
< TWaleng(+00000) >
< TCaualeng (+00000) >
< LDCMnem ('.') >
< LDCNum('P') >
< DESTcount(+00000) >
< PAgenum (+00000) >
< STATionid (''') >
< TELlerid('.') >
< Numtab ('.') >
< DESTID (' ') >
< DESTIDLeng (+00000) >
< FCi ('.') >
< TERmcode ('DBDCCICS') >
< OPid ('...')>
< OPClass('...') >
< OPSecurity ('...') >

RESPONSE: INVREQ EIBRCODE=X'E00000000000'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

El signo (+) en la primera línea de opción de la figura 4.23 indica que hay
información precediendo a la pantalla que está siendo mostrada. Esta puede ser
vista dando PF7 (retrocede media página ) o PF10 (retrocede página completa).

PF4: El bloque de interfase de ejecución de (EIB) puede verse en cualquier


momento mediante PF4. Hay un ejemplo de ello en la figura 4.24

Página -102-
Fig.4-24.
Detalle del EIB.

READ F(FILEA)R(000001)
EXEC INTERFACE BLOCK
EIBTIME = +0134605
EIBDATE = +008074
EIBTRNID = 'CECI'
EIBTASKN = +0000027
EIBCPOSN = +00005
EIBCALEN = +00000
EIBAID = X'7D'
EIBFN = X'602' (READ)
EIBRCODE = X'000000000000'
EIBDS = 'FILEA '
EIBREQUID = '........'
EIBRSRCE = 'FILEA '
EIBSYNC = '.'
EIBFREE = '.'
EIBRECV = '.'
EIBATT = '.'
EIBEOC = '.'
EIBFMH = '.'

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

PF6: Al probar un comando de TERMINAL SEND, los datos enviados a esa


terminal pueden ser vistos después que en la línea de estado haya aparecido el
mensaje ' About to execute'. Ello se consigue mediante PF6.

PF1: La figura 4.25 muestra los cuatro temas sobre los que hay información
disponible en la pantalla de ayuda o HELP.

1. Línea de comandos.

2. Pedido de control de sintaxis mediante el ingreso de un signo de

interrogación (?) como primer carácter del comando.

3. Valores o variables expandidas

4. Teclas de función o PFs.

Página -103-
Fig.4-25.
Pantalla de ayuda o HELP.

GENERAL HELP INFORMATION

Enter command on the first line and press ENTER (after returning from HELP) Options
can be abbreviated to the minimum to make them unique.
? before command gives Command Syntax
To expand a value or variable to full screen,
position cursor using TAB key and press ENTER.

PF KEY HELP INFORMATION

PF01 HELP HELP INFORMATION


PF02 HEX SWITCH HEX/CHAR
PF03 END END SESSION
PF04 EIB EXEC INTERFACE BLOCK
PF05 VAR VARIABLES
PF06 USER USER DISPLAY
PF07 SBH SCROLL BACK HALF
PF08 SFH SCROLL FORWARD HALF
PF09 MSG SYNTAX MESSAGES
PF10 SB SCROLL BACK
PF11 SF SCROLL FODWARD
PF12 UNDEFINED

PF 3 RETURN

Hay otra ayuda disponible que, sin embargo, no está asociada con ninguna PF.
Ingresando el código de transacción CECI sin parámetros pueden verse todos los
comandos EXEC CICS. Las abreviaturas posibles aparecen en mayúsculas y el
resto del comando en minúsculas si la terminal lo permite.
La figura 4.26 muestra una lista de los comandos EXEC CICS.

Página -104-
Fig. 4-26.
Lista de Comandos EXEC CICS.

STATUS: ENTER ONE OF THE FOLLOWING

Abend ENQ READPrev WRITE


Address ENTer READQ WRITEQ
Allocate Extract RECeive Xctl
ASKtime FREE RELease
ASSign FREEMain Resetbr
Blf Getmain RETRIeve
BUild HAndle RETUrn
CAncel IGnore REWrite
COnverse ISsue ROute
DELAy Journal SEnd
DELETE LInk START
DELETEQ LOad STARTBr
DEQ POInt SUspend
DIsable POSt SYncpoint
DUmp PUrge Trace
ENAble READ Unlock
ENDbr READNext Wait

PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7 SBH 8 SFH 9 MSG 10 SB 11 SF

PF3: Esta tecla puede usarse en cualquier momento para dar por terminada la
sesión.

A medida que vaya aprendiendo los comandos a lo largo de este curso, le


aconsejamos que se vaya familiarizando con el uso del intérprete de comandos.

COMANDO CEMT:
Es un comando, que se utiliza para requerir información o ejecutar diversas
acciones sobre las Tablas del CICS en el cual se está trabajando.
Este comando permite visualizar las diversas tablas del CICS y tomar acciones
Sobre ellas como por ejemplo: Abrir/Cerrar archivos, Dar de Baja una Task,etc

La siguiente figura ilustra el desplegado de las diversas opciones del comando


usado con INQUIRE.
En mayúsculas nos muestra la abreviatura mínima indispensable para cada
opción.

PROG: se utiliza para acceder a la PPT


FIL: para acceder a la FCT
Ta: para acceder a las TASK que se encuentran en ejecución.
TRA: para acceder a la PCT, etc

Página -105-
INQUIRE
STATUS: ENTER ONE OF THE FOLLOWING OR HIT ENTER FOR DEFAULT

AUTInstmodel FENode PROGram TSQueue


AUTOinstall FEPOol REquestmodel UOW
AUXtrace FEPRopset RRms UOWDsnfail
CFdtpool FETarget STAtistics UOWLink
COnnection FIle STReamname Vtam
DB2Conn Gtftrace SYDumpcode Web
DB2Entry INttrace SYStem
DB2Tran IRc TAsk
DEletshipped JModel TCLass
DOctemplate JOurnalname TCPIP
DSAs Line TCPIPService
DSName MODename TDqueue
DUmpds MONitor TErminal
ENQ Netname TRAnsaction
ENQModel PArtner TRDumpcode
EXci PROCesstype TSModel
FEConnection PROFile TSPool

SYSID=CIT2 APPLID=ARGTEST2

PF 1 HELP 3 END 5 VAR 9 MSG

La siguiente figura ilustra el desplegado de la información cuando se tipea


CEMT I FIL.
Es la lista de todos los nombres lógicos de los archivos con su DSN
Asociada; el estado en que se encuentran los mismos, y las operaciones
que se pueden efectuar sobre ellos.

Página -106-
I FIL
STATUS: RESULTS - OVERTYPE TO MODIFY
Fil(AA101D ) Vsa Clo Ena Rea Bro Sha
Dsn( ÑDS067.AA.KS.AA101D )
Fil(AA101U ) Vsa Clo Ena Rea Bro Sha
Dsn( ÑDS014.AA101D.ROU )
Fil(AA107D ) Vsa Clo Ena Rea Bro Sha
Dsn( ÑDS067.AA.KS.AA107D )
Fil(AA109D ) Vsa Clo Ena Rea Bro Sha
Dsn( ÑDS936.AA.KS.AA109D )
Fil(AA117D ) Vsa Clo Ena Rea Upd Add Bro Del Sha
Dsn( ÑDS922.AA.KS.AA117D )
Fil(AA903D ) Vsa Clo Ena Rea Upd Add Bro Del Sha
Dsn( ÑDSCC.AA.KS.AA903D )
Fil(ACM103D ) Vsa Clo Ena Rea Upd Add Bro Del Sha
Dsn( ÑDST2.AC.KS.ACO103D )
Fil(ACM103D1) Vsa Clo Ena Rea Upd Add Bro Del Sha
Dsn( ÑDST2.AC.KS.ACO103D.PATH1 )
+ Fil(ACM103D2) Vsa Clo Ena Rea Upd Add Bro Del Sha
Dsn( ÑDST2.AC.KS.ACO103D.PATH2 )

SYSID=CIT2 APPLID=ARGTEST2
RESPONSE: NORMAL TIME: 16.30.06 DATE: 08.30.00
PF 1 HELP 3 END 5 VAR 7 SBH 8 SFH 9 MSG 10 SB 11 SF

La figura que sigue muestra un INQUIRE de un programa en particular

I PROG(ACO001A)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(ACO001A ) Len(0017840) Cob Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful Qua

SYSID=CIT2
APPLID=ARGTEST2
RESPONSE: NORMAL TIME: 16.30.06 DATE: 08.30.00
PF 1 HELP 3 END 5 VAR 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Como puede verse a continuación se le puede dar NEW COPY (N ; para que
tome una nueva versión de un programa).

Página -107-
I PROG(ACO001A)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(ACO001A ) Len(0017840) Cob Pro Ena Pri N Ced
Res(000) Use(0000000000) Bel Uex Ful Qua

SYSID=CIT2
APPLID=ARGTEST2
RESPONSE: NORMAL TIME: 16.31.29 DATE: 08.30.00
F 1 HELP 3 END 5 VAR 7 SBH 8 SFH 9 MSG 10 SB 11 SF

En la figura que sigue se ilustra la respuesta luego de haber presionado ENTER.


.

I PROG(ACO001A)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(ACO001A ) Len(0017840) Cob Pro Ena Pri Ced NORMAL
Res(000) Use(0000000000) Bel Uex Ful Qua

SYSID=CIT2
APPLID=ARGTEST2
RESPONSE: NORMAL TIME: 16.31.29 DATE: 08.30.00
F 1 HELP 3 END 5 VAR 7 SBH 8 SFH 9 MSG 10 SB 11 SF

La siguiente pantalla nos muestra un CEMT SET PROG, genérico.


En este caso el comando NEW COPY se puede dar en la primer línea, teniendo
efecto sobre todos los programas mostrados. (Fig. 4.33 y 4.34).

Página -108-
S PROG(ACO001*)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(ACO001A ) Len(0017840) Cob Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful Qua
Prog(ACO001C ) Len(0008072) Cob Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful Qua
Prog(ACO001P ) Len(0006720) Cob Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful

SYSID=CIT2
APPLID=ARGTEST2
RESPONSE: NORMAL TIME: 16.31.29 DATE: 08.30.00
F 1 HELP 3 END 5 VAR 7 SBH 8 SFH 9 MSG 10 SB 11 SF

S PROG(ACO001*) NEW
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(ACO001A ) Len(0017840) Cob Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful Qua
Prog(ACO001C ) Len(0008072) Cob Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful Qua
Prog(ACO001P ) Len(0006720) Cob Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful Qua

SYSID=CIT2 APPLID=ARGTEST2
RESPONSE: NORMAL TIME: 16.31.29 DATE: 08.30.00
F 1 HELP 3 END 5 VAR 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -109-
S PROG(ACO001*) NEW
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(ACO001A ) Len(0017840) Cob Pro Ena Pri Ced NORMAL
Res(000) Use(0000000000) Bel Uex Ful Qua
Prog(ACO001C ) Len(0008072) Cob Pro Ena Pri Ced NORMAL
Res(000) Use(0000000000) Bel Uex Ful Qua
Prog(ACO001P ) Len(0006720) Cob Pro Ena Pri Ced NORMAL
Res(000) Use(0000000000) Bel Uex Ful Qua

SYSID=CIT2 APPLID=ARGTEST2
RESPONSE: NORMAL TIME: 16.31.29 DATE: 08.30.00
F 1 HELP 3 END 5 VAR 7 SBH 8 SFH 9 MSG 10 SB 11 SF

Página -110-
Depuración de programas CEDF

Detección de errores

Errores en la Preparación de los Programas

Tres pasos han de ejecutarse para producir un módulo ejecutable, como se ilustra
en la figura 4.27.

Fig.4-27.
Preparación de Programas.

TRADUCCION DE LISTADO DE
COMANDOS TRADUCCION
CICS

Programa
Fuente

LISTADO DE
COMPILADOR COMPILACION O
O ASSEMBLER
ASSEMBLER

MODULO
OBJETO

DOS:
Biblioteca Core LISTADO
LINK LINK EDIT
Image EDIT
OS:
Biblioteca de
Carga

Página -111-
De cada paso se producen listados. Estos vuelcos impresos, que revisará
cuidadosamente, son fuentes de información de errores que provee cada uno de
los programas.

Errores en tiempo de Ejecución

Hay generalmente dos tipos de errores en tiempo de ejecución:

Errores que puede atender el programa de aplicación - error en el formato de


entrada, datos inválidos.
Errores que puede atender el CICS/VS - indicación de invalidez, ID de
transacción inválida, violación de la seguridad o errores de terminal y de línea.

Ha de diseñarse el programa de aplicación para que atienda los errores que sea
capaz de detectar. Por ejemplo, si el programa de aplicación instruyera al
operador a ingresar datos, el programa de aplicación debiera detectar errores en
el formato de los datos. Además de la verificación del formato de entrada,
deberán validarse también los datos. Así, el programa de aplicación debiera
notificar al operador si los datos de entrada no están dentro de límites razonables
o si en el archivo maestro no existe un registro.

Veamos algunos de los errores que puede atender el CICS. Si el CICS hubiera
sido diseñado para requerir la habilitación del operador (sign on), detectará
cualquier error deslizado durante el procedimiento de habilitación y transmitirá un
mensaje a la terminal.

Solamente pueden iniciarse las Ids de transacción que han sido definidas en el
CICS. Si un operador ingresa una ID inválida, se transmite un mensaje a la
terminal.

Es posible definir una ID de transacción con una clave de seguridad. Luego, esa
transacción sólo puede ser iniciada por un operador que tenga la misma clave de
seguridad. Si se cometiera una violación, se transmite un mensaje a la terminal
del usuario y a la Terminal Maestra (CSMT).

El CICS detecta asimismo errores de terminal y de línea. Cuando se producen


estos tipos de errores, el CICS transmite mensajes a la Terminal Maestra y a la
consola. Según la gravedad del problema, la terminal del usuario podrá
permanecer activa o ser puesta fuera de servicio.

Facilidad de Rastreo

Cuando un programa no produce los resultados propuestos, es necesario contar,


con herramientas que permitan el diagnóstico del error. El CICS provee varias,
una de las cuales es una facilidad de rastreo. Esta facilidad monitoriza la
actividad de los módulos de administración del CICS invocados por un programa
de aplicación.

Página -112-
La facilidad de rastreo, que puede activarse o inactivarse dinámicamente, se
implementa a través del uso de una Tabla de Rastreo. Al arrancar el rastreo,
tosas las tareas que estén activas harán que los varios módulos de
administración del CICS generen entradas en tabla. Así, por ejemplo, si hubiera
tres tareas activas en el sistema y se activara el rastreo aparece
conceptualmente de la siguiente manera:

ENTRADAS DE
RASTREO DE
TAREA 1

ENTRADAS DE
RASTREO DE
TAREA 2

ENTRADAS DE
RASTREO DE
TAREA 3

ENTRADAS DE
RASTREO DE
TAREA 2

El programa de sistemas fija el número de entradas en la tabla. La tabla es cíclica


(wraparound), esto significa que luego de usar la última entrada de la tabla se
comenzará de nuevo desde el principio superponiéndose con entradas anteriores
(las más antiguas).

Página -113-
Fig.4-28.
Entradas de la Tabla de Rastreo.

TAREA 1

TABLA DE RASTREO

TAREA 2

TAREA 3

TAREA 2

DIRECCION INFORMACION CODIFICADA EN HEXADECIMAL TIPO DE RASTREO


DE ENTRADA

278330 E1 243480 0004 0001 001F767C 00000402 ........EIP RECEIVE TC ENTRY


278340 F1 1E477A 4004 0001 001F6000 011E14E8 ........Y SCP FREEMAIN
278350 C9 1DF30C 0004 0001 001F6000 85000088 ........SCP RELEASED TERMINAL STORAGE
278360 E1 243480 00F4 0001 00000000 00000402 ........EIP RECEIVE TC RESPONSE

ESTA COLUMNA ES EL TXTO EN


INGLES EQUIVALENTE A LA
INFORMACION CODIFICADA EN
HEXADECIMAL

La figura 4.28 ilustra un ejemplo de salida de la tarea 1. En este ejemplo, el


programa de aplicación emite un comando RECEIVE. Las condiciones que
provocaron la construcción de cuatro entradas para la tarea 1 sin las siguientes:

EL PROGRAMA DE APLICACION EMITE


EL COMANDO RECEIVE
(INVOCA EL EIP)

EL EIP EMITE EL PEDIDO


DE LIBERAR LA TIOA

LA TIOA ES LIBERADA

EL EIP INDICA QUE LA FUNCION


RECEIVE HA SIDO COMPLETADA

Página -114-
Los errores en tiempo de ejecución del programa de aplicación pueden dividirse
en dos categorías generales:

Errores atendidos por el programa de aplicación (error de formato de entrada,


datos inválidos )
Errores atendidos por el CICS (indicación de invalidez, errores de ID de
transacción, de terminal o de línea, violación de la seguridad).

Durante un rastreo, cuando se llegó a la última entrada de la tabla de rastreo la


nueva entrada se superpondrá a la primera (esto es, a la más antigua).

Los módulos de administración del CICS son los que hacen entradas en la Tabla
de Rastreo.

Volviendo a la figura 4.28 advierta que las entradas de la tabla de rastreo se


dividen en tres partes generales:

 Dirección de la entrada
 Información codificada en hexadecimal
 Tipo de rastreo

Como puede ver, las entradas de tipo de rastreo reflejan los pasos que acabamos
de describir cuando el programa de aplicación emitió un comando RECEIVE.

Observamos ahora la figura 4.29 que muestra un vuelco impreso parcial de una
tabla de rastreo en la que se ilustran las entradas de dos tareas. El
encabezamiento de columna TASK identifica a la tarea que originó la entrada.

Fig.4-29.
Tabla de Rastreo

TRACE
ID REG14 REQD TASK FIELD A FIELD B TRACE TYPE
TABLE
2781B0 F0 1E606C 1104 TC 011E14E8 E2D1C1F2 ...YSJA2 KCP ATTACH-ONDITIONAL
2781C0 F1 1DD91E EA04 TC 00080620 801E14E8 .......Y SCP GETMAIN-COND-INIT
2781D0 C8 1DF222 0004 TC 001F7000 BA030628 ........ SCP ACQUIRED TCA
2781E0 F0 1E4078 4004 TC 44000000 001E1538 ........ KCP WAIT
2781F0 F2 1E7534 0204 0002 E2D1D4D6 C4C1F140 .SJMODA1 PCP XCTL
278200 F1 1F2AB6 CC04 0002 00000128 011E14E8 .......Y SCP GETMAIN-INIT
278210 C8 1DF222 0004 0002 001F7630 8C000138 ........ SCP ACQUIRED USER
278220 F1 1F2D16 CC04 0002 00000191 011E14E8 .......Y SCP GETMAIN-INIT

278150 C8 1DF222 0004 0002 001F7770 BC0001A8 ........ SCP ACQUIRED USER
278160 E1 246E5A 0004 0002 001F7780 00000204 ........ EIP HANDLE-COND ENTRY
278170 F1 1F24A6 CC04 0002 00000070 011E14E8 .......Y SCP GETMAIN-INIT
278180 C8 1DF222 0004 0002 001F7920 BC000078 ........ SCP ACQUIRED USER
278190 E1 246E5A 00F4 0002 00000000 00000204 ........ EIP HANDLE-COND RESP
2781A0 E1 246E7E 0004 0002 001F7780 00000402 ........ EIP RECEIVE-TC ENTRY

Página -115-
Advierta, por ejemplo, que Control de Terminal (TC) es una tarea activa con
entradas en la tabla. La otra tarea con entradas en la tabla es la tarea 0002. Ha
aprendido Ud. que una tarea se identifica con una ID alfanumérica de cuatro
caracteres. Puesto que una misma transacción puede iniciarse concurrentemente
en terminales diferentes, el CICS controla todas las tareas asignando a cada una
de ellas, al iniciarse, un número secuencial. Así, por ejemplo, al iniciar la tarea
AB12 el CICS le asigna un número de identificación de tarea secuencial.

Típicamente, su tarea será la única tarea del usuario activa. Esto se debe al
hecho de que está depurando un programa en un sistema de prueba CICS y no
en un sistema de producción, en donde hay múltiples usuarios del sistema.

Lo que sigue es una explicación de cada una de las columnas de la figura 4.29.

Página -116-
Columnas ‘Trace Type’ (Tipo de Rastreo)

La parte de extrema derecha de la figura 4.29 da esta información.

...YSJA2 KCP ATTACH-CONDITIONAL

INTERPRETA INFORMACIONDE LA COLUMNA


REQUERIDA, REPRESENTA LA FUNCION REALIZADA
POR UN PROGRAMA DE CONTROL DEL CICS.

NOMBRE DEL PROGRAMA


DE CONTROL

INTREPRETA INFORMACION DE LOS CAMPOS A Y B

EIP provoca dos entradas en la tabla. La primera se hace al invocar al EIP y se


marca ENTRY. La segunda entrada se hace cuando el EIP termina, y se la
marca RESPONSE. Observe la figura 4.29 y ubique las dos entradas EIP para el
comando HANDLE CONDITION.

Columnas ‘Field A’ y ‘Field B’


La información contenida en las columnas ‘ Field A’ y ‘Field B’ depende del
módulo de administración que hizo la entrada en la tabla y de las funciones
cumplidas por él.

Por ejemplo, KCP inicia una tarea cuya ID es SJA2. Advierta en la figura 4.29
cómo la columna ‘Field B’ es la representación EBCDIC para SJA2. Advierta
también que cuando el PCP transfiere el control al programa de aplicación
SJMODA1, ese nombre está contenido en el ‘Field A’ y en el ‘Field B’; no tendría
que ocuparse de su contenido.

Columna ‘REQD’
Esta columna identifica, con un valor numérico, la función o servicio que se le
requirió a un módulo de administración CICS. Por ejemplo, en la línea 1 de la
figura 4.29, el 1104 en la columna REQD significa para ‘ATTACH-CONDITIONAL’
(arranque condicional de una tarea).

Columna ‘ID’

Página -117-
Esta columna identifica al módulo de administración. Así, F0 es la codificación
para KCP; F1, para SCP, etc.

Columna ‘REG14’

El registro 14 contiene la dirección a la que retornará el módulo de


administración. Si, la entrada corresponde al Programa de Interfase de Ejecución
(EIP), es la dirección de la siguiente instrucción secuencial del programa de
aplicación.

Columna ‘Trace Table’

Esta columna identifica a la dirección del comienzo en memoria de cada una de


las entradas de la tabla de rastreo. Es útil para identificar los límites físicos de la
tabla de rastreo y las entradas más antigua y más nueva (corriente) de la tabla.

En el caso de una terminación anormal de una tarea, querrá determinar la


actividad que ha tenido lugar. Así, necesita identificar la entrada corriente de la
Tabla de Rastreo. A modo de ayuda para el usuario, la entrada corriente (la
actividad más reciente) es siempre la última línea impresa. Así, en la figura 4.29,
la última actividad que tuvo lugar es

RECEIVE-TC ENTRY

La actividad más antigua es la primer línea (superior) del vuelco impreso, así

ATTACH-CONDITIONAL

es la actividad más antigua. Los límites físicos de la Tabla de Rastreo se


identifican con facilidad ya que las direcciones de almacenamiento inicial y final
están separadas por una línea en blanco en la salida impresa. Así, en la figura
4.29, el almacenamiento físico de la Tabla de Rastreo es el siguiente:

278150

UBICACION FISICA
DE LA TABLA DE
RASTREO

278220

La tarea número 0002 originó la entrada. La función que cumple SJMODA PCP
XCTL – es pedir al servicio de control de programas la transferencia de control
al programa de aplicación SJMODA1.
La entrada más antigua la originó Control de Terminales, que emitió un pedido al
Programa Control de Tareas (KCP) para que arranque una nueva tarea con la ID
de transacción SJA2.

Página -118-
Cuando el rastreo (Trace) está activo, la tabla de rastreo se imprimirá
automáticamente como parte de un vuelco de transacción.

Además de ser activado por la terminal Maestra, el rastreo puede asimismo ser
activado e inactivado por comandos del programa de aplicación. El programa de
aplicación puede requerir que se hagan entradas de rastreo solamente cuando
invocan ciertos módulos de administración del CICS.
Además, puede hacer entradas de tipo USER. Cuando se hacen entradas USER,
el programa de aplicación suministra los ocho bytes de información en ‘Field A’ y
‘Field B’.

Vuelco de Transacción

Un programa de aplicación puede contener una falla que produce un error de


programa (program check). El CICS detecta el error de programa y termina
anormalmente la transacción. El encabezamiento del vuelco de la transacción
indica el código de terminación anormal y la ID de la transacción.

CODE:XXXX TASK:XXXX

ID DE
TRANSACCION

CODIGO DE TERMINACION
(Abend)

También se transmite un mensaje a la terminal, informando al operador que la


transacción ha sido terminada.

Los mensajes y los códigos del sistema se describen en ‘CICS Message and
Codes Manual’.

Página -119-
DFH2005 XXXX XXXX

TRANSACTION ABEND CODIGO DE ABEND IDENTIFICA EL


PROGRAMA DE CONTROL QUE
EMITIO EL ABEND

ID E TRANSACCION

MENSAJE DEL SISTEMA U


UN MENSAJE GENERICO;
TIPICAMENTE USADO EN CONJUNCION
CON EL CODIGO DE ABEND PARA SER UTIL

Mensaje del sistema DFHnnnnn especifica la acción que toma el CICS y sugiere
la acción que Ud. debe tomar.

Todos los códigos de terminación anormal CICS son alfabéticos, y de cuatro


caracteres. El primer carácter es una designación asignada por IBM. El CICS
asigna los siguientes dos, que identifican el módulo de administración del CICS
que decidió la terminación anormal. Por ejemplo, los dos caracteres pueden ser
FC, lo que significa que Control de Archivos (File Control) emitió una terminación
anormal. TC es control de Terminales; PC, Control de Programas y así
sucesivamente. El último carácter es un código alfabético asignado por el CICS.

La Terminal Maestra es también informada de una terminación anormal. El


formato del mensaje es:

DFH2006 XXXX XXXX XXXX

TRANSACTION ABEND AT ID DE TERMINAL


ES LA ID DE LA TERMINAL
DONDE OCURRIO EL
ABEND

CODIGO DE ABEND

ID E TRANSACCION

MENSAJE DEL SISTEMA

Página -120-
Un programa de aplicación puede asimismo requerir un vuelco emitiendo el
siguiente comando:

EXEC CICS DUMP DUMPCODE (name)

El (name) se especifica por un código de 4 caracteres. El código aparece en el


encabezamiento del vuelco, para identificarlo. La tarea no termina
anormalmente si el vuelco se requiere a través del comando EXEC CICS DUMP.

No es necesario volcar toda la memoria que pertenece a la tarea. El pedido de


vuelco puede ser selectivo y especificar sólo ciertas áreas.

Sólo puede atenderse a la vez un pedido de vuelco. Si se emitiera un segundo


pedido de vuelco mientras está todavía activo uno, se suspende
momentáneamente la tarea que requirió el vuelco. Todos los vuelcos dirigen a un
archivo de vuelcos que puede estar en el disco o en cinta. Estos vuelcos se
imprimen posteriormente empleando un programa utilitario.

Cuando el programa de aplicación emite, por ejemplo, un comando EXEC CICS


DUMP-CODE ('PT08') en donde 'PT08' es un código seleccionado por el
programador que identifica el vuelco, entonces puede tomarse el vuelco sin que
termine anormalmente.

Facilidad de diagnóstico de Ejecución (EDF)

EDF ayuda a la depuración y pruebas en línea de sus programas de aplicación.


'Depuración' es el proceso de eliminación de errores conocidos del programa.
'Prueba', es el proceso para demostrar la validez de un programa.

La primera parte de esta sección le muestra cómo seguir la ejecución de una


transacción EDF intercepta la ejecución del programa en el momento de ejecutar
los comandos EXEC CICS y despliega en estos puntos información pertinente
sobre el programa. También se despliegan las pantallas que hubiera transmitido
el programa de aplicación, de modo que el programador pueda interactuar con el
programa de aplicación durante la depuración y la prueba del programa, tal como
lo haría un usuario una vez en operación el programa.

La segunda parte de esta sección describe las facilidades EDF que simplificaran
el proceso de prueba.

EDF se procesa como una transacción CICS. Se arranca iniciando la transacción


CEDF o mediante una tecla PF designada por el programador de sistemas.

EDF se puede procesar en la misma terminal en la que se está probando la


transacción. Ud. invoca la transacción CEDF antes de su transacción. Luego se
desplegará información EDF en la terminal, alternadamente con la salida que
hubiera de su transacción.

Si no quiere que se mezclen las salidas, puede usar una segunda terminal para
invocar a CEDF. Para invocar a CEDF desde una segunda terminal debe
especificar la ID de la terminal que procesa su transacción.

Página -121-
Por ejemplo:

CEDF L77A

L77A es la Id de terminal. El uso de dos terminales permite que toda la


información EDF aparezca en una terminal y que la salida de su transacción
aparezca como lo haría normalmente en el sistema de producción.

Seguimiento de una Tarea

En el grupo de pantallas de las figuras 4.30 a 4.46 se muestra el seguimiento de


una tarea que lee un registro de archivo y lo despliega en la terminal. Se utilizó
una sola terminal. Primero se inició la transacción CEDF y luego se arrancó la
transacción FC01 tipeando FC01 DISP LS012.

Página -122-
Fig.4-30.
Pantalla 1.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: PROGRAM INITIATION
EIBTIME = +0174857
EIBDATE = +0079086
EIBTRNID = 'FC01'
EIBTASKN = +0001592
EIBTRMID = X'LA1E'
EIBPOSN = +00015
EIBCALEN = +00000
EIBAID = X'7D' AT X'001323D2'
EIBFN = X'0000' AT X'001323D3'
EIBRCODE = X'000000000000' AT X'001323D5'
EIBDS = '......'
EIBREQUID = '........'

ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: UNDEFINED

'Pantalla1' : Esta es la primer pantalla EDF que vería en una terminal en la que se
está siguiendo la transacción FC01.

La primera línea de la pantalla representa la ID de la transacción, el nombre del


programa y el número secuencial que el CICS ha asignado a su tarea. Esta línea
se representa en todas las pantallas EDF. El estado muestra el mensaje
PROGRAM INITIATION, lo que significa que se está iniciando la transacción.
Esta pantalla representa información contenida en el EIB. Normalmente, el EIB se
representa sólo en la iniciación del programa, pero puede obtenerse en cualquier
momento pulsando PF5 (WORKING-STORAGE) y luego PF4. Si su terminal
careciera de teclas PF, puede lograrse el mismo efecto colocando el cursor
debajo de la PF3 en las indicaciones de la parte inferior de la pantalla y pulsando
la tecla ENTER. Para continuar ejecutando se pulsa la tecla ENTER.

Todas las sentencias de comando tienen dos pantallas asociadas con ellas: una
'antes' y otra 'después' de ejecutarse el comando.

Página -123-
Fig. 4-31.
Pantalla 2.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: ABOUT TO EXECUTE COMMAND
EXEC CICS HANDLE CONDITION
LENGERR ()
DSIDERR ()
NOTFND()
NOTOPEN()
ERROR ()

OFFSET: X'0005BA' LINE: 00031 EIBFN = X'0204'

ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: UNDEFINED


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

'Pantalla 2': El primer comando CICS del programa FCEXCOB1 es un 'HANDLE


CONDITION'. La pantalla 2 se representa antes de ejecutarse el comando, como
lo indica el estado, 'ABOUT TO EXECUTE COMMAND' .
Las condiciones de excepción codificadas en el comando EXEC CICS HANDLE
CONDITION se ilustran en la pantalla. El OFFSET que se ilustra en la porción
inferior de la pantalla es la dirección en memoria del comando EXEC CICS
HANDLE CONDITION relativa al comienzo del programa.
LINE representa el número de renglón donde está la sentencia de comando en el
listado del traductor.

Luego de que se ejecuta el EXEC CICS se visualiza la próxima pantalla.

Página -124-
Fig.4-32.
Pantalla 3.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: COMMAND EXECUTION COMPLETE
EXEC CICS HANDLE CONDITION
LENGERR ()
DSIDERR ()
NOTFND()
NOTOPEN()
ERROR ()

OFFSET: X'0005BA' LINE: 00031 EIBFN = X'0204'


RESPONSE: NORMAL EIBRESP=0

ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

'Pantalla 3': El estado ilustra 'COMMAND EXECUTION COMPLETE' o sea


ejecución del comando completo. En la porción inferior izquierda de la pantalla
aparece un nuevo campo, RESPONSE. El mensaje de respuesta es normal, lo
que significa que no se han producido condiciones excepcionales.

Fig.4-33.
Pantalla 4.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: ABOUT TO EXECUTE COMMAND
EXEC CICS RECEIVE
INTO('................')
LENGTH(+00015)
.
.

OFFSET: X'0005BA' LINE: 00031 EIBFN = X'0204'


EIBRESP = 0

ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: UNDEFINED


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

'Pantalla 4': Esta pantalla muestra el comando RECEIVE antes de ser ejecutado.

Página -125-
Fig.4-34.
Pantalla 5.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: COMMAND EXECUTION COMPLETE
EXEC CICS RECEIVE
INTO('FC01 DISP LS012')
LENGTH(+00015)
.
.

OFFSET: X'000640' LINE: 00035 EIBFN = X'0402'


RESPONSE: EOC EIBRESP = 6

ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

'Pantalla 5': esta pantalla muestra el comando RECEIVE después de que fue
ejecutado. El dato

FC01 DISP LS012

fue colocado en la memoria de trabajo. El mensaje de respuesta, para el fin del


comando es EOC. Los errores de terminales, excepto LENGERR, corren bajo
CICS. Si hay un error de longitud usted verá como mensaje de respuesta a
LENGERR, de lo contrario será EOC como mensaje de respuesta.
Mire la siguiente serie de pantallas, para saber cómo se despliega el CEDF para
la transacción.

Inspeccionando estas pantallas va a ver que esta tarea se ha cumplido hasta su


terminación. La pantalla 15 le da la opción de continuar o terminar la sesión EDF.
Para continuar ingrese YES en el campo REPLY (de respuesta) aunque diga NO.

Página -126-
Fig.4-35.
Pantalla 6.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: ABOUT TO EXECUTE COMMAND

LENGERR()

.
.

OFFSET: X'00069E' LINE: 00041 EIBFN = X'0204'

ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: UNDEFINED


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Fig.4-36.
Pantalla 7.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: ABOUT TO EXECUTE COMMAND
EXEC CICS HANDLE CONDITION
LENGERR()
.
.
.

OFFSET: X'00069E' LINE: 00041 EIBFN = X'0204'


RESPONSE: NORMAL EIBRESP = 0
ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Página -127-
Fig.4-37.
Pantalla 8.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: ABOUT TO EXECUTE COMMAND
EXEC CICS READ
FILE('CLASSDS')
INTO('..............................................................'...)
LENGTH(+00090)
RIDFLD('LS012')
EQUAL
.
.

OFFSET: X'000736' LINE: 00043 EIBFN = X'0602'


ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: UNDEFINED


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Fig.4-38.
Pantalla 9.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: COMMAND EXECUTION COMPLETE
EXEC CICS READ
FILE('CLASSDS')
INTO('LS012GR54 5BAND SHORTW RECEIV CHI144 780130LAX 78177 0295NYC10'...)
LENGTH(+00075)
RIDFLD('LS012')
EQUAL
.
.

OFFSET: X'000736' LINE: 00043 EIBFN = X'0602'


RESPONSE: NORMAL EIBRESP = 0
ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Página -128-
Fig.4-39.
Pantalla 10.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: ABOUT TO EXECUTE COMMAND
EXEC CICS SEND
FROM('130.5BAND SHORTW RECEIV..................')
LENGTH(+00035)
ERASE
.
.

OFFSET: X'0007B2' LINE: 00049 EIBFN = X'0404'


ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: UNDEFINED


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Fig.4-40.
Pantalla 11.

130 5BAND SHORTW RECEIV

(USER SCREEN)

Página -129-
Fig.4-41.
Pantalla 12.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: COMMAND EXECUTION COMPLETE
EXEC CICS SEND
FROM('130.5BAND SHORTW RECEIV..................')
LENGTH(+00035)
ERASE
.
.

OFFSET: X'0007B2' LINE: 00049 EIBFN = X'0404'


RESPONSE: NORMAL EIBRESP = 0
ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Fig.4-42.
Pantalla 13.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: ABOUT TO EXECUTE COMMAND
EXEC CICS RETURN
.
.
.

OFFSET: X'0007EC' LINE: 00051 EIBFN = X'0E08'


ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: UNDEFINED


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Página -130-
Fig.4-43.
Pantalla 14.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: PROGRAM TERMINATION
.
.

ENTER: CONTINUE

PF1: UNDEFINED PF2: UNDEFINED PF3: UNDEFINED


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Fig.4-44.
Pantalla 15.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: TASK TERMINATION
.
.
.

TO CONTINUE EDF SESSION REPLY YES REPLY: NO


ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: UNDEFINED

Página -131-
Depuración y Prueba de una Transacción

Los programas se escriben para atender las condiciones de error que pueden
producirse durante su ejecución. En algunos casos es difícil, si no imposible,
'forzar' los errores que permitan probar la lógica de atención de errores de un
programa.

EDF permite la simulación de un error. Así, puede probarse toda la lógica de


atención de errores de su programa de aplicación antes de ser éste puesto en
producción.

Volvamos a la pantalla 9, en la que acaba de completarse una operación READ.


Adviértase que el mensaje del campo RESPONSE es NORMAL. En una pantalla
anterior (2) se listó un número de condiciones de excepción.
Una de estas condiciones es NOTFND. Supongamos que se desea probar cómo
el programa maneja esta condición. Puede hacer esto modificando el mensaje
RESPONSE reemplazando NORMAL por NOTFND. Cuando su programa
reanude la ejecución bifurcará la rutina de la condición NOTFND.

Por ejemplo, en la pantalla 8 podría modificar la clave de registro del RIDFLD


para que lea un registro diferente.

En oportunidades resulta útil ver el equivalente hexadecimal de los carácter


representados en los campos argumento. Puede modificar el formato de
representación de los campos argumento de carácter a hexadecimal pulsando
PF2. En la representación hexadecimal de los datos, también se representa la
dirección de comienzo en memoria de los datos del campo argumento, tal como
puede apreciarse en la pantalla 16.

Fig.4-45.
Pantalla 16.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


STATUS: COMMAND EXECUTION COMPLETE
EXEC CICS READ
FILE(X'C3D3C1E2E2C4E240') AT X'00132936'
INTO(X'D3E2F0F1F2C7D9F5F440F5C2C1D5C440E2C8D6D9E3D640D9'...) AT X'001328AC'
LENGTH(X'004B')
RIDFLD(C'D3E2F0F1F2')
EQUAL
.
.

OFFSET: X'000736' LINE: 00043 EIBFN = X'0602'


RESPONSE: NORMAL EIBRESP = 0
ENTER: CONTINUE

PF1: UNDEFINED PF2: SWITCH HEX/CHAR PF3: END EDF SESSION


PF4: SUPPRESS DISPLAYS PF5: WORKINKG-STORAGE PF6: USER DISPLAY
PF7: SCROLL BACK PF8: SCROL FORWARD PF9: STOP
CONDITIONS
PF10: PREVIOUS DISPLAY PF11: UNDEFINED PF12: ABEND USER TASK

Página -132-
El modo de representación seguirá siendo hexadecimal hasta que pulse PF2,
para volver a carácter.

Puede representarse la memoria de trabajo del programa pulsando PF5. La


pantalla 17 muestra un ejemplo de memoria de trabajo del programa.

Fig.4-46.
Pantalla 17.

TRANSACTION: FC01 PROGRAM: FCEXCOB1 TASK NUMBER: 0001592 DISPLAY


ADDRESS:0013287C

00132870 000000
00132880 000004 00000000 D3C1C3F9 40C4C9E2 D740D3E2 ...........FC01 DISP LS
00132890 000014 F0F1F200 00000000 00000000 00000000 012....................
000024 00000000 00000000 00000000 D3E2F0F1 ...................LS01
F440F5C2 C1D5C440 E2C8D6D9 .......2GR54 5BAND SHOR
E540C3C8 C9F1F7F7 .......TW
RECEIV CHI177
40F7F8F1 ...........78 0130LAX781
77 0295NYC102220

ENTER: CURRENT DISPLAY

PF1: UNDEFINED PF2: BROWSE TEMP STORAGE PF3: UNDEFINED


PF4: EIB DISPLAY PF5: INVOKE CECI PF6: USER DISPLAY
PF7: SCROLL BACK HALF PF8: SCROL FORWARD HALF PF9: UNDEFINED
PF10: SCROLL BACK FULL PF11: SCROLL FORWARD FULL PF12: REMEMBER DISPLAY

Puede modificarse cualquier posición de la memoria de trabajo mecanografiando


sobre ella la representación hexadecimal de la memoria o la interpretación en
caracteres que se encuentra a la derecha. PF7, PF8, PF10 y PF11 adquieren un
nuevo significado cuando está representando memoria de trabajo. Le dan la
posibilidad de realizar paginado hacia atrás o hacia delante, a través de la
memoria de a media página o página entera por vez. Además puede representar
cualquier posición de memoria dentro de la partición/región CICS ingresando
sobre la dirección representada en la segunda línea la dirección de comienzo de
la parte de memoria que desea ver.

PF3: Puede discontinuarse EDF en cualquier momento pulsando PF3; la


transacción del usuario continuará de manera normal.

PF12: Esta tecla PF provoca la terminación anormal de la tarea del usuario y


produce un vuelco de la transacción. Ingrese, el código de vuelco de cuatro
caracteres en un campo provisto en la pantalla.

PF6: Esta tecla representa la pantalla del usuario asociada con la pantalla EDF
que se está representando.

PF10 y PF11: EDF almacena las pantallas tal como se representan; puede
resguardarse un máximo de 10 pantallas. PF11 le permite recorrer hacia atrás las
pantallas que han sido resguardadas (yendo de la más reciente a la más antigua).

Página -133-
PF10 lo lleva directamente a la más antigua resguardada. Puede representar
pantallas hacia delante pulsando ENTER por cada pantalla.

PF12: Las pantallas EDF se resguardan en el almacenamiento salvo para


representaciones EIB pedidas con la tecla PF4, representaciones de memoria de
trabajo y pantallas condicionalmente representadas (PF9).
Estas pantallas y las pantallas del usuario pueden resguardarse pulsando PF5 y
luego PF12 (REMEMBER DISPLAY).

PF9: Como hemos mencionado antes, una vez iniciada la transacción CEDF, la
transacción del usuario es interceptada en cada comando EXEC CICS. En lugar
de parar la transacción del usuario en cada comando EXEC CICS, puede pedirse
a EDF que pare la transacción en base a una o más condiciones. El pedido para
seleccionar las condiciones puede hacerse en cualquier momento pulsando PF9.
se representa una pantalla de guía en la cual puede especificar las condiciones
que harán que EDF pare la transacción, por ejemplo, puede pararse cuando se
alcanza un tipo especificado de comando o cuando durante la ejecución de un
comando se produce una condición de excepción o error.

PF4: Luego de especificadas las condiciones mediante el uso de PF9, PF4 se


pulsa para suprimir todas las representaciones EDF hasta que se produzca la
condición especificada.

Página -134-
Módulo V

Temas varios de utilización del CICS

Comando de Formateo de entrada

Los parámetros y opciones del comando de formateo de entrada BMS son los
siguientes:

EXEC CICS RECEIVE MAP (name)


MAPASET (name)
INTO (data-area) ¦ SET (pointer-reference)
TERMINAL (ASIS) ¦ FROM (data-area) LENGTH (data-value)

MAP Especifica el nombre del mapa (1-7 caracteres)

MAPSET Identifica el nombre del conjunto de mapas (1-7 caracteres) al cual


pertenece este mapa.

INTO Especifica el nombre del área de trabajo en la cual se formatearán


los datos. Si se omitiera este parámetro, el BMS coloca los datos en el área
definida por el mapa simbólico.

SET los datos son procesados en el buffer.

TERMINAL Indica que los datos han de leerse desde la terminal y luego
formatearse en el área de trabajo del programa. La opción ASIS impide la
conversión a mayúsculas de los caracteres en minúsculas ingresados en la
corriente de entrada. Adviértase que pueden especificarse las opciones
TERMINAL o FROM y LENGTH, pero no ambas. Si no se codificara ninguna, se
asume TERMINAL.

FROM Indica que los datos han de formatearse desde otra área de datos
del programa. El área de datos nombrada contiene una corriente de datos en
modo nativo que ya ha sido leída desde la terminal. La longitud del área de datos
se define mediante la media palabra binaria identificada en el parámetro
LENGTH.

Página -135-
Comando de formateo de Salida

Los parámetros y opciones del comando de formateo de salida BMS son los
siguientes:

EXEC CICS SEND MAP (name)


MAPASET (name)
TERMINAL
FROM (data-area) LENGTH (data-value)
DATAONLY ¦ MAPONLY
ALARM
CURSOR (data-value)
ERASE ¦ ERASEAUP
FREEKB
FRSET
HONEOM ¦ L40 ¦ L64 ¦ L80

MAP Identifica el mapa a usar en la operación de salida.

MAPSET Identifica el conjunto de mapas al cual pertenece el mapa


especificado.

TERMINAL Indica que los datos han de ser representados en la terminal con la
cual está asociada la transacción.

FROM Especifica el nombre del área de trabajo que contiene los datos a
formatear. Si se omitiera este parámetro, el BMS presupone que los datos están
en el área de trabajo definida por el mapa simbólico.

Esta suposición es válida sólo si el nombre del mapa es una constante. Si es una
variable, FROM debe ser especificado.

LENGTH Sólo es necesario especificar la longitud si los datos a formatear


fueran más cortos que la longitud total del área de datos especificada con la
opción FROM.

Veamos en la figura 5.1 una explicación de los parámetros DATAONLY y


MAPONLY.

Página -136-
Fig. 5-1.
Parámetros DATAONLY
y MAPONLY.
MAPA SIMBOLICO MAPA FISICO

CARACTERES DE
AREA DE DATOS CONTROL
CONSTANTES

DATAONLY MAPONLY

CORRIENTE DE DATOS DE SALIDA

DATAONLY y MAPONLY indican al BMS la información que ha de incluirse en la


operación de formateo de salida, a saber:

Si no se codificaran ni DATAONLY NI MAPONLY, el BMS intercala los datos


provistos en el área de trabajo definida por el mapa simbólico con los datos
constantes definidos en el mapa físico. La corriente de datos resultante será así
una combinación de información fija y variable.
MAPONLY indica que sólo han de representarse los datos constantes definidos
en el mapa físico. MAPONLY se especifica para formatear una pantalla con
datos constantes.
DATAONLY indica que sólo han de formatearse los datos variables creados por el
programa y referenciados en la opción FROM. Se especifica esta opción si, por
ejemplo, desea aplicar nuevos datos a un mapa que ha sido ya representado.

EL comando SEND permite especificar otros parámetros relacionados con las


características físicas de la IBM 3270. Tiene así la opción de cancelar o invalidar
y redefinir los correspondientes parámetros codificados al definirse el mapa.

ALARM indica que deberá sonar la alarma audible de la IBM 3270 al


representarse el mapa.

CURSOR (data-value) especifica la posición del cursor en la pantalla después de


una operación de escritura. El dato ha de ser un valor ha de ser un valor binario
de media palabra que especifique la posición del cursor relativa a cero, el rango
de valores que pueda especificarse depende de la capacidad de la pantalla que
esté usando.

ERASE especifica que ha de borrarse la pantalla antes de representarse el mapa.

Página -137-
ERASEAUP borra todos los campos no protegidos. esto le permite borrar todos
los campos modificados de entrada de datos y dejar las constantes en la pantalla.
Este parámetro es de aplicación sólo a las IBM 3270.

FREEKB DESBLOQUEA el teclado de la IBM 3270 después de representar los


datos en la terminal.

FRSET restaura los indicadores de datos modificados de todos los campos de la


memoria intermedia (buffer) IBM 3270.

HONEOM, L40, L64 o L80 formatea la salida impresa y especifica la longitud de


la línea.

Fig.5-2.
Formato de la pantalla
(COBOL).

IDENTIFICATION DIVISION.
PROGRAM-ID. BMSCOB1.
*
* EL PROGRAMA FORMATEA PANTALLA
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO SE EJECUTARA ***
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
.
.
.
01 MAPAI COPY MAPSETA.
.
.
.
PROCEDURE DIVISION.
.
.
.
EXEC CICS SEND MAP('MAPA') MAPSET('MAPSETA')
MAPONLY END-EXEC.
.
.

Introducción
El dicho ' Si las cosas pueden ir mal, irán' es cierto afortunadamente en un
pequeño porcentaje de las veces. No obstante, en esas veces han de seguirse
procedimientos que vuelvan operativo al sistema en el tiempo más corto posible.
El programador de sistemas o el analista fija esos procedimientos.

En este módulo trataremos las acciones que puede tomar el programa de


aplicación y las que toma el CICS al producirse una falla. La falla puede darse a
nivel de tarea, por ejemplo, una tarea termina anormalmente, o a nivel de
sistema, por ejemplo, el CICS termina anormalmente.

Si el sistema CICS se usa sólo en consultas, los procedimientos de rearranque


son simples. El CICS se rearranca usando los mismos procedimientos que se

Página -138-
utilizan para arrancarlo a primera hora de la mañana. Con este tipo de
rearranque, los operadores de terminal simplemente reingresan sus
transacciones.

Si los archivos fueran actualizados en línea, los procedimientos de rearranque se


tornan más complicados. El CICS debe tener conocimiento de las actualizaciones
que se hicieron en los archivos salvando las imágenes anteriores de los
registros que se estaban utilizando, debe además, conocer las tareas que estaban
actualizando dichos registros. en el caso de una falla, estos datos se utilizan para
volver atrás (backout) todo trabajo que estuviere incompleto en el sistema. El
operador del centro de cómputos debe observar un conjunto de procedimientos.
Estos procedimientos, podrían consistir en ejecutar una serie de programas
utilitarios para volver atrás el trabajo incompleto y restaurar los archivos. Debiera
instruirse a los operadores de terminal a controlar los registros del archivo que
estaban actualizando en el momento de producirse la falla, para comprobar si se
ha completado la actualización. De no haberse completado, el operador de la
terminal reanudará la transacción.

Los procedimientos de Recuperación/Rearranque varían de instalación en


instalación por lo que no los trataremos en detalle en este curso. Consideraremos
el efecto que la recuperación/rearranque tiene en el programa de aplicación.

Objetivos
Al completar este modulo podrá:

Analizar las opciones del programa de aplicación al fallar una tarea


Dar ejemplos de recursos protegidos del CICS
Definir una Unidad Lógica de Trabajo
Analizar las opciones del CICS cuando falla una tarea
Explicar logging y journaling.
Registrar datos para la posible vuelta atrás de las actividades de una tarea
cuando ésta termina anormalmente.

Facilidades de Recuperación del CICS

Ya ha aprendido a atender las condiciones de error o de excepción de una tarea


codificando en sus programas la sentencia HANDLE CONDITION o IGNORE
CONDITION. Al producirse un error durante la ejecución de una tarea, dispone de
dos opciones cuando codifica su programa de aplicación :

Mantener activa la tarea, o


Dejar que la tarea termine anormalmente (ABEND).

HANDLE CONDITION
La acción HANDLE CONDITION, codificada para un error en particular permite al
programa de aplicación mantener activa a la tarea cuando se produce el error. El
programa de aplicación procesa la condición de error y , usualmente, lleva la
tarea a su terminación normal. Si no se especificara en un comando HANDLE
CONDITION una cierta condición de error, termina anormalmente la tarea.

Página -139-
Si la tarea ejecutara solo una consulta del archivo, el efecto sobre el sistema es
mínimo. Si la tarea estuviera actualizando archivos y tuviera lugar un ABEND, la
actualización puede no quedar completa. En este caso, los registros del archivo
accedidos por la tarea deben ser restaurados a su imagen original. Este proceso
se llama vuelta atrás o backout.

HANDLE ABEND

Además de interceptar errores de tarea con un comando HANDLE CONDITION,


el programa de aplicación puede asimismo retener el control, después de
producirse una terminación anormal codificando salidas ABEND (exits). La salida
puede ser una rutina del mismo programa de aplicación

PROGRAMA A

SALIDA POR ABEND

NOMBRE DE LA RUTINA
DE SALIDA

o una salida a otro programa:

PROGRAMA A PROGRAMA B

PROGRAMA DE
SALIDA
SALIDA POR ABEND

En ambos casos, se codifica el siguiente comando.

EXEC CICS HANDLE ABEND (exit routine)


or
EXEC CICS HANDLE ABEND (exit program)

Página -140-
Luego, al producirse un ABEND, el control se transferirá a la rutina de salida o al
programa de salida. Normalmente, la rutina o el programa de salida se usa para
relevar estadísticas adicionales sobre la falla o para corregir ésta y permitir que la
tarea continúe.

Si se especificara una rutina de salida y una tarea ejecutara más de un programa


de aplicación del mismo nivel lógico, considere lo que puede suceder.
Supongamos que el programa A transfiere el control al programa B y que la rutina
de salida se codifica en el programa A.

PROGRAMA A PROGRAMA B

XCTL
NIVEL
LOGICO 1
ABEND
RUTINA DE
SALIDA

Si la tarea terminara anormalmente en el programa B (que fue activado por un


comando XCTL), el programa A puede no estar ya en memoria al producirse la
terminación anormal, por lo que no se dispone ya de la rutina de salida.

Puesto que sólo puede especificarse una salida por nivel lógico, se recomienda
especificar un programa de salida en lugar de una rutina de salida cuando una
tarea ejecuta más de un programa del mismo nivel lógico.

Veamos ahora el procesamiento de la salida ABEND del CICS cuando una tarea
está ejecutando programas de diferentes niveles lógicos. Supongamos, por
ejemplo, que el programa A se vincula con el programa B.

PROGRAMA A

PROGRAMA B
HANDLE
ABEND
PROGRAMA Y
LINK
HANDLE
ABEND
PROGRAMA Z

PROGRAMA Y

PROGRAMA Z

Página -141-
Cada uno de los programas ha especificado un comando HANDLE ABEND que
nombra a los programas de salida Y y Z. Si A terminara anormalmente, se
ejecutará el programa de salida Y. Si B terminara anormalmente, se ejecuta el
programa de salida Z. Si Z terminara anormalmente, se ejecuta el programa de
salida Y porque el CICS ejecuta un programa de salida especificado del siguiente
nivel lógico más alto de una tarea terminada anormalmente.

Dada la siguiente situación:


SALIDA SALIDA
PROGRAMA L PROGRAMA K

PROGRAMA A

PROGRAMA B

LINK
HANDLE PROGRAMA C
ABEND
PROGRAMA L

LINK HANDLE
ABEND
NIVEL
PROGRAMA K
LOGICO 1

NIVEL
LOGICO 2

NIVEL
LOGICO 3

Si el programa C terminara anormalmente se ejecutará el programa K. Se


ejecutará el programa L si el programa B termina anormalmente, o si así lo
hiciera el programa K. No existe una salida ABEND en el nivel lógico 1. Si el
programa A terminara anormalmente, la tarea termina porque no se ha
especificado una salida ABEND.

Registros Protegidos

Algunos recursos del CICS, tales como los registros de archivos o los segmentos
DL/I, están protegidos. Significa esto que en ciertas circunstancias, mientras una
tarea está procesando estos recursos, ninguna otra puede accederlos.

Los registros de archivo se protegen mientras se actualizan. Cuando una tarea


obtiene un registro para actualizarlo, tiene el control exclusivo de ese registro
hasta producirse la regrabación. Ninguna otra tarea puede leer el mismo registro
para actualizarlo. No obstante, una tarea que no especifique UPDATE puede leer
el registro sobre el que otra tarea tiene el control exclusivo.

LIBERA
TAREA A REGISTRO 1
REGISTRO 1

REQUIERE (ESPERA)
TAREA B REGISTRO 1
REGISTRO 1

Página -142-
Control Exclusivo

El control exclusivo de un recurso se establece automáticamente y es


transparente al programa de aplicación. Como programador de aplicación, ha de
saber que puede tener lugar una situación de bloqueo salvo que todas las tareas
accedan estos recursos en función de una secuencia establecida.

REQUIERE (ESPERA)
TAREA A REGISTRO 1
REGISTRO 2

REQUIERE (ESPERA)
TAREA B REGISTRO 2
REGISTRO 1

Por ejemplo:

La tarea A requiere el registro 1 para actualizarlo. La tarea B requiere el registro 2


para actualizarlo. Luego, la tarea A requiere el registro 2 para actualizarlo. El
registro 2 no está disponible por lo que la tarea A espera. La tarea B requiere
ahora el registro 1, que es retenido por la tarea A . Qué sucede?

Hemos ingresado en el abrazo mortal. Ambas tareas esperan esta situación de


bloqueo, Todas las tareas han de acceder los mismos recursos en la misma
secuencia o emitir un comando UNLOCK antes de un segundo pedido.

Unidad lógica de trabajo

A modo de ilustración, consideremos la siguiente tarea:

ENVIA
ARRANQUE LEE PARA
ACTUALIZA MENSAJE A FIN DE TAREA
TAREA ACTUALIZAR
TERMINAL

PUNTO DE PUNTO DE
SINCRONISMO SINCRONISMO

Se ha diseñado la tarea que ha de leer un registro para actualizarlo; actualizar el


registro y transmitir un mensaje de actividad completa al operador de terminal.
Este es un ejemplo de una Unidad Lógica de Trabajos (LUW).
Cuando una tarea requiere un recurso protegido para su actualización, el sistema
activa automáticamente una señal de punto de sincronización. Una Unidad Lógica
de Trabajo, es, luego, la actividad que cumple una tarea entre puntos de registro
de sincronización.

Cuando se utilizan las facilidades de recuperación-rearranque del CICS el período


durante el cual una tarea tiene el control exclusivo de un recurso protegido se
amplía hasta la terminación de la Unidad Lógica de Trabajo. Algunas
transacciones llegan a ser muy largas y no resulta práctico dejar que la tarea
tenga el control exclusivo de muchos recursos hasta que termine.
La aplicación, en un punto del flujo de la tarea, que depende de su lógica, puede
liberar el control de los recursos emitiendo el comando que genera un registro de
punto de sincronización.

Página -143-
EXEC CICS SYNCPOINT

Así, una tarea queda compuesta de una o más Unidades Lógicas de Trabajo. Por
ejemplo:

LEE LEE
ARRANQUE REGISTRO 1 ACTUALIZA REGISTRO 2
ACTUALIZA FIN DE TAREA
TAREA PARA REGISTRO 1 PARA
REGISTRO 2
ACTUALIZAR ACTUALIZAR

PUNTO DE PUNTO DE PUNTO DE


SINCRONISMO SINCRONISMO SINCRONISMO

LUW LUW

Backout Dinámico de transacciones

El programador de sistemas puede definir una tarea que actualiza uno o más de
los recursos protegidos del CICS como autorizada para el backout dinámico de
la transacción. En el momento en que la tarea modifica un recurso protegido, se
adquiere un buffer llamado log dinámico. Toda la actividad de la tarea que
afecta a un recurso protegido, se registra en el log dinámico con los fines de
volver atrás en caso de terminar anormalmente la tarea. El log dinámico se
mantiene hasta que la tarea termina, o hasta que éste emite un comando
SYNCPOINT. Al término de cada LUW, se borra el log, comenzando nuevamente
la registración a partir de su comienzo. Durante el procesamiento de terminación
anormal de la transacción se invoca un programa utilitario, responsable de volver
atrás los datos almacenados en el log dinámico. El log dinámico se libera en caso
de una terminación normal de la tarea. en la figura 5.3 puede observarse un
ejemplo de la actividad de una tarea y de la información registrada en el log
dinámico.

Página -144-
Fig.5-3.
Log Dinámico.

Log Dinámico
Actividad de la
tarea

Lee para Actualizar


REG 1 REG 1

Actualiza
REG 2 REG 1

(SOLO CLAVE)
Agrega
REG 3 REG 2

REG 4 Borra
REG 3
(SOLO CLAVE)

Agrega
DL/1 REG 4

Actualiza
DL/1

El programador de sistemas controla esta actividad, que es transparente al


programa de aplicación. El programa de aplicación sólo necesita ocuparse de la
emisión o no emisión del comando SYNCPOINT.

ABEND del Sistema

Al producirse un ABEND del sistema, en éste puede haber muchas tareas activas.
Algunas pueden estar actualizando recursos protegidos, otras no.
Toda tarea que haya arrancado pero no completado al producirse una ABEND
del sistema se llama tarea en vuelo. Si una tarea en vuelo estuviera accediendo
un recurso protegido al terminar anormalmente el CICS, habrá de eliminarse todo
efecto que la tarea haya tenido en el recurso. Esto debe ser así, puesto que no
puede determinarse cuándo ha tenido lugar el ABEND, La información con
pronósticos de restauración se registra en el log del sistema.

El log del sistema puede ser un archivo en cinta o en disco. Las actividades
registradas en este registro se determinan por los nombres de archivo y/o de cola
especificados por el programador de sistemas.

Página -145-
LOGGING

Es la registración de información que podría utilizarse posteriormente para


restaurar archivos. Cuando se especifica el logging, las tareas tienen el control
exclusivo de los recursos protegidos del CICS hasta el término de una Unidad
Lógica de trabajo.
La figura 5.4 ilustra un ejemplo de log del sistema y de las actividades que
pueden requerir eliminación.

Fig.5-4.
Log del Sistema.

Actividad del Sistema

Arranca
TAREA A

Pto. de Sinc. Lee REG 1


A para
REG 1 actualizar

agrega
A TS1 TS 1 Arranca
TAREA B

Pto. de Sinc. agrega


B TS 1
TD1

borra
B REG 2
REG 2
Arranca
TAREA C
Pto. de Sinc.
C agrega
REG 3 REG 3

actualiza
REG 1

Lee REG 4
para
actualizar
A REG 4

C Pto. de Sinc. Termina

Lee REG 5
B REG 5 para
actualizar

Caída del Sistema

La tarea A inicia y lee el registro 1 para actualizarlo. se guarda una copia del
registro 1 y se activa una señal de punto de sincronización. La tarea A agrega un
registro de Almacenamiento Temporario que también se guarda en el registro log
del sistema. Arranca la tarea B y se registran sus actividades. Si el sistema
terminara anormalmente, tal como puede verse en la figura 5.4, se lee hacia atrás
el log del sistema y se vuelven atrás las actividades de todas las tareas en curso.

La recuperación/rearranque es transparente al programa de aplicación. Como


programador de aplicación sólo necesita ocuparse de la longitud de una Unidad
Lógica de Trabajo, creando Unidades Lógicas de trabajo más pequeñas para
liberar los recursos protegidos.

Página -146-
JOURNALING

Journaling es la facilidad del CICS que registra datos que generalmente se usan
con propósitos de recuperación. Tanto el CICS como los programas de aplicación
pueden llevar un journaling.

Hasta aquí hemos hablado de volver atrás datos cuando tiene lugar una falla;
pero, puede aplicarse otro método de recuperación. Este método involucra tomar
una versión anterior de un archivo y volver a aplicarle las transacciones
corrientes.
Probablemente esté familiarizado con el método, ya que es la acción que
normalmente se toma para recuperar un sistema en batch.
Las transacciones, en un sistema batch, están completamente disponibles en
tarjetas, disco o cinta. No obstante, en un sistema en línea las transacciones son
ingresadas desde terminales, y no se dispone posteriormente de ellas salvo que
fueran asentadas en un journal. El programa de aplicación puede salvar
transacciones de entrada en un archivo de journal o archivo diario. Estas
transacciones, en caso de necesitarse de ellas, estarán disponibles
posteriormente para su recuperación.

En el sistema puede haber activos 99 journals a la vez. El programador de


sistemas define cada uno de los journals en la Tabla de Control de Journals,
siendo soportado cada uno de los journals como una tarea dentro del CICS. Los
archivos de journals son secuenciales y pueden residir en cinta o en disco. Una
vez creados, pueden ser procesados en línea o fuera de línea por un programa
del usuario.

JOURNALS Automáticos

El programador de sistemas puede especificar la grabación automática de


actividades en un archivo. En realidad, está ya familiarizado con este concepto ya
que el 'log del sistema' es el 'archivo de journal Nro.1', que es creado por el
'Programa de Control de Journals'. El CICS, además de log del sistema, puede
crear otros archivos de journal. Otros archivos de journal registran usualmente
datos a razón de un archivo por journal.

Una entrada de la Tabla de Control de Archivos especifica el número de journal


que corresponde a un archivo dado. Otra entrada de la Tabla de Control de
Archivos especifica el tipo de pedido que originará una entrada en el archivo de
journal. Por ejemplo, toda vez que se agregue al archivo un nuevo registro, el
programador de sistemas puede especificar en la FCT la registración en el
archivo de journal de una copia del registro agregado. Otras actividades contra el
archivo, tales como la eliminación, lectura o actualización de registros, pueden
grabar registros en el archivo de journal.
La figura 5.5 ilustra al archivo A con nuevos registros grabados en el archivo de
journal 4. El archivo B tiene registrados en el archivo de journal 17 nuevos
registros, eliminaciones y actualizaciones. El archivo C tiene toda su actividad
registrada en el archivo de journal 14.

Página -147-
Fig. 5-5.
Journal Automático.

Tabla de Control
de Archivos

Journal
Agrega Agrega Agrega Agrega Nro.4
Archivo A
REG 1 REG 10 REG 2 REG 5

Journal
Agrega Borra Actualiza Nro.4
Archivo B
REG 23 REG 19 REG 16

Journal
Nro.17

Archivo C Agrega Actualiza Actualiza Lee


REG 4 REG 27 REG 30 REG 37

Página -148-
Journal del Usuario

Además de los archivos de journal que puede crear el CICS, existen otros que
puede crear su programa de aplicación. Veamos un sistema de gestión de
inventarios. En el transcurso del día los operadores de terminal ingresan
transacciones que actualizan el archivo maestro de existencias. Estas
transacciones pueden ser despachos a los clientes, nuevos pedidos de éstos o
ítems recibidos de los vendedores. el operador de terminal puede ingresar la
siguiente información:

nro. de ítem cantidad importe vendedor


recibida
905VBI 200 4500 95876

Si las transacciones del día se salvaran en un archivo de journal, posteriormente


podrían producirse varios informes en un entorno fuera de línea o batch. Veamos
así otro uso de los archivos de journal, distinto al de la recuperación.

Comando Journal

Este formato general del comando que provoca la grabación de un registro en el


archivo de journal.

EXEC CICS JOURNAL JFIELD (data-value)

NUMERO DE
ARCHIVO JOURNAL
(desde2 hasta 99)

A continuación de la especificación del número del archivo de journal, se


especifica un número de opciones. estas son las opciones FROM y LENGTH:

FROM (data-area) LENGTH (data-value)

LONGITUD DEL
REGISTRO
NOMBRE DEL AREA QUE
CONTIENE EL REGISTRO

Además de los datos almacenados en 'data-área', el registro puede tener


asociado con él, un identificador de dos caracteres para identificar su origen. El
identificador se crea con la opción.

Página -149-
JTYPEID (data-value)

IDENTIFICADOR DEL
REGISTRO

Que hará que el registro de journal contenga el identificador y los datos.

REGISTRO JOURNAL

IDENTIFICACION
DEL REGISTRO DATOS

Para identificar adicionalmente el registro, con estas opciones puede


especificarse un prefijo.

PREFIX (data-area) PFXLENG (data-value)

LONGITUD DEL
PREFIJO
NOMBRE DEL AREA QUE
CONTIENE EL PREFIJO

El registro de journal contiene ahora la ID de tipo, un prefijo y datos:


REGISTRO JOURNAL

IDENTIFICACION
DEL REGISTRO PREFIJO DATOS

Al iniciarse un archivo de journal se le asigna un buffer. a medida que el


programa de aplicación emite comandos JOURNAL contra este archivo, los
registros de journal se almacenan en el buffer. Al llenarse el buffer , se los graba
en el archivo de journal, tal como puede observarse en la figura 5.6

Fig.5-6.
Buffer de Journal Completo.
(Grabación Física).

Journal Nro.14
Journal
Agrega Actualiza Lee Agrega O44
Nro.17
REG 34 REG 29 REG 24 REG 14

Journal Nº44

Página -150-
El programa de aplicación puede estar manipulando datos críticos y grabando
registros en un archivo de journal. Los registros se colocan en un buffer a la
espera de que se llene antes de que tenga lugar la grabación física. De 'caer' el
sistema, podrían perderse datos críticos en el archivo de journal ( en lugar de
esperar que se llene el buffer), el programador puede especificar la opción
STRATIO en el comando JOURNAL. Esta opción fuerza una grabación física
inmediatamente después del pedido JOURNAL que especifica STARTIO. Si se
especificara STARTIO para cada ejecución del comando, se pierden las ventajas
del buffer. Por lo tanto, deberá limitarse el uso de STARTIO.

Tal como acontece con otros comandos del CICS, con el comando JOURNAL
pueden producirse condiciones de excepción. Estas son las condiciones de
excepción que con toda probabilidad se encontrará Ud..

JIDERR: En la tabla de Control de Journal no se ha definido el número de ID


del archivo journal.

LENGERR: El registro es más grande que el buffer asignado al archivo de


journal.

NOTOPEN: No está disponible el archivo de journal.

IOERR: Tuvo lugar un error irrecuperable de entrada/salida y no se


completó la grabación física.

Comandos de fecha y hora

Administración de los tiempos y de las tareas

Las facilidades de Administración de los Tiempos y de las tareas del CICS dan al
programa de aplicación fácil acceso a :

 la hora y la fecha en las que se inicia una tarea


 la hora corriente
 la fecha corriente

Obtención de la hora

Al iniciarse una tarea se crea un EIB para ella. La hora en la que se inició la tarea
se transfiere al campo EIB para ella. La hora en la que se inició la tarea se
transfiere al campo EIBTIME del EIB.

Página -151-
CICS

EIB
HORA

EIBTIME

HHMMSS

La hora se almacena en decimal empaquetado en el formato HHMMSS. El


programa de aplicación puede consultarla en cualquier momento de la ejecución
de una tarea emitiendo el siguiente comando:

EXEC CICS ASKTIME

Esto colocará la hora actual en EIBTIME. Podría utilizar la hora actual para
'estampar la hora' de las actividades del CICS. Por ejemplo, cómo parte de los
registros de actualización de un archivo maestro podría disponerse en el registro
de un campo para la hora actual, o bien incluirse la hora actual en una pantalla
transmitida a la terminal.

Obtención de la fecha

La fecha, en el momento de crearse el EIB, se transfiere al campo EIBDATE:


CICS

EIB
FECHA

EIBDATE

YYDDD

La fecha está en formato 'juliano'. Se almacena en decimal empaquetado en


formato YYDDD. Tal como acontece con otros campos EIB, el campo EIBDATE,
puede ser accedido en cualquier momento durante la ejecución de la tarea. El
comando ASKTIME también actualiza el campo EIBDATE con la fecha actual.

Página -152-
Así, el comando EXEC CICS ASKTIME actualiza dos campos EIB. Típicamente,
al modificarse un campo EIBTIME, se restaurará el campo EIBDATE con la
misma fecha. Pero si se iniciara una tarea poco antes de medianoche y se
emitiera el comando ASKTIME después de medianoche, el campo EIBDATE
contendrá la nueva fecha.

FORMATTIME

Función
Transforma la fecha y hora absolutas dentro de un formato especificado.

Sintaxis del Comando

FORMATTIME-ABSTIME(data-area)
DATE (data-area) DATE FORM(data-area)

DATESEP DATECOUNT(data-area) DATEOFMONTH(data-area)


(data-value)

DATEOFWEEK (data-area) DDMMYY(data-area) DDMMYYYY(data-area) MMDDYY(data-area)

MMDDDYYYY(data-area) MONTHOFYEAR(data-area)

TIME(data-area) YEAR(data-area) YYDDD(data-area)


TIMESEP
(data-value)

YYDDMM(data-area) YYMMDD(data-area) YYYDDD(data-area) YYYYDDMM(data-area)

YYYYMMDD(data-area)
Conditions:
INVREQ

FORMATTIME transforma la fecha y hora absolutas en cualquiera de sus


diversos formatos. Normalmente, el argumento ABSTIME es el valor devuelto por
un comando ASKTIME ABSTIME.

Si los milisegundos llegan a 500 o mas, el retorno de segundos y, si es necesario,


el de los minutos y horas, son redondeados hacia arriba. Sin embargo, el día,
mes y año nunca son redondeados hacia arriba. No obstante, en el caso en que el
argumento ABSTIME contiene un valor representando el medio segundo anterior
a la medianoche, el redondeo no es ejecutado, y el parámetro TIME retorna a
23:59:59.

El siguiente ejemplo muestra el efecto de algunas de las opciones del comando.


Supongamos que “utime” contiene el valor 002837962864828 en milisegundos.

Página -153-
EXEC CICS ASKTIME (utime)
EXEC CICS FORMATTIME ABSTIME (utime)
DATASEP ( ‘-‘ ) DDMMYY (date)
TIME (time) TIMESEP

Esto da el valor 06-12-89 para la “fecha” y 19:01:05 para la “hora”.

Para obtener un periodo de tiempo en un formato particular, el valor ABSTIME


puede ser diferente entre dos valores devueltos por ASKTIME, y opciones tales
como DAYCOUNT (d) y TIME (t) pueden ser especificadas.

Opciones Formattime
ABSTIME (data-area) especifica el valor para la hora, empaquetado en forma
decimal, desde las 00:00 horas del 1 de Enero de 1900 (en milisegundos
redondeados al mas próximo centésimo de un segundo) que es convertido en un
formato alternativo.

El formato del parametro es:

COBOL: PIC S9(15) COMP-3


C: char data_ref[8] ;
PL/I: FIXED DEC(15) ;
ASM: PL8

DATE (data-area) determina la variable que recibe la fecha en el formato


especificado en el parámetro de iniciación del sistema DATFORM. El retorno del
valor es en formato de 8 caracteres. Normalmente esta opción se usa solo
cuando es necesario exponer una fecha. Cuando es necesario analizar una fecha,
esta debe ser solicitada en forma explícita, por ejemplo, usando la opción
MMDDYY.

DATEFORM (data-area) especifica el formato de la fecha definida por la


instalación. CICS devuelve YYMMDD, DDMMYY, o MMDDYY (seis caracteres) de
acuerdo con el parámetro de iniciación del sistema DATFORM.

DATESEP (data-value) especifica el carácter a ser insertado como separador


entre el año y el mes, y entre el día y el mes; o entre el año y el día si la forma
YYDDD es especificado.

DAYCOUNT (data-area) devuelve el numero de días desde el 1 de Enero de


1900 (día 1), como un numero binario fullword. Esto es útil si es necesario
comparar el día actual con una fecha anterior que, por ejemplo, ha sido
almacenado en una base de datos.

DAYOFMONTH (data-area) devuelve el numero del día en el mes como un


numero binario fullword.

DAYOFWEEK (data-area) devuelve el numero relativo al día de la semana como


un numero binario fullword: Domingo=0, Sabado=6. Este numero puede ser
convertido en el nombre del día de la semana en cualquier idioma.

Página -154-
DDMMYY (data-area) especifica en forma de día/mes/año el campo de usuario
de 8 caracteres donde CICS devuelve la fecha (por ejemplo, 21/10/95).

DDMMYYYY (data-area) especifica en forma de día/mes/año el campo de


usuario de 10 caracteres donde CICS devuelve la fecha (por ejemplo,
17/06/1995).

MMDDYY (data-area) especifica en forma de mes/día/año el campo de usuario


de 8 caracteres donde CICS devuelve la fecha (por ejemplo, 10/21/95).

MMDDYYYY (data-area) especifica en forma de mes/día/año el campo de


usuario de 10 caracteres donde CICS devuelve la fecha (por ejemplo,
11/21/1995).

MONTHOFYEAR (data-area); “data-area” determina el numero relativo al mes


del año como un numero binario fullword (Enero=1, Diciembre=12). En el
programa de aplicación este numero se puede convertir en el nombre del mes en
cualquier idioma.

TIME (data-area); “data-area” determina la hora actual en forma hh:mm:ss como


un campo de 8 caracteres, donde el separador es especificado por la opcion
TIMESEP.

Sin embargo, si los milisegundos llegan a 500 o mas, el retorno de segundos y, si


es necesario, el de minutos y horas puede ser redondeado hacia arriba. No
obstante, el día, mes y año nunca son redondeados hacia arriba.

TIMESEP (data-value) especifica el carácter que será usado como separador en


la devolución de la hora. Si se omite esta opción, no se asume separador y se
devuelven los 6 bytes en un campo de 8 caracteres. Si se omite “data-value”, dos
puntos (:) son usados como separador.

YEAR (data-area) especifica los números de 4 dígitos del año como un numero
binario fullword (por ejemplo, 1995, 2001).

YYDDD (data-area) especifica en forma año/día el campo de usuario de 8


caracteres donde CICS devuelve la fecha (por ejemplo, 95/301).

YYDDMM (data-area) especifica en forma de año/día/mes el campo de usuario


de 8 caracteres donde CICS devuelve la fecha (por ejemplo, 95/10/21).

YYYYDDD (data-area) especifica en forma año/día el campo de usuario de 8


caracteres donde CICS devuelve la fecha (por ejemplo, 1995/200).

YYYYDDMM (data-area) especifica en forma año/día/mes el campo de usuario


de 10 caracteres donde CICS devuelve la fecha (por ejemplo, 1995/21/06).

YYYYMMDD (data-area) especifica en forma de año/mes/día el campo de


usuario de 10 caracteres donde CICS devuelve la fecha (por ejemplo,
1995/06/21).

Página -155-
Condición FORMATTIME
INVREQ aparece si la opción ABSTIME es una forma incorrecta (RESP2=1).

Acción default: termina la tarea anormalmente

Módulo VI

Funciones del BMS


Ud. ya aprendió a transmitir y recibir mensajes cortos, no formateados.

LAX235
492

Si hubiera deseado disponer los datos de salida de modo que aparecieran en la


mitad de la pantalla.

LAX235
492

Qué debiera haber hecho en la corriente de datos de salida de su programa de


aplicación? De la información técnica que hasta aquí hemos presentado podría
adoptar dos enfoques: construir una corriente de datos no formateada con
suficientes blancos delante de los datos como para colocarlos en la mitad de la
pantalla.

BLANCOS LAX235 BLANCOS 492

Corriente de datos

Página -156-
O, crear una corriente de datos formateada utilizando caracteres de control
dependientes del dispositivo para colocar cada uno de los dos campos en sus
lugares adecuados.

CARACTERES DE CARACTERES DE
LAX235 492
CONTROL CONTROL

Corriente de datos

De las dos soluciones, la segunda es la mejor, pero aún no muy deseable. Si en


un programa de aplicación se crearán corrientes de datos con caracteres
dependientes de dispositivo, el programa, luego podría comunicarse sólo con un
tipo de terminal. Si en la red tuviera más de un tipo de terminal quizá necesite
duplicar programas para comunicar la misma información a diferentes tipos de
terminal.

Si se cambiaran las terminales de la red, deberían modificarse los programas de


aplicación para reflejar el nuevo 'hardware'. Si cambiara el formato de la pantalla
(por ejemplo, si se llevara un campo dado a una posición diferente) deberían
modificarse los programas de aplicación.

El BMS atiende los problemas que acabamos de describir e independiza al


programa de aplicación de:

 el tipo de terminales usadas en la red (independencia de dispositivo)


 el formato de representación de los datos (independencia de formato)

El BMS actúa como una 'interfase' entre sus programas de aplicación y el


Programa Control de Terminales (TCP), que es responsable de la comunicación
física con las terminales.

Independencia de dispositivos

El BMS le permite escribir programas de aplicación sin ocuparse de las


características físicas de las terminales de la red. El BMS prepara el mensaje a
transmitir insertando los pertinentes caracteres de control en base al tipo de
terminal que se esté utilizando. En la fig.6.1 se muestra este concepto.

Página -157-
Fig. 6-1.
Interfase BMS

Programa de aplicación TCT

campo 1

campo 2 TCTTE

BMS

Caracteres Caracteres
Campo 1 Campo 2
de Control de Control

TCP

Independencia de Formato
El BMS también le permite escribir programas de aplicación sin ocuparse de la
posición física de los campos de datos al ser desplegados. En su programa de
aplicación usará nombres simbólicos para referenciar los campos.
El BMS relaciona el rótulo con la posición real de la pantalla por medio de tablas
llamadas mapas físicos y mapas simbólicos de descripción.

Página -158-
Mapas físicos

Un mapa físico describe el formato de la representación de un tipo de terminal


dada. Adopta la forma de una tabla que contiene la siguiente información:

 Longitud y ubicación de los campos datos


 Atributos de los campos datos (por ejemplo, protegidos, de doble brillo)
 Constantes (encabezamientos, información decriptiva)
 Características de las terminales

Cada una de las tablas se almacena en la Biblioteca de Carga (OS/VS) Load


Library o en la Biblioteca a Imagen de Núcleos (DOS/VS) Core Image Library.

Conjuntos de Mapas

(MAPSET)

Un conjunto de mapas (MAPSET) es uno varios mapas que se definen para un


tipo de terminal. Usualmente los mapas se agrupan porque una aplicación o
aplicaciones afines utilizan todos los mapas del conjunto. Cuando se necesita un
mapa en particular, el programa debe identificar el conjunto de mapas que lo
incluye. Luego, al emitirse el primer comando que se refiere al mapa y al conjunto
de mapas, el CICS carga el conjunto de mapas en su memoria dinámica, salvo
que estuviera ya en memoria.

Para el CICS, un conjunto de mapas se considera como si fuera un programa.


Por este motivo, en la PPT se incluye información de control sobre el conjunto de
mapas.

Si en más de un tipo de terminal hubiera de usarse el mismo formato de


representación, se construye un mapa físico (conjunto de mapas) para cada tipo
de terminal. Los conjuntos de mapas se construyen utilizando un nombre
genérico (1 a 7 caracteres). Su programa de aplicación utiliza el nombre de
genérico para identificar al conjunto de mapas necesario para formatear o
analizar un mensaje.
El BMS agrega al nombre genérico del conjunto de mapas un sufijo que identifica
el tipo de terminal, permitiendo así la selección del conjunto adecuado de mapas
físicos, tal como puede observarse en la figura 6.2.

Página -159-
Fig.6-2.
Mapas Físicos.

Partición/Región CICS
Biblioteca de
programas
TCTTE

Tipo de
Terminal BMS
Mapset
3270

Programa de
Aplicación Mapset
3767

a
rg
ca
Mapset
Nombre Mapa MAP (MAPSET) 3780
Nombre Mapset Asociado con el
tipo de terminal

3780
3767

3270

A modo de ejemplo del uso de un nombre genérico, supongamos que su


programa hace referencia a un mapa llamado MAP1 del conjunto de mapas
MAPSET1, tal como se ilustra en la figura 6.3. Supongamos que al nombre del
conjunto de mapas se agrega el sufijo M (por IBM 3278-2). de la misma manera,
se agrega el sufijo P al nombre del conjunto de mapas para la IBM 3767.
(Advierta que su programa de aplicación sólo referencia el nombre genérico del
conjunto de mapas, no el sufijo).

Supongamos que la tarea T1, asociada a través de su TCTTE con una IBM 3278,
Modelo 2, quiera usar su programa. Si el mapa no estuviera ya en el
almacenamiento, el BMS pide la carga de un conjunto de mapas conocido al
CICS como MAPSET1M en su memoria dinámica. Otra tarea, T2, asociada a
través de su TCTTE con una IBM 3767 también llama a su programa. El conjunto
de mapas cargado (de no estar ya en el almacenamiento) es, en este caso,
MAPSET1P.

Página -160-
Fig.6-3.
Dos mapas físicos
para el mismo formato de
representación y dos tipos de terminal
Partición/Región CICS

BMS

Tarea T1
TCT

MAP1M SUFIJO M
Programa de TCTTE
Aplicación

TERMINAL 3278 MODELO 2

MAP1
MAP1P
SUFIJO P

TCTTE
TERMINAL 37672
Tarea T2

Un mapa físico puede consistir totalmente de constantes, tal como un mensaje al


operador.

MENSAJE AL OPERADOR

EL ARCHIVO MAESTRO DE PERSONAL


VA A SER RETIRADO DE SERVICIO
A LAS 15 HS.

NO INGRESE MAS TRANSACCIONES DE


PERSONAL

La corriente de datos creada por el BMS en el Area de Entrada/Salida de Terminal


(TIOA) aparecería de la siguiente manera:

Página -161-
Corriente de datos

CC MENSAJE AL OPERADOR CC EL ARCHIVO MAESTRO DE PERSONAL CC


a las
VA A SER RETIRADO DE SERVICIO CC 15 hs. CC NO INGRESE MAS TRANSACCIONES CC

DE PERSONAL CC (CC= CARACTERES DE CONTROL)

En este ejemplo, el mapa suministra toda la información, y el programa de


aplicación no provee dato alguno.

También puede definirse un mapa como una combinación de constantes y de


datos. En el siguiente ejemplo ESTADO DE EXISTENCIAS, ITEM NRO. y EN
ESTANTERIAS: son constantes. LAX810 y 325 son variables de datos provistas
por el programa.

ESTADO DE EXISTENCIAS

ITEM NRO: LAX810

EN ESTANTERIAS:325

La corriente de datos creada por el BMS sería esta:

Corriente de datos

CC ESTADO DE EXISTENCIAS CC ITEM NUMERO CC LAX810 CC

EN ESTANTERIAS CC 325 CC

(CC= CARACTERES DE CONTROL)

En la entrada, el BMS elimina todos los caracteres de control y constantes y


coloca sólo los datos en la memoria de trabajo del programa de aplicación.

En la salida, el BMS espera que el programa le provea la fecha en la memoria de


trabajo del programa. El área que contiene los datos se define mediante un
mapa simbólico.

Bajo el BMS, los mapas físicos y simbólicos se generan en forma batch mediante
macroinstrucciones de tipo ASSEMBLER. Los mapas físicos se almacenan en la
biblioteca de programas y cargan al inicializarse el CICS o cuando se necesita de

Página -162-
ellos. Los mapas simbólicos se almacenan en la biblioteca de programa fuente y
copian en el programa de aplicación.

Mapas simbólicos

Los mapas simbólicos definen todos campos de datos variables. El mapa


simbólico se copia en la memoria de trabajo de un programa; todos los campos
definidos están, así, a disposición del programa por su nombre. Los datos
descriptos por el mapa simbólico pueden representarse en uno de los siguientes
tres formatos:

 Formato FIELD (por campos)

Los datos se presentan por ítem individual. Cada uno de los ítems de datos es
precedido por:

- Dos bytes que indican la longitud de datos


- Un byte que define el atributo de los datos a representar en el campo.

El byte de 'atributo' especifica características tales como la intensidad con la cual


ha de representarse el campo.

Nota: Un byte indicador activado durante las operaciones de entrada ocupa el


mismo lugar que el byte de atributo. Se activa esta señal si el operador usa la
tecla ERASE EOF de la 3270 para borrar todos los datos de un campo en
particular. El byte indicador se usa raramente en el procesamiento de programas
de aplicación.

El formato FIELD se muestra en la siguiente ilustración:

FORMATO POR CAMPOS

LL A DATOS LL A DATOS

CARACTER DE ATRIBUTO

LONGITUD DE DATOS

 Formato BLOCK (bloques)

Los datos se presentan como segmentos de una línea. Cada una de las líneas se
presentan con el formato con que aparecerá en la terminal, incluso los blancos de
relleno. el atributo se define para cada segmento de línea.

FORMATO POR BLOQUES

A DATOS A DATOS

BLANCOS

CARACTER DE ATRIBUTO
Página -163-
Este formato se usa generalmente para la entrada de terminales de un tipo
impresora/teclado.

 Formato TEXT (Texto)

Tal como lo indica su nombre, este formato se usa en procesamiento de textos.


Los datos se representan como una corriente continua de caracteres que el BMS
divide en segmentos de una línea de longitud. el programador puede realizar un
formato adicional insertando caracteres especiales en las corrientes de datos. A
esto se llama Procesamiento de Textos .

El formato FIELD es el más común en las terminales de representación e


impresora IBM 3270. En el material que sigue se usarán los datos presentados en
el formato FIELD.

Para direccionar cada uno de los ítems del área de trabajo se crea un conjunto de
nombres simbólicos para los campos a acceder. Por ejemplo, al crear un mapa
simbólico, se define un campo de datos variables rotulado FLD1.

FLD1L para direccionar el campo longitud


FLD1A para direccionar el campo byte de atributo
FLD1F para direccionar el byte de señal
FLD1I para direccionar el campo de datos de entrada
FLD1O para direccionar el campo de datos de salida

FLD 1

LL A DATOS

FLD11 ó FLD10

FLD1A ó FLD1F

FLD1L

Así, los datos de entrada o de salida están a disposición del programa de


aplicación en el campo FLD1I o en el campo FLD1O. El byte de atributo está
disponible en el campo FLD1A y el programa de aplicación puede modificarlo
antes de una operación de salida. La longitud de los datos está en el campo
FLD1L y el programa de aplicación puede consultarla después de una operación
de entrada.

Este conjunto de nombres simbólicos integra el mapa simbólico. Uno o más


mapas simbólicos forman un conjunto de mapas (MAPSET). El conjunto de
mapas se almacena en una biblioteca fuente. Para definir el área de trabajo de
datos de su programa de aplicación simplemente incluye el mapa simbólico en el
momento de compilarse el programa.

Página -164-
Creación de conjuntos de

Mapas físicos y simbólicos.


La preparación de un mapa constituye un trabajo y escribir un programa que lo
utilice es otro trabajo. Hasta aquí ha aprendido a utilizar los comandos para
comunicarse con el CICS. También dispone de comandos cuando usa las
funciones de entrada/salida del BMS. No obstante, para crear conjuntos de
mapas físicos y simbólicos debe usar 'macro instrucciones' escritas según macro
instrucciones las reglas del lenguaje Assembler, formateadas tal como puede
verse en la figura 6.4.

Fig.6-4.
Sintaxis de las Macros.

COLUMNA 1
POR LO MENOS UN BLANCO COLUMNA 71 COLUMNA 72

SIMBOLO CODIGOS DE OPERACION


PARAMETROS CARACTER DE
(SEPARADOS POR COMAS UN BLANCO CONTINUACION
PARAMETROS ADICIONALES DENOTA FIN DE PARAMETROS)
(LA LINEA A SE CONTINUADA DEBE
TERMINAR CON UNA COMA O CARACTER
DE CONTINUACION EN LA COLUMNA 72)

COLUMNA 16

Un conjunto de mapas está formado por uno o más mapas, definiendo cada
mapa un conjunto de campos.

Para definir mapas y conjuntos de mapas se usan tres tipos de macro


instrucciones:

* DFHMSD Define el conjunto de mapas (MAPSET)


* DFHMDI Define cada mapa
* DFHMDF Define cada uno de los campos del mapa

La figura 6.5 muestra cuatro mapas definidos en un conjunto de mapas.

Página -165-
Fig. 6-5.
Ejemplo de Conjunto
de Mapas.

DFHMDI .....
MAP 1 DFHMDF.....
DFHMDF.....
DFHMDF.....

DFHMDI .....
DFHMDF.....
MAP 2 DFHMDF.....

DFHMDI .....
MAP 3 DFHMDF.....
DFHMDF.....
DFHMDF.....

DFHMDI .....
DFHMDF.....
MAP4 DFHMDF.....
DFHMDF.....
DFHMDF.....
DFHMDF.....

En la figura, la macro DFHMSD define el comienzo del conjunto de mapas.


La macro DFHMDI define el comienzo de un mapa. El primer mapa (MAP1) tiene
tres campos definidos, se codifica una macro DFHMDF por cada campo.

La segunda macro DFHMDI define el comienzo del segundo mapa (MAP2) del
conjunto de mapas. Dos macros DFHMDF definen los campos del segundo
mapa. El tercer mapa es definido por la macro DFHMDI seguida de tres macros
DFHMDF. El cuarto mapa es definido por la macro DFHMDI seguida de cinco
macros DFHMDF. Finalmente, se define el fin del conjunto de mapas con la
segunda macro DFHMSD.

Con la excepción de un parámetro, se usa el mismo juego de macro instrucciones


para crear el conjunto de mapas físico y su conjunto de mapas simbólico
asociado. El parámetro TYPE de la macro DFHMSD indica al BMS el tipo de
mapa a generar:

TYPE= MAP Crea un conjunto de mapas físico


TYPE= DSECT Crea un conjunto de mapas simbólico

También se usa el parámetro TYPE para indicar el fin de la definición del


conjunto de mapas:

TYPE= FINAL

Si la entrada especifica DFHMSD TYPE = MAP para generar un mapa físico.

Página -166-
Puede usarse la misma entrada para generar el mapa simbólico reemplazando
MAP por DSECT. Algunos parámetros de las macros son únicos para crear el
mapa físico mientras que otros lo son para crear el mapa simbólico.
Cuando en ambas operaciones use la misma entrada, durante la generación del
mapa físico se ignorarán los parámetros que no pertenezcan al mapa físico, los
parámetros que no pertenezcan al mapa simbólico se ignorarán durante la
generación del mapa simbólico.

Los mapas físicos y simbólicos pueden crearse y almacenarse en las pertinentes


bibliotecas como parte del mismo trabajo. Este proceso se explica en el 'System
Programmer's Guide (DOS/VS y OS/VS)'. La figura 6.6 da cuenta de los pasos
necesarios para generar mapas físicos y simbólicos.

Fig.6-6.
Generación de mapas
no interactiva.

Página -167-
DFHMSD DFHMSD
TYPE : MAP TYPE : DSECT

BMS BMS

MAPA MAPA
FISICO SIMBOLICO Programa
Fuente

Traductor de
Comandos

Biblioteca de Carga
(OS/VS)
Biblioteca Fuente
Biblioteca Core
Image (DOS/VS)
Assembler o
Compilación

Biblioteca de Carga
(OS/VS)
Biblioteca Core
Image (DOS/VS)

Para definir mapas u conjuntos de mapas se usan tres tipos de macro


instrucciones:

DFHMSD: que define el conjunto de mapas (MAPSET)


DFHMDI: que define el (los) 'mapa(s) individual(es) ' dentro del conjunto de
mapas.
DFHMDF: define el (los) campos dentro del mapa.

Definición de conjunto de

Mapas Macro DFHMSD

Página -168-
Para nombrar y describir las características de un conjunto de mapas se usa la
macro instrucción DFHMSD.
La figura 6.7 señala los parámetros

Página -169-
Fig.6-7.
Macro DFHMSD.

DSECT
NOMBRE DEL MAP
CONJUNTO DE DFHMSD TYPE= FINAL
MAPAS (1a7)

IN
OUT
,MODE= INOUT

ASM
COBOL
,LANG=
PLI

,TERM=type DEFAULT
BLUE
RED
PINK
,COLOR= GREEN
TURQUOISE
YELLOW
NEUTRAL

,CTRL=PRINT,L40,FREEKB,ALARM,FRESET)
L60
L80
HONEOM

FIELD
,DATA= BLOCK

NO
,EXTATT= MAPONLY
YES
OFF
,HILGHT= BLINK
REVERSE
UNDERLINE
BASE
,PS= psid

,SUFFIX=n
¦NO
,TIOAPFX=
¦SI

,STORAGE=AUTO

,VALIDN=(MUSTFILL,MUSTENTER)

Página -170-
* TYPE=MAP Para crear un conjunto de mapas físicos
DSECT Para crear un conjunto de mapas Simbólicos
FINAL Fin de una descripción del conjunto de mapas
* MODE=IN Conjunto de mapas a usar en representaciones de entrada
OUT Conjunto de mapas a usar en representaciones de salida
INOUT Conjunto de mapas a usar en representaciones de entrada/salida

Supongamos que FIELD1 es el nombre de un campo variable descripto en el


conjunto de mapas físico. En el conjunto de mapas simbólico asociado.

IN produce campo IFELF1L(longitud)


FIELD1F (señal)
FIELD1I (datos de entrada)
OUT produce campos FIELD1A (características)
FIELD1O (datos de salida)

INOUT produce una combinación de todos los nombres

 LANG= ASM
COBOL en función del lenguaje del programa fuente
PL/I (este parámetro es necesario para la creación del conjunto de
mapas simbólico).
 DATA= Especifica si los datos del área de trabajo del programa está en
formato FIELD o en formato BLOCK para todo el conj. de mapas.

Si se omitiera este parámetro , se asume DATA=FIELD.


 TERM= Define el tipo de terminal para el conjunto de mapas.
Por ejemplo, TERM=3270-2 define a la IBM 3278 Modelo 2.

 COLOR= Especifica el color por defecto para todos los campos, en todos los
mapas en el conjunto de mapas.
Puede ser reemplazado especificando la opción COLOR en las
macros DFHMDI y DFHMDF.
 CTRL= Define las características de la terminal a asociar con el conjunto
de MAPSET el momento de la salida. En operaciones de
impresora se
usan PRINT, Lnn y HONEOM.

PRINT Inicia la operación de impresión. Si se omitiera este parámetro, los


datos se almacenan en un buffer pero no se imprimen.
L40

L60 Define la longitud de la línea impresa.

L80

HONEOM La longitud de la línea depende del carácter nueva línea (NL) o


fin de mensaje (EOM) que el programa de aplicación debe insertar
en los campos representables del mensaje.

Adviértase que sólo puede especificarse uno de los cuatro parámetros


(L40,L60,L80 o HONEOM).

Página -171-
FREEKB Requiere el desbloqueo del teclado para permitir al operador el
ingreso de un mensaje. Si no se especificara este parámetro, el operador
necesitará usar la tecla RESET en la 3270 para habilitar la entrada de datos.

ALARM Requiere que suene la señal de alarma 3270.

FRSET Restaura el Indicador de ' Datos Modificados (MDT) de todos los


campos datos cuyo MDT esté activo.

 EXTATT= Especifica si son soportados los atributos extendidos (COLOR,


HILIGTH,PS y VALIDN)

OFF No se usa ningún doble brillo

MAPONLY Permite que sean usados en un mapa los atributos


extendidos, los programas de aplicación no pueden modificar los
campos de atributos extendidos

YES Especifica que los atributos extendidos pueden ser


especificados en un mapa y que el programa de aplicación puede
modificarlos dinámicamente.

 HILIGHT= Especifica el atributo de doble brillo para todos los campos


en todos los mapas en un conjunto de mapas.

OFF No se usa ningún doble brillo

BLINK Se puede especificar que los campos se iluminen y se


apaguen

REVERSE Se destacan en contraste con el fondo

UNDERLINE Los campos pueden ser especificados como


subrayados

 PS= Especifica que son utilizados símbolos programados

BASE

psid

 SUFFIX= El sufijo de un solo carácter generado por el BMS y al conjunto de


mapas

TIOAPFX=YES. Se usa este parámetro si TYPE=DSECT. El BMS


inserta 12 bytes al comienzo del mapa simbólico. Esto se hace para
saltar sobre 12 bytes de información de control que preceden a los
datos del buffer de terminales CICS. Este concepto se ilustra en la
figura 6.8. En un programa a nivel de comando, especifique
siempre TIOAPFX=YES.

Página -172-
Fig.6-8.
Propósito del parámetro
TIOAPFX.

INFORMACION DE
TIOA LL A DATOS 1 LL A DATOS 2
CONTROL

12 BYTES

AREA DE
TRABAJO DEL LL A DATOS 1 LL A DATOS 2
PROGRAMA
(TIOAPFX=YES)
12 BYTES

 STORAGE=AUTO Los mapas simbólicos que pertenecen a un conjunto de


mapas se definen de la siguiente manera:

COBOL Definidos como áreas de memoria separadas cuando se los copia


en la WORKING-STORAGE SECTION.

PL/I Definidos como memoria AUTOMATIC

ASSEMBLER Definidos como áreas de memoria separadas cuando se los


copia en el programa

 VALIDN Controla el ingreso al campo

MUSTFILL Especifica que los campos de ingreso deben ser


completadas con datos. El cursor no puede moverse de un campo
incompleto y los datos no pueden ser trasmitidos de datos
incompletos.

MUSTERNDER Especifica que los datos deben ser ingresados en


los campos. El campo vacío no puede ser salteado por el cursor.

Definición de mapas

Macro DFHMDI

La macro instrucción DFHMDI nombra y describe las características de un mapa


específico. En un conjunto de mapas dado, ha de haber una macro DFHMDI por
cada mapa. Puesto que la descripción es de aplicación a un mapa de un conjunto
de mapas, requiere el nombre del mapa.

Página -173-
Fig.6-9.
Macro DFHMDI.

NOMBRE DEL
MAPAS (1a7) DFHMDI SIZE=(LINE,COLUMN)

,LINE=1 TO 240

,COLUMN=1 TO 240

LEFT
,JUSTIFY= RIGHT

FIELD
,DATA= BLOCK
DEFAULT
BLUE
RED
,COLOR= PINK
GREEN
TURQUOISE
YELLOW
NEUTRAL

OFF
,HILIGHT= BLINK
REVERSE
UNDERLINE
BASE
,PS= psid

,VALIDN=(MUSTFILL,MUSTENTER)

La macro DFHMDI puede usarse para invalidar las especificaciones TIOAPFX,


DATA COLOR, HILIGHT, PS y VALIDN de la macro DFHMSD.

 SIZE= Especifica (por líneas y columnas) el área de la pantalla definida por


este mapa. Las dimensiones van de 1 a 140.
 LINE= Define la posición del mapa en la pantalla.
 COLUMN= Las columnas se cuentan desde los márgenes izquierdo o
derecho, en función del parámetro JUSTIFY.
 JUSTIFY=LEFT alinea el mapa a la izquierda de la pantalla. RIGHT aliena el
mapa a la derecha de la pantalla. Si se omitiera JUSTIFY, se supone
JUSTIFY=LEFT.

La figura 6.10 ilustra el posicionamiento del mapa en la pantalla.

Página -174-
Fig.6-10.
Macro DFHMDI .
Ejemplo 1.
COLUMNA 5

MAPA
LINEA 10

SIZE=(12,20)
LINE=10
COLUM=5

12
JUSTIFY:LEFT

20

La figura 6.10 ilustra otro ejemplo del uso de la macro DFHMDI. Obsérvese que
las especificaciones son las mismas que en la figura 6.9, salvo en que la
representación se alinea a la derecha.
Fig.6-11.
Macro DFHMDI.
Ejemplo 2.
COLUMNA 5

MAPA
LINEA 10
LINEA 10

SIZE=(12,20)
LINE=10
COLUM=5
12

JUSTIFY:RIGHT

20

Página -175-
Definición de campos

Macro DFHMDF

Antes de examinar los parámetros de la macro DFHMDF observemos la figura


6.12. Adviértase la información que requiere esta pantalla. cada uno de los
campos ha de definirse con una macro DFHMDF.

Fig.6-12.
Requerimientos de campos.
UBICACION DEL CAMPO

*DATOS VARIABLES

() DESCRIPCION
CAMPOS CIERRE DE
PROTEGIDOS () NUMERO DE PIEZA CAMPOS

() CANTIDAD

CAMPOS NO PROTEGIDOS

El primer campo del mapa es un cambio variable de datos al cual el programa


transfiere datos. El segundo campo, DESCRIPCION, es una constante. Todas las
constantes se definen como campos protegidos para impedir que el operador
tipee datos en estas posiciones de la pantalla. El tercer campo no está protegido
y el cursor se coloca en su comienzo. El operador tipea datos en el campo. Para
delimitar el campo entrada de datos, se ha definido un parador de campo
(STOPPER) al término del campo como un campo de salto automático. Cuando
el operador tipea la descripción y el cursor está en la posición del atributo de este
campo, el cursor saltará al siguiente campo no protegido de la pantalla. Es aquí
donde ingresará el número de matrícula.

La macro DFHMDF define los varios campos que constituyen un mapa. Ha de


haber una macro DFHMDF por campo. Los parámetros se ilustran en la figura
6.13.

Página -176-
Fig. 6-13.
Macro DFHMDF.

NOMBRE DEL
CAMPO
(1a7 Caracteres opcional) DFHMDF POS=(LINE,COLUMN)

,ATTRB=(

,INITIAL='CONSTANTS'

,LENGTH= 1 to 256

,PICIN='VALUE'

,PICOUT='VALUE'

,JUSTIFY=

,GRPNAME= GROUP NAME

,OCCURS=NUMBER OF OCCURENCES

,COLOR=

,HILIGHT=

,PS=

,VALIDN=(MUSTFILL,MUSTENTER)

La macro DFHMDF puede ser utilizada para reemplazar las especificaciones


COLOR, HILIGHT, PS y VALIDN en las macros DFHMSD y DFHMDI.

Página -177-
 FIELD NAME (nombre del campo) - parámetro opcional que permite la
identificación de un campo y que contiene datos variables. Los campos que
contienen constantes se definen pero no es necesario asignarles nombres.
En la descripción de los mapas simbólicos se generan solamente rótulos
para los campos que tengan nombres asignados.
 POS= Define la posición del byte de atributo relativo al mapa, no a la
pantalla física. POS se expresa como un número de línea y columna dentro
del mapa. por ejemplo:

(PANTALLA)
COLUMNA 5

(MAPA)
PANTALLA
COLUMNA 2
LINEA 10

(MAPA)
LINEA 6
0 CAMPO 1

POS=(6,2)

Los campos deben definirse en secuencia de arriba hacia abajo y de izquierda a


derecha.

CAMPO 1 CAMPO 2

CAMPO 3

CAMPO 4

CAMPO 5

* LENGTH= Define la longitud del campo que puede ser de 1 a 256 caracteres
sin contar el byte de atributo.

* ATTRIB= Define las características de cada uno de los campos, a saber:

ASKIP El cursor salta automáticamente el campo.

PROT El operador de terminal no puede modificar el campo.

Página -178-
UNPROT Campo no protegido, campo en el cual el operador ingresa datos en
el momento de la entrada.

NUM Los datos de este campo han de intensificarse al ser representados


en la pantalla

NORM Brillo normal en la representación

DRK No han de representarse o imprimirse

IC Insertar el cursor en la primer posición de este campo. Se usa IC


sólo en la macro DFHMDF del 'primer' campo no protegido en el
que el operador tipea datos. si se omitiera este parámetro, el cursor
se posiciona en la línea 1, columna 1 de la pantalla.

FSET Cuando se leen datos de entrada, solamente se transmiten a la


CPU los campos de datos modificados. Para forzar la lectura de un
campo cuyo contenido no ha sido modificado por el operador,
puede usar este parámetro para activar el MDT.

DET Puede usar el lápiz luminoso para seleccionar los varios ítems de
datos que quiere usar en el programa. Los ítems de datos fueron
inicializados a estar a las siguientes reglas:

 Si el primer carácter fuera '?' el campo es un campos detectable con demora,


esto es, los datos se transmiten en el momento de pulsarse la tecla ENTER.
 Si el primer carácter fuera un blanco, el campo es un campo detectable de
inmediato, que provoca la transmisión desde terminal.

El BMS provee la siguiente información para ambos tipos de campos detectables


a lápiz. En el área de trabajo, definida por el mapa simbólico, se asigna cuatro
bytes a cada uno de los campos que pueden ser detectados por el lápiz luminoso,
tal como se muestra en la siguiente ilustración.

LL A

UN BYTE DE DATOS
VALOR=X'FF'SI EL CAMPO FUE DETECTADO
VALOR=X'00'SI NO FUE DETECTADO

CARACTER DE ATRIBUTO

CAMPO DE LONGITUD DE DOS POSICIONES

Cuando se define un mapa como de entrada (MODE=IN), DET es de aplicación


sólo a campos detectables de inmediato. En ese caso, sólo se reconocen los
parámetros DET y NUM, se ignoran todos los otros parámetros.

Si se omitiera el parámetro ATTRB, se asigna al campo el atributo ASKIP.


Si se codificara una cualquiera de las opciones ATTRB, los presupuestos del
campo son UNPROT y NORM, además del atributo 1 especificado.

Página -179-
* JUSTIFY= Salvo que especificara otra cosa, los campos de datos colocados
por el BMS en el área de trabajo de un programa se alinean de la
siguiente manera:

 A la derecha si los datos son numéricos (NUM), usándose ceros para


rellenar el campo a la izquierda.
 A la izquierda si los datos son alfanuméricos (NUM no especificado),
usándose blancos para rellenar el campo a la derecha.

JUSTIFY le permite especificar la manera de alineación que desea y también los


caracteres de relleno a saber:

 LEFT para alineación a la izquierda


 RIGHT para alineación a la derecha
 BLANK y ZERO especifican caracteres de relleno

* INITIAL= Para inicializar un campo, el valor deseado debe estar entre


apóstrofos (Por ejemplo: 'Esta es una constante') . El programa de
aplicación puede modificar estos datos solamente si a la macro
DFHMDF se le hubiera asignado un nombre simbólico. Este campo
se usa para datos constantes, tales como encabezamientos, que el
programa de aplicación normalmente no modifica.

* GRPNAME= Permite dividir un campo en subcampos que pueden ser


direccionados por el programa. el uso de subcampos es para
conveniencia del programador. Las características físicas del
campo son de aplicación igualmente a todos los subcampos, por
ejemplo, la longitud y el atributo son de aplicación a todo el campo.

DIA DFHMDF POS=1, GRPNAME=FECHA, ATTRB=NUM


MES DFHMDF POS=3, LENGTH=2, GRPNAME=FECHA
AÑO DFHMDF POS=5, LENGTH=2, GRPNAME=FECHA

FECHA I
FECHA 0

LL A DD MM AA

AÑO I
MES I AÑO 0
MES 0
DIA I
DIA 0

FECHA A
FECHA F

FECHA L

Advierta que el parámetro ATTRB se especifica solamente para el primer campo


del grupo.

Página -180-
* OCCURS=n Permite describir n campos idénticos a la vez. Si se usara este
parámetro, se genera un conjunto de rótulos simbólicos con índices
como parte del conjunto de mapas simbólicos. Esta generación
tiene lugar en el COBOL a través de una cláusula OCCURS. En el
PL/I la generación tiene lugar por una matriz. El ASSEMBLER
simplemente reserva suficiente espacio en el mapa simbólico para
acomodar todas las occurrencias de los campos. Advierta que
puede usar OCCURS o GRPNAME, pero no ambos.
FLD2 DFHMDF...LENGTH=4,OCCURS=3

LL A DATOS LL A DATOS LL A DATOS

FLD2N
(Nombre de campo de la próxima ocurrencia Assembler
solamente)
FLD2 I
FLD2 0

FLD2 A
FLD2 F

FLD2L (Nombre de campo de la primer ocurrencia)


FLD2D

* PICIN= y PICOUT= generan una cláusula PICTURE en COBOL y en PL/I. El


BMS verifica que el valor exacto se adecue al lenguaje utilizado,
pero no lleva a cabo prueba alguna de validez.

Si el número de posiciones especificado en PICIN y en PICOUT


difiriera del parámetro LENGHT, tiene precedencia LENGHT.

Si PICIN y PICOUT especifican diferentes longitudes en la misma


macro, se usa la más corta de las dos.

Revisemos, este punto, parte de la información básica sobre estas macro


estudiando la figura 6.14.

Página -181-
Fig.6.14.
Ejemplo de definición de Mapas y
de Conjuntos de Mapas.

MAPSETA DFHMSD TYPE=MAP,MODE=INOUT, X


CTRL=(FREEKB,FRESET), X
LANG=COBOL, X
TERM=3270-2
MAPX DFHMDI SIZE=(24,80),TIOAPFX=YES
DATFLD DFHMDF POS=(1,70),LENGHT=8
DFHMDF POS=(3,10), LENGHT=4
INITIAL='NAME'

NAME DFHMDF POS=(3,15), LENGHT=20,ATTRB=IC X


DFHMDF POS=(3,36),LENGHT=1

DFHMSD TYPE=FINAL

COLUMNA 72
COLUMNA 16

* DFHMSD Describe un conjunto de mapas llamado MAPSETA. MAPSETA es


un conjunto de datos físicos (TYPE=MAP) a usar en operaciones de
entrada o de salida (MODE=INOUT) en una 3270 modelo 2.
Además de la información de control aplicable a la terminal
(desbloqueo del teclado, FREEKB, y restauración de MDTs,
FRSET) el programador ha especificado que un programa COBOL
utilizará este conjunto de mapas.

* DFHMDI Describe un mapa llamado MAPX. Una macro DFHMDI es de


aplicación a un mapa del conjunto de mapas MAPSETA. en la
pantalla de representación, MAPX cubre 24 líneas, 80 columnas.

* DFHMDF Describe los campos de MAPX. hay cuatro macros DFHMDF, una
por cada uno de los cuatro campos que se describen en secuencia
relativa a su posición en el mapa. El programa de aplicación se
refiere sólo a dos de estos campos (DATFLD y NAME). Por lo tanto,
hallará estos dos campos (y solamente estos dos) en el mapa
simbólico relacionado.

Página -182-
Modificación del Byte de Atributo

El byte de atributo de cada campo se define en el mapa. El programa de


aplicación puede modificar el atributo antes de transmitirse el mapa a la terminal.

La lista precodificada DFHBMSCA simplifica la definición de los atributos de


campo y de los caracteres de control de impresora. La lista se obtiene copiando
DFHBMSCA en la memoria de trabajo del programa de aplicación.

En la figura 6.15 pueden observarse los nombres simbólicos de las varias


combinaciones de atributos y caracteres de control.

Para los usuarios del COBOL, el listado consiste de un conjunto de sentencias


de nivel 01 que ha de copiarse en la WORKING-STORAGE SECTION.

Para los usuarios del PL/I, el listado consiste en sentencias DECLARE que
definen variables elementales de carácter. Para los usuarios del ASSEMBLE, el
listado consiste de un conjunto de sentencias EQU.

Página -183-
Fig. 6-15.
Lista precodificada de Atributos y
Caracteres de Control de Impresora
(DFHBMSCA)

ATRIBUTO DE CAMPO O CONTROL DE IMPRESION


NOMBRE SIMBOLICO
(O COMBINACION DE ESTOS)

DFHBMASB SALTEO AUTOMATICO; ALTA INTENSIDAD

DFHBMASF SALTEO AUTOMATICO; MDT FIJADO A 1

DFHBMASK SALTEO AUTOMATICO

DFHBMBRY ALTA INTENSIDAD

DFHBMDAR OSCURO; NO IMPRIME

DFHBMFSE MDT FIJADO A 1

DFHBMPEM IMPRIME FIN DEL MENSAJE

DFHBMPNL IMPRIME CARÁCTER DE NUEVA LINEA

DFHBMPRF PROTEGIDO; MDT FIJADO A 1

DFHBMPRO PROTEGIDO

DFHBMUNN NO PROTEGIDO; NUMERICO

DFHBMUNP NO PROTEGIDO
X'FF' REEMPLAZA EL ATRIBUTO ESPECIFICADO POR
DFHDFT
DEFECTO
DFHBLUE AZUL

DFHRED ROJO

DFHPINK ROSADO

DFHGREEN VERDE

DFHTURQ TURQUESA

DFHYELLO AMARILLO

DFHNEUTR NEUTRO

DFHBLINK PARPADEA

DFHREVRS IMAGEN INVERTIDA

DFHUNDLN SUBRAYA

DFHMFIL LLENADO OBLIGATORIO

DFHMENT INGRESO OBLIGATORIO

DFHMFE INGRESO Y LLENADO OBLIGATORIO

El ejemplo de codificación que damos en las siguientes figuras ilustra la técnica


para la modificación del byte de atributo. en el ejemplo, se intensifica el campo
CUSTNO y los campos CUSTNAM y AMOUNT son protegidos.

Página -184-
Fig.6-15.
Modificación del Byte de Atributo
(COBOL)

IDENTIFICATION DIVISION.
PROGRAM-ID. BMSCOB2.
*
* EL PROGRAMA MODIFICA EL BYTE DE ATRIBUTO DE 3 CAMPOS
* ANTES DE ENVIAR EL MAPA Y LOS DATOS A LA TERMINAL
*
*
*** EL PROGRAMA ESTA INCOMPLETO Y NO S EEJECUTARA ***
*
ENVIROMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
.
.
.
01 MAPAI COPY MAPSETA.
.
.
.
01 DFHBMSCA COPY DFHBMSCA.
.
.
.
PROCEDURE DIVISION.
.
.
MOVE DFHBMBRY TO CUSTNOA.
MOVE DFHBMPRO TO CUSTNAMA.
MOVE DFHBMPRO TO AMOUNTA.
.
.
EXEC CICS SEND MAP('MAPA') MAPSET('MAPSETA') END-EXEC.
.
.

Página -185-

También podría gustarte