Desarrollando en Cobol y Natural sobre Plataforma Mainframe

miércoles, 18 de diciembre de 2013

Compilador de objetos Cobol con CICS

En ocasiones, tendremos necesidad de incluir invocaciones CICS en nuestros programas Cobol (por ejemplo, para el tratamiento de Mapas). En estos casos, no podremos recurrir al compilador estándar de objetos Cobol y tendremos que usar un procedimiento especial que tenga en cuenta las transacciones CICS.

Si incluimos una ejecución CICS en nuestro programa Cobol e intentamos compilar de forma estándar, el compilador nos devolverá un error. Esto es debido a que, en estos casos, tenemos que recurrir al procedimiento de compilación denominado DFHYITVL.



Por ejemplo, supongamos que elaboramos un programa Cobol en el que tenemos una invocación CICS a un Mapa del siguiente modo.

*
     EXEC CICS                      
       SEND MAP('JJ0004M')          
       MAPONLY                      
       ERASE                        
       NOHANDLE                     
     END-EXEC.                      
*                 
                   

En casos como estos tendremos que emplear un compilador que disponga de la ejecución correspondiente del procedure DFHYITVL. Por ejemplo, podría ser el siguiente.

//JJCOM4CL JOB (123),'COMPILADOR CICS',CLASS=A,MSGCLASS=A,
//             MSGLEVEL=(1,1),NOTIFY=&SYSUID
//***************************************************

//* DFHYITVL - COMPILADOR DE OBJETOS COBOL CON CICS
//***************************************************

//JOBPROC  JCLLIB ORDER=DFH320.CICS.SDFHPROC
//CICSCOB  EXEC DFHYITVL,      
//             DSCTLIB=LIBPR.COPYS.JJ00,  *LIBRERIA DE COPYS
//             PROGLIB=LIBPR.MODULOS.JJ01 *LIBRERIA DE MODULOS
//* UBICACION DEL PROGRAMA CON CICS
//TRN.SYSIN  DD DSN=LIBPR.FUENTES.JJ00(JJ0004CO),DISP=SHR
//* LIBRERIAS SYSLIB DE IEWL - DFHELII
//LKED.SYSLIB DD DSN=DFH320.CICS.SDFHLOAD,DISP=SHR           
//            DD DSN=CEE.SCEELKED,DISP=SHR
//            DD DSN=LIBPR.MODULOS.JJ01,DISP=SHR       
//LKED.SYSIN DD  * 
  NAME JJ0004CO(R)                                         

//

Como vemos, este compilador especial se compone de un único paso que invoca directamente al procedimiento DFHYITVL. Dicho procedure se encarga de realizar la compilación de los objetos Cobol que tengan transacciones CICS.

En este paso tenemos que especificar los siguientes datos:

1º) Cláusula JCLLIB: Tenemos que especificar la librería en la que se encuentra el objeto DFHYITVL. Esto variará en cada instalación. En nuestro caso, se trata de la librería DFH320.CICS.SDFHPROC.

//JOBPROC  JCLLIB ORDER=DFH320.CICS.SDFHPROC

2º) Parámetro DSCTLIB: Esta es la librería en la que se encuentran las copys que se van a utilizar en nuestro programa Cobol.

//             DSCTLIB=LIBPR.COPYS.JJ00,  *LIBRERIA DE COPYS

3º) Parámetro PROGLIB: Se trata de la librería en la que será almacenado el módulo generado a partir de nuestro programa Cobol.

//             PROGLIB=LIBPR.MODULOS.JJ01 *LIBRERIA DE MODULOS

4º) Parámetro SYSIN: Aquí especificaremos la librería en la que se encuentra el fuente de nuestro objeto Cobol.

//TRN.SYSIN  DD DSN=LIBPR.FUENTES.JJ00(JJ0004CO),DISP=SHR

5º) Parámetro SYSLIB: aquí habrá que especificar, entre otras cosas, la librería en la que se encuentra el objeto IEWL, uno de los empleados en el procedure DFHYITVL. En nuestro caso, se trata de la librería DFH320.CICS.SDFHLOAD.

//LKED.SYSLIB DD DSN=DFH320.CICS.SDFHLOAD,DISP=SHR           
//            DD DSN=CEE.SCEELKED,DISP=SHR
//            DD DSN=LIBPR.MODULOS.JJ01,DISP=SHR        


6º) Por último, al final del compilador tendremos que incluir la cláusula SYSIN indicada en el ejemplo.

//LKED.SYSIN DD  * 
  NAME JJ0004CO(R)


Si se realiza correctamente, no deberíamos tener ningún problema con la compilación de nuestro objeto. La mayor dificultad de este procedimiento es especificar correctamente las librerías en las que se encuentra cada cosa. Debido a que cada instalación es diferente, tendremos que perder algún tiempo en identificarlas pero, una vez superado ese paso inicial, el proceso no debería darnos ningún quebradero de cabeza adicional.

Pues nada, como siempre, esperamos haberos ayudado un poco a ir profundizando en vuestro conocimiento del entorno Cobol.

Saludos.

1 comentario:

  1. Hice lo mismo pero me sale el error:
    -------------------------------------------------------------------------------
    SDSF OUTPUT DISPLAY CICSCOMP JOB00049 DSID 4 LINE 0 COLUMNS 01- 80
    COMMAND INPUT ===> SCROLL ===> CSR
    ******************************** TOP OF DATA **********************************
    STMT NO. MESSAGE
    3 IEFC001I PROCEDURE DFHYITVL WAS EXPANDED USING PRIVATE LIBRARY DFH320
    ICH70001I IBMUSER LAST ACCESS AT 09:10:12 ON MONDAY, NOVEMBER 23, 2020
    IEF236I ALLOC. FOR CICSCOMP TRN CICSCOB
    IEF237I 0A81 ALLOCATED TO STEPLIB
    IEF237I JES2 ALLOCATED TO SYSPRINT
    IGD100I VIO ALLOCATED TO DDNAME SYSPUNCH DATACLAS ( )
    IEF237I 0A93 ALLOCATED TO SYSIN
    IEC141I 013-18,IGG0191B,CICSCOMP,TRN,SYSIN,0A93,ZARES1,HERC.LIB.CICS(MAP002)
    IEA995I SYMPTOM DUMP OUTPUT
    SYSTEM COMPLETION CODE=013 REASON CODE=00000018
    TIME=09.13.52 SEQ=00015 CPU=0000 ASID=001A
    PSW AT TIME OF ERROR 075C1000 80E03226 ILC 2 INTC 0D
    NO ACTIVE MODULE FOUND
    NAME=UNKNOWN
    DATA AT PSW 00E03220 - 41003B92 0A0D41F0 38BE56F0
    AR/GR 0: 9E05CD16/00E03504 1: 00000000/A4013000
    2: 00000000/000280A4 3: 00000000/00E02972

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...