Uno de los errores típicos a la hora de desarrollar un programa Cobol es tratar de incluir definiciones de ficheros secuenciales en objetos que van a ser invocados mediante Transacciones CICS. Esto le suele ocurrir sobre todo a los programadores que vienen del mundo Cobol Batch o a los desarrolladores que han hecho algún tipo de migración de objetos.
Normalmente, si elaboramos un programa Cobol con declaraciones de ficheros secuenciales y tratamos de invocarlo mediante una Transacción CICS, nuestro terminal nos devolverá un mensaje de error indicando que la ejecución ha fallado.
DFHAC2206 CICS Transaction XXXX failed with abend 4038
Cuando se nos genere un error de este tipo, no nos quedará más remedio que ir al Log del CICS para tratar de encontrar información más detallada sobre el problema. En el caso que nos ocupa, al buscar este detalle encontraremos algún mensaje de este tipo.
IGZ0096C A Load of Module IGZEQBL was unsuccessful.
The trackback information could not be determined.
¿Qué significa esto? Si vamos a la descripción del error, se especifica que la causa del mismo es que la aplicación contiene (de manera incorrecta) una definición de la cláusula FD para un fichero secuencial. Y, según se indica, el LE (Language Environment) ZOS V1R2 (y sus versiones posteriores) no permite realizar dicha definición.
En resumen, lo que viene a decirnos el error es que el uso del bloque FILE-CONTROL en la división ENVIRONMENT DIVISION o de la sección FILE SECTION en la división DATA DIVISION no está permitido en las aplicaciones CICS. Por tanto, las sentencias FD deben ser eliminadas de nuestro programa Cobol CICS.
Si nos vamos al programa, seguro que encontraremos alguna definición de FD, tal y como sucedió en este objeto Cobol CICS que ponemos de ejemplo.
******************************************************************
* ENVIRONMENT DIVISION
******************************************************************
ENVIRONMENT DIVISION.
*
******************************************************************
* INPUT-OUTPUT SECTION.
******************************************************************
INPUT-OUTPUT SECTION.
*
******************************************************************
* FILE-CONTROL BLOQUE
******************************************************************
FILE-CONTROL.
* NOMBRE LOGICO
SELECT ENTRADA1
* NOMBRE REAL FICHERO EN EL JCL O PC
ASSIGN TO ENTRADA1
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-ENTRADA1.
*
SELECT SALIDA1
ASSIGN TO SALIDA1
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-SALIDA1.
*
******************************************************************
* DATA DIVISION
******************************************************************
DATA DIVISION.
*
******************************************************************
* FILE SECTION
******************************************************************
FILE SECTION.
*
* DEFINICION CARACTERISTICAS REGISTRO DEL FICHERO
* NOMBRE DE INPUT-OUTPUT SECTION
FD ENTRADA1
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS ARE STANDARD.
01 RG-ENTRADA1 PIC X(28).
*
FD SALIDA1
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS ARE STANDARD.
01 RG-SALIDA1 PIC X(92).
*
Aquí eran las definiciones FD ENTRADA1 y FD SALIDA1 las que estaban provocando el error a la hora de invocar al programa mediante una Transacción CICS. Una vez se eliminaron la sección FILE SECTION y el bloque FILE-CONTROL, ya se pudo realizar la ejecución sin problema alguno.
Este es un tema que tenemos que tener en cuenta a la hora de desarrollar programas Cobol CICS. En las versiones antiguas de CICS sí que se podían realizar este tipo de declaraciones, pero actualmente están prohibidas en las versiones más modernas y optimizadas.
Pues nada, esperamos que vosotros nunca tengáis problemas de este tipo. Y bueno, si alguna vez os pasa, recordad lo que leísteis en este post y podréis solucionarlo con sencillez.
Saludos.
Excelente TIP
ResponderEliminarConsulta tendras algun doc que me ayude con migraciones de versiones antiguas a 5 o 6, que errores puedo tener y que debo considerar para cambiar.
Saludos
Angel