jueves, 20 de febrero de 2014

Prohibición de Ficheros Secuenciales en Cobol CICS

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.

1 comentario:

  1. Excelente TIP
    Consulta 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

    ResponderEliminar