El código COBOL con CICS embebido requiere de un procedimiento muy estricto, para funcionar.
Trataré de explicar paso a paso todo el proceso.
Los siguientes archivos contienen los códigos que usaremos.
COBOL, programa que mostrará en la pantalla 'Hola mundo CICS'.
JCL para compilar el COBOL.
JCL para compilar el MAPA CICS.
CODIGO del MAPA CICS (en este caso la pantalla de 'Hola mundo CICS').
CODIGO mapa lógico de las variables a usar en COBOL.
Lo primero que haremos es crear los datasets que vamos a usar.
IBMUSER.CICS.LOAD IBMUSER.CICS.MAPS IBMUSER.CICS.SOURCE IBMUSER.MAG.JCL (ya lo tenemos de antes, asi que no hace falta crearlo)
Desde el menú principal de ispf, 'Option ===> =3.4'
Ingresamos 'IBMUSER' como parámetro de búsqueda.
Enter one or both of the parameters below: Dsname Level . . . IBMUSER Volume serial . .
Al dar ENTER aparecerán todos los dataset que contengan 'IBMUSER'.
Con la opción 'i' veremos la información de como ha sido creado el dataset, y esta información quedará en memoria para crear los dataset que usaremos.
Con la opción 'Command ===> =3.2 ' vamos al Data Set Utility para crear uno a uno los dataset que necesitamos.
Los datos de cada dataset ya estan en memoria por lo que cuando aparezca la pantalla de datos del dataset solo precionamos ENTER y listo.
Con los datasets creados, cargamos los códigos en cada uno de la siguiente manera.
HOLA.TXT -> IBMUSER.CICS.SOURCE(HOLA)
HCBLCICC.TXT -> IBMUSER.MAG.JCL(HCBLCICC)
HCICCMMP.TXT -> IBMUSER.MAG.JCL(HCICCMMP)
HOLAMP.TXT -> IBMUSER.CICS.MAPS(HOLAMP)
HOLAMPCP.TXT -> IBMUSER.CICS.SOURCE(HOLAMPCP)
(este último va a ser generado por uno de los JCL así que no importa que este cargado).
En este punto hay que preparar el IBMUSER.CICS.LOAD (que es donde se depositará el Hola compilado), para que CICS busque el programa para ejecutarlo.
Para esto realizaremos el siguiente proceso.
Desde el menú principal del ispf '=3.4', ENTER, y en Data set list utility ingresamos lo siguiente.
Enter one or both of the parameters below: Dsname Level . . . **.proclib Volume serial . .
Esto nos mostrará todos los dataset que contengan el 'qualifier' (que asi se llama cada parte del dataset) 'proclib'.
Dentro de esta lista debemos buscar 'CICSA' que es el programa que inicia el CICS.
Una vez encontrado, lo editamos con mucho cuidado de cambiar solo lo que necesitamos. Si llegamos a cambiar algo por error, con F12 cancelamos la edición sin guardar.
En este caso, CICSA lo encontraremos en 'ADCD.Z110.PROCLIB'
Como se muestra en la imagen anterior, con 'b' (Browse) y ENTER, entramos al dataset a buscar CICSA.
Con la opción 'e' editamos CICSA. Una vez dentro, buscamos lo siguiente.
000069 //DFHRPL DD DSN=&INDEX2..SDFHLOAD,DISP=SHR 000070 // DD DSN=CEE.SCEECICS,DISP=SHR 000071 // DD DSN=CEE.SCEERUN,DISP=SHR
Agregamos una linea, y como linea 000072 ingresamos 'DD DSN=IBMUSER.CICS.LOAD,DISP=SHR'. En la siguiente imagen se muestra como queda.
Completado este punto, grabamos y salimos.
Ahora vamos a pasar a las compilaciones.
Desde el menú principal de ispf, opción 1 'View' y vamos a IBMUSER.MAG.JCL(HCICCMMP) para compilar el MAPA CICS.
Lo primero que haremos es ejecutar el siguiente comando.
Command ===> C XXXXXX holamp ALL Lo que hace este comando es cambiar el nombre XXXXXX por holamp.
Hacerlo de esta manera para que el mismo JCL sirva para compilar otros mapas CICS futuros.
Una vez cambiados los nombres, estamos en condiciones de hacer 'SUB'
Todo deberia ir bien y vemos en rojo el siguiente informe.
09.25.24 JOB00529 $HASP165 COMPMAP ENDED AT N1 MAXCC=0 CN(INTERNAL) ***
Este compilado, además genera un mapa lógico que debemos agregar en la WORKING-STORAGE de nuestro programa COBOL.
El miembro generado se encuentra en IBMUSER.CICS.SOURCE(HOLAMPCP), y alcanza con copiar el contenido y pegarlo en el programa COBOL.
(HOLA.TXT ya tiene copiado en la WORKING la parte logica del mapa, así que no se debe hacer nada en este caso. Solo lo explico porque es parte del procedimiento).
Ahora pasamos a compilar el programa COBOL con el otro JCL IBMUSER.MAG.JCL(HCBLCICC).
Repetimos en este miembro abierto en modo view, el cambio de XXXXXX por HOLA.
Una vez cambiados los nombres, estamos en condiciones de hacer 'SUB'
Nuevamente, si todo va bien, veremos un informe en rojo similar al anterior.
A esta altura, deberiamos tener:
IBMUSER.CICS.LOAD(HOLA) COMPILADO
IBMUSER.CICS.LOAD(HOLAMP) COMPILADO
IBMUSER.CICS.SOURCE(HOLAMPCP) El contenido de este archivo debe ir en la WORKING-STORAGE de nuestro programa COBOL
Hasta acá, si todo fue bien, terminamos con la parte de programas y compilados, y comenzamos con los procedimientos de CICS para poner en linea nuestro proyecto.
Nos deslogueamos del TSO... (F3 hasta salir, y LOGOFF)
Ahora vamos a entrar al CICS. En la pantalla de inicio de z/OS ingresamos 'L CICS' (sin comillas) y ENTER.
En la pantalla de bienvenida de CICS, ALT+C (clear) borra la pantalla y la deja en espera del ingreso de un comando.
Crearemos un grupo para definir la transaccion y el mapa. Dividir en grupos, hace al orden a la hora de administrar CICS.
Ingresamos el comando 'ceda def prog (HOLA) group (HOLA)' (sin comillas). ENTER, y nos mostrará lo siguiente.
DEF PROG (HOLA) GROUP (HOLA)
OVERTYPE TO MODIFY CICS RELEASE = 0650
CEDA DEFine PROGram( HOLA )
PROGram : HOLA
Group : HOLA
DEscription ==>
Language ==> CObol | Assembler | Le370 | C | Pli
RELoad ==> No No | Yes
RESident ==> No No | Yes
USAge ==> Normal Normal | Transient
USElpacopy ==> No No | Yes
Status ==> Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf ==> Yes Yes | No
DAtalocation ==> Below Below | Any
EXECKey ==> User User | Cics
COncurrency ==> Quasirent Quasirent | Threadsafe
Api ==> Cicsapi Cicsapi | Openapi
REMOTE ATTRIBUTES
+ DYnamic ==> No No | Yes
I New group HOLA created.
SYSID=CICS APPLID=CICS
DEFINE SUCCESSFUL TIME: 02.21.37 DATE: 23.309
PF 1 HELP 2 COM 3 END 6 CRSR 7 SBH 8 SFH 9 MSG 10 SB 11 SF 12 CNCL
El comando CEDA que ingresamos, lo podemos ir ingresando palabra por palabra, apretando ENTER entre medio, con lo que nos irá mostrando las distintas opciones y comandos.
F3 y ALT+C para dejar todo en condiciones de ingresar otro comando.
Ahora definimos el mapa con el siguiente comando. 'ceda def map (HOLAMP) group (HOLA)' (sin comillas) y nos mostrará lo siguiente.
DEF MAP (HOLAMP) GROUP (HOLA)
OVERTYPE TO MODIFY CICS RELEASE = 0650
CEDA DEFine Mapset( HOLAMP )
Mapset : HOLAMP
Group : HOLA
Description ==>
REsident ==> No No | Yes
USAge ==> Normal Normal | Transient
USElpacopy ==> No No | Yes
Status ==> Enabled Enabled | Disabled
RSl : 00 0-24 | Public
SYSID=CICS APPLID=CICS
DEFINE SUCCESSFUL TIME: 02.24.31 DATE: 23.309
PF 1 HELP 2 COM 3 END 6 CRSR 7 SBH 8 SFH 9 MSG 10 SB 11 SF 12 CNCL
F3 y ALT+C para dejar todo en condiciones de ingresar otro comando.
Solo queda definir la transacción cuyo nombre solo puede tener 4 caracteres.... asi que se llamara HOLA....
Con el comando 'ceda def trans(HOLA) prog(HOLA) group(HOLA)' (sin comillas), nos mostrará lo siguiente.
DEF TRANS(HOLA) PROG(HOLA) GROUP(HOLA)
OVERTYPE TO MODIFY CICS RELEASE = 0650
CEDA DEFine TRANSaction( HOLA )
TRANSaction : HOLA
Group : HOLA
DEscription ==>
PROGram ==> HOLA
TWasize ==> 00000 0-32767
PROFile ==> DFHCICST
PArtitionset ==>
STAtus ==> Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc ==> Below Below | Any
TASKDATAKey ==> User User | Cics
STOrageclear ==> No No | Yes
RUnaway ==> System System | 0 | 500-2700000
SHutdown ==> Disabled Disabled | Enabled
ISolate ==> Yes Yes | No
Brexit ==>
+ REMOTE ATTRIBUTES
SYSID=CICS APPLID=CICS
DEFINE SUCCESSFUL TIME: 02.28.33 DATE: 23.309
PF 1 HELP 2 COM 3 END 6 CRSR 7 SBH 8 SFH 9 MSG 10 SB 11 SF 12 CNCL
F3 y ALT+C para dejar todo en condiciones de ingresar otro comando.
Con esto ya definimos todo...
Ya estamos en los últimos procedimientos.
Con 'ceda di group (HOLA)' (sin comillas), vamos a llamar a la transacción. Nos mostrará lo siguiente.
DI GROUP (HOLA)
ENTER COMMANDS
NAME TYPE GROUP DATE TIME
HOLAMP MAPSET HOLA 23.309 02.24.31
HOLACICS PROGRAM HOLA 23.309 02.21.37
HOLA TRANSACTION HOLA 23.309 02.28.33
SYSID=CICS APPLID=CICS
RESULTS: 1 TO 3 OF 3 TIME: 02.31.38 DATE: 23.309
PF 1 HELP 3 END 4 TOP 5 BOT 6 CRSR 7 SBH 8 SFH 9 MSG 10 SB 11 SF 12 CNCL
Ponemos 'I' (sin comillas) en cada renglón entre las columnas GROUP y DATE para instalar la transaccion para siempre.
DI GROUP (HOLA)
ENTER COMMANDS
NAME TYPE GROUP DATE TIME
HOLAMP MAPSET HOLA I 23.309 02.24.31
HOLACICS PROGRAM HOLA I 23.309 02.21.37
HOLA TRANSACTION HOLA I 23.309 02.28.33
SYSID=CICS APPLID=CICS
RESULTS: 1 TO 3 OF 3 TIME: 02.31.38 DATE: 23.309
PF 1 HELP 3 END 4 TOP 5 BOT 6 CRSR 7 SBH 8 SFH 9 MSG 10 SB 11 SF 12 CNCL
Le damos ENTER y aparece INSTALL SUCCESSFUL en DATE en los 3 renglones.
DI GROUP (HOLA)
ENTER COMMANDS
NAME TYPE GROUP DATE TIME
HOLAMP MAPSET HOLA * INSTALL SUCCESSFUL
HOLACICS PROGRAM HOLA * INSTALL SUCCESSFUL
HOLA TRANSACTION HOLA * INSTALL SUCCESSFUL
SYSID=CICS APPLID=CICS
RESULTS: 1 TO 3 OF 3 TIME: 02.36.19 DATE: 23.309
PF 1 HELP 3 END 4 TOP 5 BOT 6 CRSR 7 SBH 8 SFH 9 MSG 10 SB 11 SF 12 CNCL
Con 'ceda' hemos definido e instalado el programa.... Ahora solo falta cargarlo.
F3 y ALT+C para dejar todo en condiciones de ingresar otro comando.
Ingresamos el comando 'cemt s prog(HOLA)' (sin comillas), y nos muestra lo siguiente.
S PROG(HOLA)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(HOLA) Leng(0000000000) Pro Ena Pri Ced
Res(000) Use(0000000000) Bel Uex Ful Qua Cic
El 'Leng(0000000000)' significa que aún no está ocupando memoria el programa, por lo tanto, no está cargado.
Para cargarlo, introducimos una 'N' (sin comillas) entre 'Pri' y 'Ced'. Quedaría así.
S PROG(HOLA)
STATUS: RESULTS - OVERTYPE TO MODIFY
Prog(HOLA) Leng(0000000000) Pro Ena Pri N Ced
Res(000) Use(0000000000) Bel Uex Ful Qua Cic
Al darle ENTER se modificará la 'Leng' mostrando cuanto ocupa el programa, y habremos dejado listo el programa para ejecutarse la próxima vez que se reinicie CICS.
F3 y ALT+C para dejar todo en condiciones de ingresar otro comando.
'cesf logoff' para salir de cics normalmente. Pero en este caso no debemos ejecutarlo.
Ahora vamos a apagar CICS y reiniciarlo para probar el programa.
El comando 'CEMT P SHUT I' (sin comillas) apagará de forma correcta el CICS.
Para darle arranque nuevamente, desde la consola 1 (la de carga), 'S CICSA' (sin comillas) que significa START CICSA (el miembro que cambiamos al principio).
Una vez que el CICS arranque, entramos desde la pantalla de bienvenida de z/OS con 'L CICS'.
Al mostrar la pantalla de bienvenida de CICS con ALT+C quedamos en condiciones de ingresar un comando.
En este caso nuestro comando sera 'HOLA' (sin comillas).
¡Listo!