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.

1 comentario:

Related Posts Plugin for WordPress, Blogger...