Desarrollando en Cobol y Natural sobre Plataforma Mainframe

viernes, 26 de diciembre de 2014

Transacción CECI para ejecución de comandos CICS (y 2)

Hace algunas semanas comenzamos a ver en qué consistía la transacción CECI y cómo se podía utilizar para llevar a cabo la ejecución de un comando CICS desde el propio terminal. Esto es muy útil para saber si nuestras sentencias CICS son válidas antes de realizar su inclusión en el programa Cobol.

Ya estuvimos examinando cómo se podía mostrar un mapa mediante CECI y SEND MAP (ver post Transaccion CECI para ejecucion de comandos CICS - 1). Pero, tal y como dijimos, nos queda pendiente revisar otra situación en la que también podremos observar cómo hay que ejecutar las instrucciones CICS mediante esta herramienta.

Del mismo modo que hemos visto la ejecución del comando SEND, ahora pasaremos a ver otro ejemplo de cómo se lanzaría el comando WRITEQ mediante CECI.

Crear una Cola TS mediante CECI

1º) En primer lugar tendríamos que introducir WRITEQ en la línea de comandos.



2º) A continuación se nos mostraría una pantalla en la que tendríamos que seleccionar alguna de las opciones disponibles: TD (Transient Data Queue) o TS (Temporary Storage Queue).



En nuestro caso, como queremos crear una Cola TS, recurriremos a la opción TS. Por tanto, en la línea de comandos tendremos que añadir TS a continuación de la función WRITEQ.

WRITEQ TS

3º) Ahora pasaremos a una pantalla en la que se nos mostrarán todas las opciones disponibles para la creación de una Cola TS. Del mismo modo que en el ejemplo anterior (cuando estuvimos viendo el SEND MAP), dichas opciones se corresponderán con todas las cláusulas que podrían acompañar a la sentencia WRITEQ TS cuando la codificamos en un programa Cobol.



Como vemos, aparecen las cláusulas QUEUE, SYSID, FROM, LENGTH, ITEM, REWRITE, etc... Obviamente, no hace falta que las provisionemos todas, sino solamente aquellas que realmente sean necesarias para la operación que queremos realizar.

Ahora, para el ejemplo actual, sólo vamos a indicar el nombre de la Cola (en el parámetro QUEUE) y el contenido que deseamos insertar en ella (en el parámetro FROM). Para ello, incluiremos la sentencia QUEUE ('COLA2') FROM ('TEXTO') tras el comando WRITEQ TS.

WRITEQ TS QUEUE ('COLA2') FROM ('TEXTO')

4º) Finalmente, tras pulsar INTRO, nos aparecerá el mensaje "COMMAND EXECUTION COMPLETE" y la respuesta RESPONSE: NORMAL. Esto quiere decir que la creación de la Cola TS se ha completado con éxito.

COMMAND EXECUTION COMPLETE
RESPONSE: NORMAL

De hecho, si visualizásemos el contenido de la cola COLA2 veríamos que el contenido de la misma se corresponde con lo que hemos enviado en la cláusula FROM ('TEXTO'). Esto lo podemos confirmar en la siguiente imagen.



Con los dos ejemplos anteriores, SEND MAP y WRITEQ TS, nos podemos hacer una idea bastante clara de cómo sería la operativa que habría que seguir con la transacción CECI a la hora de ejecutar los comandos CICS. Lo realizado con estas dos instrucciones es fácilmente extrapolable al resto del API de CICS.

Por tanto, a partir de ahora ya sabemos que disponemos de una herramienta (CECI) que nos permitirá lanzar y probar las instrucciones CICS que deseamos incluir en nuestro programa Cobol. De este modo, podremos ahorrarnos mucho trabajo de depuración, ya que desde un primer momento sabremos que el código creado es correcto.

Y eso es todo lo que queríamos comentar. Esperamos que, con los ejemplos indicados, haya quedado claro para qué sirve la herramienta CECI y cómo se puede utilizar para mejorar nuestra programación Cobol.

Saludos.

jueves, 18 de diciembre de 2014

Transacción CEDF: Herramienta CICS de depuración (y 2)

Hace algunas semanas comenzamos a revisar el funcionamiento de la transacción CEDF de depuración CICS. Aunque ya vimos cuáles eran las pantallas básicas de la herramienta, nos quedó pendiente mostrar cómo se visualizaría en el depurador el proceso de envío y de recepción de datos entre un Mapa y un programa Cobol.

En la primera parte estuvimos viendo cuáles eran los pasos iniciales a seguir para navegar por CEDF (ver post Transacción CEDF - Herramienta CICS de depuración - 1). A continuación, continuaremos mostrando cuáles serían las etapas correspondientes si quisiéramos simular, desde el depurador, el proceso de comunicación entre un Mapset y el programa que lo invoca.

6º) Si ahora pulsamos INTRO, se mostrará en pantalla el mapa enviado y podremos operar sobre él del mismo modo que lo haríamos si no estuviésemos en modo depuración.



7º) En el ejemplo que estamos tratando, procedemos a introducir el valor '3' en el campo EQUIPO y, a continuación, pulsamos la tecla INTRO. De este modo, pasamos de nuevo a una pantalla con estado "COMMAND EXECUTION COMPLETE".



Como vemos en la imagen, el comando ejecutado es EXEC CICS RECEIVE MAP y el MAP asociado es el JJ0005M. En el parámetro INTO, que es la información que nuestro programa Cobol recibe del terminal, vemos que aparece el valor '003' (el número de equipo que hemos introducido previamente en el mapa).

8º) Si pulsamos INTRO se mostrará de nuevo el mapa con la información que se ha recuperado para el elemento solicitado (el '003', en nuestro caso). Como vemos, ya aparecen rellenos los campos N+PTOS, GOLES FAVOR y GOLES CONTRA, que inicialmente estaban vacíos.



9º) A continuación, pulsando INTRO pasaremos otra vez a la pantalla con estado "COMMAND EXECUTION COMPLETE", en la que se ha ejecutado el comando EXEC CICS SEND MAP.



Podemos ver que los parámetros ahora muestran la siguiente información:

MAP ('JJ0005A')              
FROM ('......6.003...21REAL MADRID              ...3.53 ...1.6'...)
LENGTH (74)
MAPSET ('JJ0005M')
TERMINAL
ERASE
NOHANDLE


El parámetro FROM muestra la información que se envió al mapa y se mostró en el terminal. En el ejemplo, en el contenido de esta línea podemos apreciar el nombre del equipo (REAL MADRID), los puntos (53), los goles a favor (60) y los goles en contra (21). Esto siempre nos será de mucha ayuda para ver qué es lo que realmente se está intentando enviar desde el programa Cobol hacia el Mapset.

10º) Finalmente, pulsando otra vez INTRO, pasaremos a una pantalla en la que se nos muestra el estado TASK TERMINATION, lo que significa que ha terminado la ejecución de la tarea de la transacción y se devuelve el control al CICS.  



Para salir del CEDF tendremos que acordarnos de indicar 'NO' en el campo REPLY de la ventana y pulsar la tecla INTRO.

REPLY: NO

De este modo volveremos al terminal CICS y ya nos encontraremos fuera de la funcionalidad del entorno de depuración de esta valiosa herramienta.

Al principio, puede parecer un poco complejo ir navegando por todas las pantallas de la transacción CEDF. Sin embargo, en realidad se trata de un proceso bastante repetitivo y, en cuanto lo hayamos usado un par de veces, no tardaremos en acostumbrarnos a interpretar los datos proporcionados por este Debugger.

Como hemos dicho al principio, se trata de una herramienta muy útil (y casi imprescindible a la hora de detectar los errores con rapidez). Obviamente, existen otras formas de detectar los problemas en nuestros programas Cobol pero, si nos acostumbranos a usar CEDF, pronto nos daremos cuenta de que el proceso de depuración nos ayuda a que la búsqueda sea mucho más rápida.

Pues nada, esperamos que, con lo comentado, sea suficiente para que os hagáis una idea de cómo es el funcionamiento de la transacción CEDF. Ahora ya es decisión vuestra aprender a utilizarla (o no).

Saludos.

jueves, 11 de diciembre de 2014

Transacción CEDF: Herramienta CICS de depuración (1)

Al igual que en otros muchos lenguajes más modernos, en el entorno CICS también disponemos de una herramienta para realizar la depuración de los programas COBOL DB2. Como ya sabemos, el empleo de los debuggers nos puede ahorrar mucho tiempo a la hora de encontrar errores en el código de los objetos.

La transacción CEDF sirve para iniciar la herramienta de depuración (o Debugger) de la que disponemos en el entorno CICS. Una vez arrancada, podremos indicar la transacción asociada a nuestra aplicación y CEDF realizará una simulación controlada de la ejecución de la misma, mostrándonos en todo momento el contenido de las variables activas y la parte del código CICS que se está ejecutando.



Si entramos en un terminal CICS e introducimos la transacción CEDF, lo primero que nos aparecerá será el mensaje: "THIS TERMINAL: EDF MODE ON". Esto significa que CEDF está esperando que introduzcamos la transacción de la aplicación sobre la que deseamos realizar el proceso de depuración (debugging).

THIS TERMINAL: EDF MODE ON

A continuacion, los pasos a seguir para trabajar con CEDF serán los siguientes:

1º) Tendremos que pulsar la tecla CLEAR (PAUSA) para limpiar el texto mostrado. Una vez tengamos la pantalla en blanco, procederemos a introducir la transacción correspondiente y pulsamos INTRO. La primera pantalla del Debugger que nos aparecerá será la siguiente.



Como vemos en la imagen, en la primera línea nos aparecen los datos de la transacción cuya ejecución estamos simulando con CEDF. En nuestro caso, se trata de la transacción 0005, el programa JJ0005CO (asociado a la transacción 0005) y la tarea 0000082.

TRANSACTION: 0005
PROGRAM: JJ0005CO 
TASK: 0000082
APPLID: CICS

En el centro de la pantalla nos aparecerán los valores que tengan en cada momento los parámetros del área de comunicaciones EIB. Esta información irá variando conforme se vayan ejecutando las rutinas de los programas asociados a la transacción y podrá ser consultada desde cualquier ventana del Depurador pulsando la tecla PF11 - EIB DISPLAY.

EIBTIME      = 42923         
EIBDATE      = 0114241       
EIBTRNID     = '0005'        
EIBTASKN     = 82            
EIBTRMID     = 'L701'        
                             
EIBCPOSN     = 4             
EIBCALEN     = 0             
EIBAID       = X'7D'         
EIBFN        = X'0000'       
EIBRCODE     = X'000000000000'
EIBDS        = '........'    
EIBREQID     = '........'           


2º) Si pulsamos INTRO, el Debugger saltará al primer comando CICS que se encuentre en el programa que se está ejecutando (JJ0005CO, en nuestro ejemplo). En el estado se mostrará "ABOUT TO EXECUTE COMMAND", con lo que nos está avisando de que está a punto de ejecutarse el comando mostrado.

STATUS:  ABOUT TO EXECUTE COMMAND                              
EXEC CICS SEND MAP                                             
 MAP ('JJ0005A')                                               
 FROM ('...................................................'...)
 LENGTH (74)                                                   
 MAPSET ('JJ0005M')                                            
 TERMINAL                                                      
 ERASE                                                         
 NOHANDLE    
                                                  
  
                                                             
En el ejemplo se indica que se va a ejecutar el comando CICS SEND MAP. Debajo se muestra el contenido de las variables correspondientes a cada una de las cláusulas del SEND MAP, esto es, el nombre del mapa a enviar (JJ0005A), el nombre del mapset (JJ0005M), la longitud del mapa (74) y la información a mostrar en el mapa.

3º) Si pulsamos INTRO, se mostrará la siguiente pantalla. Como vemos, el estado de la transacción a cambiado a "COMMAND EXECUTION COMPLETE", lo que significa que ya se ha enviado el mapa.



4º) Si volvemos a pulsar INTRO ahora se mostrará la pantalla siguiente. Aquí se nos indica que está a punto de ejecutarse (ABOUT TO EXECUTE COMMAND) el comando EXEC CICS RETURN, que es el que finaliza la transacción que está en curso y devuelve el control al terminal CICS.



5º) Para continuar debemos pulsar INTRO de nuevo. En esta pantalla se nos muestra el estado PROGRAM TERMINATION, lo que significa que ha terminado la ejecución del programa Cobol y que se ha devuelto el control al CICS. 



El próximo día, en un post adicional, continuaremos viendo cómo es el sistema de navegación a través de la herramienta CEDF. No deberíamos tener problemas en entenderlo ya que, al fin y al cabo, el proceso consta de una serie de pasos estándar que, sencillamente, se van repitiendo con cada una de las instrucciones CICS que posee nuestro programa Cobol.

Y eso es todo por hoy. Os emplazamos a la segunda parte del post para terminar de ver el funcionamiento del depurador CEDF. Nunca viene mal aprender cosas nuevas.

Saludos.

jueves, 4 de diciembre de 2014

Transacción CECI para ejecución de comandos CICS (1)

Una de las herramientas más empleadas en el entorno CICS es la denominada CECI. Se trata de una transacción muy útil que nos sirve para ejecutar comandos CICS en un terminal on-line y acceder a todos los recursos del entorno sin necesidad de codificar un programa Cobol.

La transacción CECI tiene acceso a todo el API del CICS y, por tanto, permite la ejecución de cualquier comando contenido en él. Normalmente se suele emplear para verificar, en el propio entorno on-line, si los comandos CICS que hemos incluido en nuestro programa Cobol se han codificado correctamente o no.



Si entramos en un terminal CICS e introducimos la transacción CECI, la primera pantalla que nos aparecerá será la siguiente.



Tal y como podemos apreciar, lo que se están mostrando son todos los comandos CICS que están disponibles para su uso: READ, RECEIVE, REWRITE, SEND, START, WRITE, etc... Dicho de otro modo, estas serían todas las instrucciones que podríamos embeber en los bloques CICS (aquellos delimitados por las sentencias EXEC CICS y END-EXEC) de un programa Cobol.

Desde esta primera pantalla de CECI, seleccionando cualquiera de las funciones listadas, podríamos realizar la ejecución de la instrucción CICS que deseemos.Y, lo que es más importante, dicha ejecución daría exactamente el mismo resultado que si lanzásemos la operación desde un programa Cobol.

A continuación examinaremos dos ejemplos de cómo se trabajaría con CECI. En primer lugar veremos cómo se mostraría un Mapset por el terminal si lanzásemos el comando SEND mediante la transacción CECI. Para ello, seleccionaremos el mapa JJ0005M.

Mostrar un Mapa mediante CECI

1º) En primer lugar tendríamos que introducir SEND en la línea de comandos.



2º) A continuación se nos mostraría una pantalla en la que tendríamos que seleccionar alguna de las opciones disponibles: CONTROL, MAP, PAGE, PARTNSET o TEXT.



En nuestro caso, como el objetivo es mostrar un mapa, recurriremos a la opción MAP. Por tanto, en la línea de comandos tendremos que añadir MAP a continuación de la función SEND.

SEND MAP

3º) Ahora pasaremos a una pantalla en la que se nos mostrarán todas las opciones disponibles para enviar un mapa al terminal CICS. En realidad, son todas las cláusulas que podrían acompañar a la sentencia SEND MAP cuando la codificamos en un programa Cobol.



Como vemos, aparecen las cláusulas FROM, LENGTH, DATAONLY, MAPSET, CURSOR, ERASE, etc... No debemos sentirnos intimidados por la gran cantidad de campos que aparecen en esta pantalla, en realidad no hace falta rellenarlos todos. Al igual que haríamos desde Cobol, sólo especificaremos aquella información que deseamos que acompañe al envío del Mapset.

Ahora, para el ejemplo en curso, nosotros sólo vamos a indicar el nombre del mapa. Para ello, incluiremos el literal (JJ0004M) tras la sentencia SEND MAP.

SEND MAP (JJ0004M)

4º) Finalmente, se nos mostrará el mapa indicado (JJ0004M, en nuestro caso). Como no hemos especificado ninguna información en la cláusula FROM, en la pantalla nos aparece un asterisco (*) en los campos que podrían mostrar algún dato (EQUIPO, N+PTOS, GOLES FAVOR y GOLES CONTRA).



El próximo día continuaremos repasando, tal y como habíamos prometido, otro ejemplo de cómo se trabajaría con CECI para realizar la creación de una Cola TS (Temporary Storage). Como veremos, al final todo se resume en aplicar una serie de pasos estándar en los que vamos seleccionando las opciones deseadas y rellenando las cláusulas opcionales que deben acompañar al comando CICS.

Y eso es todo. Ya sólo nos queda convocaros a la segunda parte del post, donde procuraremos que quede totalmente definida la forma de trabajo de la herramienta CECI.

Saludos.

Related Posts Plugin for WordPress, Blogger...