Desarrollando en Cobol y Natural sobre Plataforma Mainframe

jueves, 30 de enero de 2014

Estructura interna de un Mapa Cobol

Hoy vamos a ver cuál es la estructura de un Mapset (lo que comúnmente se denomina Mapa Cobol). Si siempre has trabajado con Cobol Batch, entonces los Mapsets no tendrán mucha utilidad para ti, pero realmente es un objeto imprescindible para todos aquellos que trabajamos con Cobol CICS on-line.

Cuando necesitamos crear un nuevo Mapa para nuestra aplicación Cobol, lo primero que hacemos es crear un objeto Mapset, dentro del cual vamos a ir definiendo la estructura que deseamos que tenga nuestra pantalla cuando se visualice.

 

Un Mapset realmente es una agrupación de Mapas. Por tanto, en el interior de un Mapset tendremos definidos uno o varios Mapas (según nos haga falta). Del mismo modo, dentro de cada Mapa definiremos uno o varios Campos.

Cada uno de los 3 niveles mencionados (Mapset, Mapa y Campo) tendrá su Macro correspondiente, que deberá ser definida en el código del objeto. La estructura interna del mapa será la siguiente:

1º) Definición de Mapset: mediante la macro DFHMSD. Esta macro servirá para agrupar varios mapas dentro del mismo mapset.

2º) Definición de Mapa: mediante la macro DFHMDI. Esta marcro sirve para definir un mapa como una colección de campos. Un Mapset puede tener varios Mapas.

3º) Definición de Campo: mediante la macro DFHMDF. Mediante esta macro podremos definir uno o varios campos para un Mapa determinado.

Por tanto, según lo visto, la estructura genérica del código de un mapset sería la siguiente:

DFHMSD   Mapset
   DFHMDI   Mapa 1
      DFHMDF   Campo 1-1
      DFHMDF   Campo 1-2
   DFHMDI   Mapa 2
      DFHMDF   Campo 2-1
      DFHMDF   Campo 2-2
DFHMSD TYPE=FINAL

Ejemplo codificado de Mapset

Como ejemplo, a continuación vamos a detallar el código de un Mapset / Mapa (denominado JJ0004M) que únicamente serviría para mostrar el texto "Hola Mundo" por pantalla.

JJ0004M  DFHMSD TYPE=DSECT,MODE=INOUT,TERM=ALL,STORAGE=AUTO,
               LANG=COBOL
*                                                                   
JJ0004A  DFHMDI SIZE=(24,80),LINE=1,COLUMN=1,COLOR=GREEN,HILIGHT=OFF,
               MAPATTS=(COLOR,HILIGHT),DSATTS=HILIGHT,CTRL=FREEKB   
         DFHMDF POS=(10,10),LENGTH=20,INITIAL='********************',
               COLOR=BLUE,ATTRB=(ASKIP,NORM)                        
         DFHMDF POS=(11,10),LENGTH=20,INITIAL='*                  *',
               COLOR=BLUE,ATTRB=(ASKIP,NORM)                        
         DFHMDF POS=(12,10),LENGTH=20,INITIAL='*  > HOLA, MUNDO!  *',
               COLOR=BLUE,ATTRB=(ASKIP,NORM)                        
         DFHMDF POS=(13,10),LENGTH=20,INITIAL='*                  *',
               COLOR=BLUE,ATTRB=(ASKIP,NORM)                        
         DFHMDF POS=(14,10),LENGTH=20,INITIAL='********************',
               COLOR=BLUE,ATTRB=(ASKIP,NORM)                        
*                                                                   
         DFHMSD TYPE=FINAL                                          
         END


Como vemos, en este código se aprecia claramente la estructura del Mapa. En primer lugar va la definición del Mapset JJ0004M con la macro DFHMSD. A continuación, se define el Mapa JJ0004A con la macro DFHMDI. Posteriormente, con la macro DFHMDF se incluyen todas las líneas de Campos que se van a necesitar en el mapa. Finalmente, se cierre la macro del Mapset con la declaración TYPE=FINAL.

Si compilamos, instalamos y ejecutamos con un programa Cobol el Mapset del ejemplo, por pantalla se mostraría lo siguiente.

          ********************
          *                  *
          *  > HOLA, MUNDO!  *
          *                  *
          ********************


Como este mapset es muy sencillo, la ejecución únicamente mostrará el mensaje: "Hola, Mundo". Obviamente, lo normal es que haya algún campo de entrada para recoger datos. Pero básicamente sirve para hacernos una idea de cómo funciona la estructura de macros de un mapa.

En principio, con lo visto en este post ya deberíamos tener una idea general bastante clara de cómo es la composición interna de un Mapset. Por supuesto, podemos usar herramientas que generen el código automáticamente (como SDF II), pero nunca viene mal saber codificar un mapa manualmente.

Si tenéis alguna duda, podéis incluirla en los comentarios y trataremos de aclararla lo antes posible (si entra dentro de lo que abarcan nuestros conocimientos, claro está).

Saludos.

jueves, 23 de enero de 2014

Herramienta CEMT: Carga de objetos en CICS (y 2)

Hace un tiempo vimos la forma en la que la herramienta CEMT nos podía ser útil para consultar el estado de nuestros programas en el CICS (ver post Herramienta CEMT - Consulta del estado de un Programa en CICS - 1).

Pues bien, tal y como dijimos, hoy vamos a completar la información indicando cómo hay que emplear CEMT para realizar la carga de un objeto en CICS (de manera que posteriormente pueda ser invocado por una Transacción).

Cargar programa en CICS

Para cargar el programa en el CICS, tendremos que hacer uso del comando NEWCOPY. Con él, se consigue que el CICS acceda a la última compilación disponible para el programa, independientemente de que sea la primera o la enésima compilación.

Para hacer NEWCOPY nos bastará con ver el Status del programa con la función SET, tal y como vimos anteriormente. Una vez que se esté mostrando la información, tendremos que introducir el comando "N" (NEWCOPY) entre las palabras clave "Pri" y "Ced". Podemos observar que, inicialmente, la longitud cargada del programa es nula: Leng (0000000000).

STATUS:  RESULTS - OVERTYPE TO MODIFY                  
 Prog(JJ0004CO) Leng(0000000000) Cob Pro Ena Pri N   Ced
    Res(000) Use(0000000000) Bel Uex Ful Qua Cic


A continuación pulsamos INTRO.



Si todo ha ido bien, se mostrará el mensaje "NORMAL" junto a la palabra clave "Ced". Esto significa que en el CICS ya se ha cargado la última compilación del programa (JJ0004CO). Ahora podremos observar que la longitud cargada ya es distinta de cero, en el ejemplo Leng(0000005760), valor que se corresponderá con el tamaño del programa.

STATUS:  RESULTS - OVERTYPE TO MODIFY                             
 Prog(JJ0004CO) Leng(0000005760) Cob Pro Ena Pri     Ced     NORMAL
    Res(000) Use(0000000000) Bel Uex Ful Qua Cic
           

Tras realizar esta acción, ya podremos invocar a nuestro programa principal mediante la Transacción que le hayamos asociado en su Grupo de Aplicaciones. Por supuesto, la ejecución de la Transacción podrá seguir dando errores, pero ya serán errores derivados del código de nuestro programa y no de la instalación del objeto en el CICS.

Nuevas compilaciones del programa

Cada vez que modifiquemos el código de nuestro programa, tendremos que recordar que debemos actualizar la versión que tenemos cargada en el CICS. Es un error típico olvidarse de realizar esta actualización en el sistema.

Si no hacemos nada, aunque hayamos compilado correctamente el programa Cobol con el JCL correspondiente, la invocación de la Transacción se irá a buscar la versión anterior del programa, ya que fue la última que llegamos a instalar en el CICS.

Por tanto, cada vez que modifiquemos y compilemos un programa, tendremos que ir al terminal CICS y volver a realizar la carga de la última compilación del objeto mediante la función NEWCOPY de la herramienta CEMT (del mismo modo que vimos en el apartado anterior).

STATUS:  RESULTS - OVERTYPE TO MODIFY                  
 Prog(JJ0004CO) Leng(0000000000) Cob Pro Ena Pri N   Ced
    Res(000) Use(0000000000) Bel Uex Ful Qua Cic


Si no se nos olvida realizar esta acción y seguimos todos los pasos que hemos ido comentando en el post para la herramienta CEMT, en principio no deberíamos tener ningún problema con las instalaciones a la hora de ejecutar nuestras Transacciones CICS. El proceso es, en realidad, bastante sencillo.

Pues nada. Esperamos que con esto hayamos resuelto los posibles problemas con los que os podáis encontrar en el futuro a la hora de utilizar CEMT.

Saludos.

miércoles, 22 de enero de 2014

Logotipo de Universo Cobol

Aprovechando la entrada en el nuevo año, hemos decidido hacer algunos cambios en la cabecera del Blog y fijar un logotipo que sea más reconocible para todos los lectores. La idea es que nadie tenga que estar buscando el título del blog y eso era algo que no quedaba muy claro hasta ahora.



No es un logotipo muy elaborado, pero algo es algo, sobre todo teniendo en cuenta cuál era la situación anterior. En el futuro, si todo va bien, ya crearemos un logotipo con un objetivo a más largo plazo. Por ahora, es suficiente con el que acabamos de lanzar.

Pues nada, bienvenido al Blog Universo Cobol.

Saludos.

viernes, 17 de enero de 2014

Herramienta CEMT: Estado de un Programa en CICS (1)

Una vez hemos definido un Grupo de Aplicaciones, necesitamos cargar el programa principal del mismo en la región CICS. Si no hacemos esto, la Transacción asociada al Grupo nunca podrá invocar correctamente a la Aplicación.

CEMT es una herramienta que se emplea para cargar el código binario de los programas en la región CICS, de manera que quede todo listo para su proceso de ejecución. De este modo, dicho programa podrá ser invocado por la Transacción que tenga asociada.

Si intentamos ejecutar el programa principal de nuestro Grupo de Aplicaciones sin hacer la carga requerida con CEMT, entonces la invocación con su Transacción devolverá el siguiente mensaje de error:

DFHAC2001 CICS Transaction is not recognized. Check that the transaction name is correct.

Menú Principal de CEMT

La entrada en el menú principal de CEMT deberá realizarse desde el terminal CICS (y no desde el terminal TSO). Para ello, simplemente escribiremos CEMT en el CICS y pulsaremos INTRO.



Así se nos mostrará un menú en el que aparecen las funciones disponibles. En principio, serán: Discard, Inquire, Perform y Set.

Status del Programa

Para ver el estado del programa Cobol principal, vamos a hacer uso de la función SET de la herramienta. Para ello, tendremos que introducir la siguiente sentencia en la línea de comandos de CEMT.

CEMT S PROG (JJ0004CO)

Como vemos, hemos de introducir el nombre del programa tras la declaración S PROG y, a continuación, pulsar INTRO.

STATUS:  RESULTS - OVERTYPE TO MODIFY                  
 Prog(JJ0004CO) Leng(0000000000) Cob Pro Ena Pri ___ Ced
    Res(000) Use(0000000000) Bel Uex Ful Qua Cic  
     

Nos aparecerán los resultados informativos asociados al programa JJ0004CO, que es el que hemos especificado en la declaración anterior.

Y eso es todo por hoy. El próximo día seguiremos viendo la forma en que se puede realizar la carga de los programas en CICS mediante la utilización de la herramienta CEMT. Os adelantamos que tendrá que ver con el empleo de la función NEWCOPY.

Saludos.

jueves, 16 de enero de 2014

Herramienta CEDA: Instalación de Transacción CICS (y 2)

Hace unos días veíamos cómo se podía definir un Grupo de Aplicaciones con la herramienta CEDA. Hoy vamos a completar dicho post viendo cómo se puede instalar una Transacción CICS que posteriormente usaremos para invocar al programa Cobol principal del Grupo.

 

Visualizar Grupo de Aplicaciones

Una vez dados de alta Programa, Mapa y Transacción en el Grupo de Aplicaciones, podemos realizar una consulta del mismo para verificar que los componentes se han creado correctamente y que no ha habido ningún problema con las definiciones.

Para ello usaremos el comando DISPLAY de la herramienta CEDA, que nos permitirá visualizar el contenido de un Grupo. Tendremos que teclear la siguiente sentencia en la línea de comandos.

DISPLAY GROUP (JJ0004)

En la declaración estamos indicando que se muestre toda la información disponible del Grupo de Aplicaciones JJ0004 (el grupo del ejemplo). Tras pulsar INTRO aparecerán todos los objetos listados.



Como vemos, en el listado aparecen los 3 componentes que se han dado de alta para el Grupo de Aplicaciones: programa JJ0004CO, mapa JJ0004M y transacción 0004.

Instalación de Transacción y Objetos

Finalmente, para activar los objetos del Grupo de Aplicaciones, hemos de proceder a Instalar los componentes del mismo. Esto, al igual que todos los pasos anteriores, también podrá ser realizado desde el menú de CEDA.

Para realizar la instalación de un componente, podemos recurrir al comando INSTALL de CEDA. Para ello, tendremos que insertar las siguientes sentencias en la línea de comandos, según se trate de un Programa, un Mapa o una Transacción.

CEDA INSTALL PROG (JJ0004CO)
CEDA INSTALL MAP (JJ0004M)
CEDA INSTALL TRANS (JJ0004)

Pulsando INTRO se realizaría la instalación del componente especificado y ya tendríamos nuestra tarea completada.

Hay una forma alternativa para realizar el proceso de instalación, que nos ahorrará tener que lanzar una sentencia para cada objeto. Para ello, tendríamos que visualizar, en primer lugar, los componentes del Grupo con el comando DISPLAY explicado más arriba.

DISPLAY GROUP (JJ0004)                                             
ENTER COMMANDS                                                     
 NAME     TYPE         GROUP                                   DATE
 JJ0004M  MAPSET       JJ0004   _                              13.353
 JJ0004CO PROGRAM      JJ0004   _                              13.353
 0004     TRANSACTION  JJ0004   _                              13.353


A continuación, introduciremos el comando "I" (INSTALL) junto a cada uno de los componentes del Grupo que deseamos instalar. Una vez marcados todos los objetos requeridos, procederemos a pulsar INTRO para confirmar la operación.



Si todo ha ido correctamente, junto a cada objeto se mostrará el mensaje: "INSTALL SUCCESSFUL". Esto signifca que su instalación se ha completado correctamente en el CICS. Ya no se precisará ningún paso adicinal, así que podremos abandonar la herramienta CEDA definitivamente.

INSTALL SUCCESSFUL

La primera vez que realicemos todo este proceso, nos parecerá que es un poco enrevesado y que tiene demasiados pasos. Pero en realidad son actuaciones bastante sencillas. Una vez las hayamos hecho 3 ó 4 veces ya nos parecerá algo trivial y bastante automático.

Y eso es todo por hoy. Esperamos haberos aclarado totalmente cuál es la forma de operar con CEDA a la hora de trabajar con Grupos de Aplicaciones y con Transacciones.

Saludos.

Related Posts Plugin for WordPress, Blogger...