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.
Hice lo mismo pero me sale el error:
ResponderEliminar-------------------------------------------------------------------------------
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