Desarrollando en Cobol y Natural sobre Plataforma Mainframe

lunes, 13 de julio de 2015

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

Cualquier programador Cobol que haya trabajado con la herramienta ISPF conoce la ventana “Search-For Utility” (opción 3.14).  Dicha utilidad resulta enormemente cómoda para localizar una cadena de texto entre los componentes de una determinada librería. Por desgracia, la opción 3.14 no nos permite buscar algo en varias librerías a la vez. Hoy veremos una forma de solucionar este problema y de llevar a cabo dicha acción.


Buscar algo en varias librerías a la vez

 

Imaginaos, como me pasó a mi hace algunas semanas, que tuviésemos que identificar cuáles son los programas de nuestra aplicación que invocan a un determinado objeto. Si nuestro sistema tiene una única librería, podremos usar la utilidad Search-For Utility y obtener el resultado rápidamente. Por desgracia, la instalación de este cliente tiene hasta 12 librerías distintas y, por tanto, sería algo tedioso ejecutar las búsquedas una a una con la opción 3.14 del ISPF. ¿Cómo podríamos agilizar este proceso?

Una de las formas de subsanar este problema sería crearnos un JCL que vaya ejecutando, de forma secuencial, la búsqueda de la cadena en cada una de las librerías afectadas. Esta es la solución que vamos a analizar hoy y, al final del post, no os debería resultar difícil replicar el procedimiento en vuestra propia instalación.


Para abordar esta tarea, en primer lugar voy a mostrar uno de los Jobs que suelo emplear para realizar las búsquedas en múltiples librerías.

//SEARCH1B JOB (0,AT60,1440,0005),                         
//             '60360000000.CDD',MSGLEVEL=(1,1),        
//             MSGCLASS=X,CLASS=A,REGION=4M,NOTIFY=&SYSUID
//*                                                     
//BORRAR1  EXEC PGM=IEFBR14
//*                                
//FICHERO  DD  DSN=JJPR.V7R01.JJST.BUSCADOR,         
//             DISP=(MOD,DELETE),                       
//             SPACE=(TRK,0),                           
//             UNIT=DISCO                                
//*                                                     
//BORRAR1A EXEC PGM=ABEN3333,                           
//             COND=(4,GE,BORRAR1)                      
//CTRNORST DD  DUMMY                                    
//*                                                     
//SEARCH  EXEC PGM=ISRSUPC,                           
//            PARM=(SRCHCMP,'')                          
//*                                     
//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
//* 
//OUTDD  DD DISP=(NEW,CATLG,DELETE),SPACE=(TRK,(10,10)),
//          DSN=JJPR.V7R01.JJST.BUSCADOR           
//SYSIN  DD *                                         
SRCHFOR  'CADENATX'
/*


A continuación, voy a intentar explicaros con un poco de detalle qué es lo que tenemos que especificar en cada una de las fichas del JCL anterior.

Fichas del JCL de búsqueda en librerías múltiples



A la hora de tratar de trasladar a nuestras propias librerías cualquier JCL que encontremos publicado en un blog, lo importante es que tengamos claro para qué sirve cada una de las fichas de las que se compone. En caso contrario, lo más probable es que, al menor contratiempo, ya no seamos capaces de adaptar el código.

Para que este proceso os resulte lo más sencillo posible, vamos a ir repasando en detalle cada una de las fichas anteriores.

1º) Borrado del fichero de salida: En primer lugar, vamos a proceder a borrar el fichero donde se van a volcar los datos obtenidos por el proceso. Hay que tener en cuenta que el JCL va a usar un fichero secuencial para ir almacenando toda la información que vaya recogiendo en la búsqueda por las distintas librerías. Y, como este dataset podría estar ya creado debido a una ejecución previa, lo primero que tenemos que hacer es un borrado del mismo.

//BORRAR1  EXEC PGM=IEFBR14


2º) Nombre del fichero a borrar: En la ficha FICHERO tendremos que introducir el nombre del fichero secuencial que debe ser borrado por la utilidad IEFBR14 (especificada en el paso anterior). En el ejemplo, se trata del fichero JJPR.V7R01.JJST.BUSCADOR.

//FICHERO  DD  DSN=JJPR.V7R01.JJST.BUSCADOR,        
//             DISP=(MOD,DELETE),                      
//             SPACE=(TRK,0),                          
//             UNIT=DISCO



3º) Control de errores: En la ficha BORRAR1A establecemos un control de errores del paso anterior. En el caso de que, al ejecutar BORRAR1, se obtenga un código de retorno RC (Return Code) igual o mayor que 04, se lanzará el programa ABEN3333. Este paso no es obligatorio y lo incluiremos en nuestro JCL sólo si queremos establecer una gestión de errores específica en un proceso concreto.

//BORRAR1A EXEC PGM=ABEN3333,                          
//             COND=(4,GE,BORRAR1)                     
//CTRNORST DD  DUMMY
                                  

4º) Utilidad de Búsqueda: En la ficha SEARCH incluiremos una invocación, mediante el comando PGM, a la utilidad ISRSUPC. Esta herramienta forma parte del catálogo estándar de servicios y permite comparar códigos mediante JCL. En la cláusula PARM se especificarán los parámetros con los que se debe ejecutar dicha utilidad.

//SEARCH  EXEC PGM=ISRSUPC,                          
//            PARM=(SRCHCMP,'')



El próximo día, en un nuevo post, continuaremos viendo cómo se debe implementar el Job para realizar una búsqueda en varias librerías a la vez. Recordad que es importante tener claro en qué consiste cada una de la fichas del JCL antes de ponerse a lanzar el proceso sin ton ni son.

Pues nada, eso es todo por hoy. Quedáis invitados a la segunda parte del artículo, en la que espero que os quede totalmente clara la forma en la que hay que codificar este procedimiento.

Saludos.

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...