En este artículo veremos en uso el programa COBOL/CICS más sencillo. Usaremos las sentencias CICS para enviar y recoger texto de la pantalla, pero sin formatear. Este programa será conversacional, es decir, el código se ejecutará de principio a fin sin devolver el control al CICS en ningún momento (salvo al finalizar la ejecución).
Cualquier sentencia CICS debe escribirse entre las etiquetas EXEC CICS y END-EXEC.
Se trata de un programa ONLINE, por lo que ya no hay que usar un JOB para ejecutarlo. Ahora necesitaremos una transacción CICS.
Dependiendo de vuestro sistema, habrá una u otra manera de dar de alta una nueva transacción CICS, que tenga asociado nuestro programa de pruebas. Incluso es probable que muchos de vosotros no tengáis permisos para poder darla de alta en vuestro trabajo.
Para aquellos que tengáis Hércules instalado en vuestro PC de casa, ahí va como generarla:
Transacción CEDALa transacción CEDA es una transacción del sistema (como la
CEMT) que nos permitirá definir nuestra transacción CICS. Una transacción a efectos prácticos, es un código de 4 dígitos que lleva asociado un programa (ya sea COBOL, PL/I, ensamblador...), de tal manera que si la consultamos desde CEMT I TRANS nos mostrará lo siguiente:
Para definirla entraremos en nuestra sesión de CICS y escribiremos CEDA. Nos mostrará la siguiente lista:
Aquí elegimos Define, pues vamos a definir algo nuevo:
Y aquí elegimos Transaction, pues vamos a definir una transacción:
Los campos que debemos rellenar son:
Transaction
Group
Description
Program
Una vez definida la transacción tendremos que hacer lo mismo para el programa:
Y rellenaremos los datos:
Program
Group
Description
Language
Terminada la definición, pasamos a la instalación:
CEDA INSTALL TRANS(ACCQ) Se debe rellenar el campo Group.
CEDA INSTALL PROG(PGMCICS1)Se debe rellenar el campo Group.
Hecho esto, ya podemos empezar a codificar nuestro programa.
Nota: Si tenéis algún problema dando de alta la transacción, dejad un comentario y lo vemos.
PROGRAMA:Por tratarse de un programa COBOL/CICS, tendrá la misma estructura que un programa cobol normal, simplemente incluiremos algunas sentencias CICS en el código.
IDENTIFICATION DIVISION.
PROGRAM-ID. PGMCICS1.
AUTHOR. CONSULTORIO COBOL.
*
*==========================================================*
* MI PRIMER PROGRAMA EN CICS *
* ENVIA UN SALUDO PERSONALIZADO *
*==========================================================*
*
ENVIRONMENT DIVISION.
*
CONFIGURATION SECTION.
*
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*
DATA DIVISION.
*
WORKING-STORAGE SECTION.
*
01 WX-PREGUNTA-NOMBRE.
05 WX-PN.
10 FILLER PIC X(20) VALUE 'INTRODUCE TU NOMBRE:'.
10 FILLER PIC X(10) VALUE '__________'.
01 WX-RESPUESTA.
05 WX-RES1.
10 FILLER PIC X(3).
10 FILLER PIC X(20).
10 WX-NOMBRE PIC X(10).
01 WX-SALUDO PIC X(30).
01 WX-HOLA PIC X(5) VALUE 'HOLA '.
01 WX-RESTO-SALUDO PIC X(17) VALUE '! YO SOY EL CICS.'.
*
***********************************************************
PROCEDURE DIVISION.
***********************************************************
* | 0000 - PRINCIPAL
*--|------------------+----------><----------+-------------* * 1| EJECUTA EL INICIO DEL PROGRAMA * 2| EJECUTA EL PROCESO DEL PROGRAMA * 3| EJECUTA EL FINAL DEL PROGRAMA ************************************************************ 0000-PRINCIPAL. * PERFORM 1000-INICIO PERFORM 2000-PROCESO PERFORM 3000-FINAL . * ************************************************************ * | 10000 - INICIO *--|------------+----------><----------+-------------------* * | SE REALIZA EL TRATAMIENTO DE INICIO: * 1| INICIALIZACIóN DE ÁREAS DE TRABAJO * 2| PRIMERA LECTURA DE SYSIN ************************************************************ 1000-INICIO.* INITIALIZE WX-RESPUESTA WX-SALUDO . * ************************************************************ * | 20000 - PROCESO *--|------------------+----------><------------------------* * | SE REALIZA EL TRATAMIENTO DE LOS DATOS: * 1| REALIZA EL TRATAMIENTO DE CADA REGISTRO RECUPERADO DE * | LA ENTRADA ************************************************************ 2000-PROCESO. *
PERFORM 2100-PEDIR-DATOS PERFORM 2200-ENVIA-SALUDO . * ************************************************************ * 2100 PEDIR DATOS *--|------------------+----------><----------+-------------* * ENVIA UN MENSAJE A LA PANTALLA ************************************************************ 2100-PEDIR-DATOS. * POSICIONAMOS EL CURSOR EN LA POSICION 21 MOVE 21 TO EIBCPOSN * * ENVIAMOS UN TEXTO A LA VENTANA EXEC CICS SEND TEXT FROM (WX-PREGUNTA-NOMBRE)
ERASE
CURSOR (EIBCPOSN)
LENGTH (LENGTH OF WX-PREGUNTA-NOMBRE)
END-EXEC
* * RECOGEMOS LA RESPUESTA EN WX-RESPUESTA * EXEC CICS RECEIVE INTO (WX-RESPUESTA)
LENGTH (LENGTH OF WX-RESPUESTA)
END-EXEC
.* ************************************************************ * 2200 ENVIAMOS SALUDO *--|------------------+----------><----------+-------------* * FORMATEA EL NOMBRE PARA QUITAR LOS GUIONES BAJOS * ENVIA EL SALUDO PERSONALIZADO A LA PANTALLA ************************************************************ 2200-ENVIA-SALUDO. * INSPECT WX-NOMBRE REPLACING ALL '_' BY SPACES STRING WX-HOLA DELIMITED BY SIZE WX-NOMBRE DELIMITED BY SPACES WX-RESTO-SALUDO DELIMITED BY SIZE INTO WX-SALUDO EXEC CICS SEND TEXT FROM (WX-SALUDO)
ERASE LENGTH (LENGTH OF WX-SALUDO)
END-EXEC . * ************************************************************ * | 30000 - FINAL *--|------------------+----------><----------+-------------* * | FINALIZA LA EJECUCION DEL PROGRAMA Y DEVUELVE EL * | CONTROL AL CICS ************************************************************ 3000-FINAL. * EXEC CICS RETURN END-EXEC
. * En el programa podemos ver las siguientes divisiones/secciones:IDENTIFICATION DIVISION: existirá siempre.
ENVIRONMENT DIVISION: existirá siempre.
CONFIGURATION SECTION: existirá siempre.
INPUT-OUTPUT SECTION: en este ejemplo no exisitrá porque no vamos a usar ficheros.
DATA DIVISION: existirá siempre.
FILE SECTION: en este ejemplo no exisitrá porque no vamos a usar ficheros.
WORKING-STORAGE SECTION: exisitirá siempre.
En este caso NO exisistirá la LINKAGE SECTION pues se trata de un programa conversacional en el que el CICS inmobiliza áreas de memoria para guardar los datos intercambiados.
PROCEDURE DIVISION: exisitirá siempre.
En el programa podemos ver las siguientes sentencias:PERFORM: llamada a párrafo
INITIALIZE: para inicializar variable
MOVE/TO: movemos la información de un campo a otro.
EXEC CICS/END-EXEC: Etiquetas entre las que se codifica una sentencia CICS
SEND TEXT: envía un mensaje de texto al CICS.
RECEIVE: recibe un mensaje de texto desde el CICS.
INSPECT/REPLACING: recorre todos los caracteres de una cadena sustituyendo el carácter indicado en "ALL" por el carácter indicado en "BY".
STRING/INTO: concatena los campos indicados en STRING y los guarda en la variable indicada en INTO. La explicación completa en
PROCEDURE DIVISION: proceso del programa.
RETURN: Sentencia de finalización de ejecución. Devuelve el control al CICS.
Descripción del programa:En el inicio del programa, inicializamos las variables de trabajo WX-RESPUESTA y WX-SALUDO.
En el proceso tenemos los siguientes párrafos:
2100-PEDIR-DATOS.En este párrafo colocamos el cursor en la posición 21, posición donde empieza la línea para escribir el nombre, informando la variable EIBCPOSN con un 21.
Enviamos el mensaje WX-PREGUNTA-NOMBRE a la ventana con la instrucción SEND TEXT.
En "FROM" indicamos la variable que contiene el texto, en este caso WX-PREGUNTA-NOMBRE.
ERASE limpia la pantalla.
CURSOR posiciona el cursor en la posición indicada en EIBCPOSN.
En LENGTH indicamos la longitud del texto a enviar con "LENGTH OF".
Recogemos la información de la pantalla con la sentencia RECEIVE.
En "INTO" indicamos la variable donde guardaremos la información.
En LENGTH indicamos la longitud de la variable con "LENGTH OF".
2200-ENVIA-SALUDO.En este párrafo formateamos el mensaje recibido:
INTRODUCE TU NOMBRE:TALLI______En WX-NOMBRE tendremos el texto "TALLI______". La sentencia INSPECT WX-NOMBRE recorrerá todos los caracteres almacenados en WX-NOMBRE. La sentencia REPLACING ALL '_' BY SPACES sustiruitá todos los guiones bajos por espacios, quedándonos en WX-NOMBRE el texto "TALLI ".
Con la sentencia STRING concatenaremos el texto "HOLA ", WX-NOMBRE, y "! YO SOY EL CICS." dentro de la variable WX-SALUDO. Con DELIMITED BY SPACES eliminamos los espacios sobrantes en WX-NOMBRE.
Ahora con un nuevo SEND TEXT enviamos WX-SALUDO a la pantalla.
En el párrafo de final codificamos la sentencia CICS RETURN que finaliza la ejecución y devuelve el control al CICS.
Nota para usuarios de Hércules: para que CICS coja la última compilación de nuestro programa (si hemos compilado más de una vez) debemos "refrescarla" desde CEMT:
CEMT SET PROG(PGMCICS1) NEWRESULTADO:Ejecutamos el programa escribiendo el código de la transacción y pulsando Intro:
Se muestra el mensaje:
Introducimos nuestro nombre y pulsamos Intro:
Se muestra el saludo:
Como veis esto es una chorrada de programa^^ pero hay que empezar por lo fácil.
En próximos artículos veremos como actualizar ficheros indexados desde un programa COBOL/CICS conversacional. Más adelante veremos el uso de mapas para dar formato a la ventana. Paciencia!
Como siempre, cualquier duda que tengáis... dejad un comentario : )