lunes, 20 de julio de 2015

JCL para buscar en múltiples Librerías (y 2)

Hace algunas semanas comenzamos a ver cómo podíamos implementar un JCL que nos permitiese realizar búsquedas de objetos en varias librerías a la vez. Recordemos que este Job nos puede ser muy útil cuando tengamos que buscar cualquier cadena de texto en los programas de una aplicación que esté compuesta de múltiples librerías.

En la primera parte del artículo estuvimos examinando varias de las fichas necesarias para codificar el proceso (ver post JCL para buscar Cobol en múltiples librerías - 1). Hoy vamos a terminar de revisar el resto de las fichas requeridas, de manera que ya tengamos la visión global del JCL de búsqueda.
 
5º) Librerías de Búsqueda: A continuación, en la ficha NEWDD tenemos que introducir todas las librerías en las que deseamos realizar la búsqueda de nuestra cadena de texto. Como vemos, en el ejemplo yo he introducido un total de 12 librerías.

//NEWDD  DD DSN=JJPR.V7R00.CON.JJMU.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJST.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJGU.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJAN.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJPL.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJRG.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJGM.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJTF.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJBL.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJPU.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJRV.FUENTES,DISP=SHR
//       DD DSN=JJPR.V7R00.CON.JJPR.FUENTES,DISP=SHR


6º) Nombre del fichero con las búsquedas realizadas: En la ficha OUTDD simplemente tendremos que indicar el nombre del fichero secuencial en el que deseamos que se almacenen los resultados de nuestra búsqueda múltiple. En el ejemplo, hemos decidido almacenar esta información en JJPR.V7R01.JJST.BUSCADOR.

//OUTDD  DD DISP=(NEW,CATLG,DELETE),SPACE=(TRK,(10,10)),
//          DSN=JJPR.V7R01.JJST.BUSCADOR 
            


7º) Parámetros de entrada: Aquí  tendremos que introducir la ficha SYSIN que nos permitirá enviar información de entrada a la utilidad ISRSUPC de comparación de códigos.

//SYSIN  DD *                                          


8º) Cadena de texto a buscar: Finalmente, tendremos que especificar el comando SRCHFOR y, a continuación, la cadena de texto que la herramienta debe buscar entre los objetos de todas las librerías indicadas anteriormente. En el ejemplo, tal y como se aprecia, se ha introducido el texto ‘CADENATX’.

SRCHFOR  'CADENATX'
/*
          

La ejecución del JCL con todos estos pasos puede demorarse bastantes minutos, sobre todo si hemos especificado una cantidad importante de librerías. En cualquier caso, si hemos detallado correctamente todas las fichas del proceso, el job debería completarse sin problema alguno.

Ejecución del JCL de Búsqueda en Librerías Múltiples


Imaginemos que el JCL termina sin generar ningún ABEND. Una vez finalizado el proceso, la información de la búsqueda quedará almacenada en el fichero secuencial JJPR.V7R01.JJST.BUSCADOR, donde podremos consultar los resultados tantas veces como deseemos.


Para ello, tendremos que ir a la opción 3.4 del ISPF y buscar los datasets JJPR.V7R01.JJST*. Al hacer esto, en mi terminal aparece la siguiente información.

Command - Enter "/" to select action               
------------------------------------------------------
            JJPR.V7R01.JJST.BUSCADOR              
            JJPR.V7R01.JJST.BUSCEXPL              
***************************** End of Data Set list ***


Como se aprecia, en el listado aparecen dos ficheros y uno de ellos es el que acaba de generar nuestro proceso de búsqueda: JJPR.V7R01.JJST.BUSCADOR.  A continuación, podríamos seleccionar este objeto y visualizar su contenido.

***************************** Top of Data ******************************
1  ISRSUPC   -   MVS/PDF FILE/LINE/WORD/BYTE/SFOR COMPARE UTILITY- ISPF
  LINE-#  SOURCE SECTION                    SRCH DSN:    JJPR.V7R00.CON.
                                                                     
                                                                     
  JJTD00CO CONCAT#(4)       ----------- STRING(S) FOUND ----------------
                                                                      
       7         PROGRAM-ID.     CADENATX.                           
      14        *   PROGRAMA    : CADENATX                           
    1695                MOVE 'CADENATX'       TO PROGRAMA-W          
                                                                     
1  ISRSUPC   -   MVS/PDF FILE/LINE/WORD/BYTE/SFOR COMPARE UTILITY- ISPF
      SEARCH-FOR SUMMARY SECTION            SRCH DSN:    JJPR.V7R00.CON.
                                                                     
 LINES-FOUND  LINES-PROC  MEMBERS-W/LNS  MEMBERS-WO/LNS  COMPARE-COLS  L
         3      7231209            1           5639           1:80   

              
THE FOLLOWING PROCESS STATEMENTS (USING COLUMNS 1:72) WERE PROCESSED:
   SRCHFOR  'CADENATX'                                              
                                                                    
THE FOLLOWING "SRH" FILE CONCATENATED DATA SETS WERE SPECIFIED:
   (1)    JJPR.V7R00.CON.JJMU.FUENTES                               
   (2)    JJPR.V7R00.CON.JJST.FUENTES                               
   (3)    JJPR.V7R00.CON.JJGU.FUENTES                               
   (4)    JJPR.V7R00.CON.JJAN.FUENTES                               
   (5)    JJPR.V7R00.CON.JJPL.FUENTES                               
   (6)    JJPR.V7R00.CON.JJRG.FUENTES                                
   (7)    JJPR.V7R00.CON.JJGM.FUENTES                               
   (8)    JJPR.V7R00.CON.JJTF.FUENTES                               
   (9)    JJPR.V7R00.CON.JJBL.FUENTES                               
  (10)    JJPR.V7R00.CON.JJPU.FUENTES                               
  (11)    JJPR.V7R00.CON.JJRV.FUENTES                               
  (12)    JJPR.V7R00.CON.JJPR.FUENTES                               
                
**************************** Bottom of Data ****************************


En la salida podemos observar que, una vez revisadas las 12 librerías, el literal ‘CADENATX’ ha sido encontrado en una única ubicación: se trata del objeto Cobol denominado JJTD00CO. De hecho, el texto buscado aparece hasta 3 veces en dicho programa. Esto se indica claramente al principio del fichero JJPR.V7R01.JJST.BUSCADOR.

  JJTD00CO CONCAT#(4)       ----------- STRING(S) FOUND -------
                                                                      
       7         PROGRAM-ID.     CADENATX.
      14        *   PROGRAMA    : CADENATX
    1695                MOVE 'CADENATX'       TO PROGRAMA-W
     


Conclusiones de la Búsqueda en Librerías Múltiples


Como se puede ver, la ejecución de este JCL buscador nos ha permitido revisar rápidamente varias librerías a la vez (hasta 12, en el ejemplo) y detectar cuáles son los objetos de las mismas que contienen la cadena de texto buscada. La información extraída queda almacenada en un fichero secuencial, donde será fácilmente accesible siempre que necesitemos acudir a ella.

Esta forma de búsqueda supone un considerable ahorro de tiempo frente al procedimiento que hay que realizar mediante la utilidad estándar Search-For Utility (3.14) del ISPF. Obviamente, quien quiera puede seguir usando la 3.14 para búsquedas múltiples. Sin embargo, aunque nos cueste al principio, yo creo que es importante adaptarse y aprender a utilizar las herramientas que nos van a consumir menos tiempo a largo plazo.


De hecho, si seguís los pasos que hemos examinado a lo largo del post, no creo que tengáis muchos problemas para elaborar vuestro propio JCL buscador. En cualquier caso, tened en cuenta que tendréis que adaptarlo a las características particulares de vuestra instalación y a las librerías que tenga asociadas vuestra aplicación.

Pues nada, eso es todo por hoy. Espero que, con lo explicado, os haya quedado clara la forma de realizar búsquedas múltiples. Si tenéis alguna duda al respecto, ya sabéis que podéis incluirla en los comentarios de aquí abajo y yo trataré de resolverla lo antes posible…

Saludos.

2 comentarios: