Desarrollando en Cobol y Natural sobre Plataforma Mainframe

jueves, 18 de septiembre de 2014

Utilización de Ficheros In-Stream en JCL

En ocasiones, cuando deseamos probar un procedimiento o un programa que acabamos de codificar, no queremos perder el tiempo creando todos los ficheros secuenciales precisados por el mismo. En esos casos, por contra, nuestro objetivo es completar dicha prueba en el menor tiempo posible. Afortunadamente, para cubrir esta necesidad disponemos de los ficheros In-Stream.

Los ficheros In-Stream son aquellos cuyos registros se definen en el propio código del JCL, eliminando así la necesidad de crear un dataset secuencial para almacenarlos. La ejecución del JCL leerá esos registros in-stream de manera idéntica a como lo haría si estuviesen contenidos en un fichero secuencial estándar.



A continuación, mostramos un ejemplo de utilización de un fichero In-Stream en un paso JCL. En particular, aquí se está empleando en conjunción con la utilidad IEBGENER.

//PASO1    EXEC PGM=IEBGENER                          
//SYSPRINT DD SYSOUT=*                                
//SYSIN    DD DUMMY                                   
//SYSUT2   DD SYSOUT=*                                
//SYSUT1   DD DATA *    INICIO IN-STREAM              
1111111111111111111111111111111111111111111111111111111
2222222222222222222222222222222222222222222222222222222
3333333333333333333333333333333333333333333333333333333
4444444444444444444444444444444444444444444444444444444
5555555555555555555555555555555555555555555555555555555

/* FIN IN-STREAM                                      
// 
                                                 

En este ejemplo, la idea es que el programa IEBGENER recoja los registros de un fichero de entrada (en la card SYSUT1) y los envíe a la salida (card SYSUT2). Debido a que en la salida estamos incluyendo la expresión SYSOUT=*, entonces lo que se hará es enviar los registros leidos al SPOOL.

Como se puede observar, en la DD de la card SYSUT1 no estamos incluyendo una declaración DSN seguida del nombre del fichero secuencial de entrada, como se haría en un proceso estándar. En su lugar, estamos provisionando la cláusula DATA *, que es la que marca el inicio del fichero In-Stream.

Bajo la declaración DATA * se deben introducir los registros de datos que formarán parte de nuestro fichero. En el ejemplo vemos que aparecen 5 registros de 55 posiciones cada uno. Su contenido se detalla del mismo modo que si estuviésemos escribiendo la información en un fichero secuencial.

//SYSUT1   DD DATA *    INICIO IN-STREAM              
1111111111111111111111111111111111111111111111111111111
2222222222222222222222222222222222222222222222222222222
3333333333333333333333333333333333333333333333333333333
4444444444444444444444444444444444444444444444444444444
5555555555555555555555555555555555555555555555555555555

/* FIN IN-STREAM 

Cuando ejecutemos este paso JCL, la utilidad IEBGENER leerá los 5 registros del fichero In-Stream de manera exactamente igual a como lo haría si los estuviese recuperando de un dataset secuencial. La salida se mostrará en el SPOOL, tal y como habíamos indicado.

 COMMAND INPUT ===>                                           
IEF142I JJ00Z PASO1 - STEP WAS EXECUTED - COND CODE 0000   
IEF285I   JJ00.JJ00Z.JOB04550.D0000102.?         SYSOUT 
IEF285I   JJ00.JJ00Z.JOB04550.D0000103.?         SYSOUT 
IEF285I   JJ00.JJ00Z.JOB04550.D0000101.?         SYSIN  
IEF373I STEP/PASO1   /START 2014157.0931                      
IEF032I STEP/PASO1   /STOP  2014157.0931                      
        CPU:     0 HR  00 MIN  00.00 SEC    SRB:     0 HR  00 M
        VIRT:    60K  SYS:   308K  EXT:        0K  SYS:    1121
IEF375I  JOB/JJ00Z/START 2014157.0931                      
IEF033I  JOB/JJ00Z/STOP  2014157.0931                      
        CPU:     0 HR  00 MIN  00.00 SEC    SRB:     0 HR  00 M
DATA SET UTILITY - GENERATE                                   
IEB352I WARNING: ONE OR MORE OF THE OUTPUT DCB PARMS COPIED FRO
                                                              
PROCESSING ENDED AT EOD                                       
111111111111111111111111111111111111111111111111111111111111111
222222222222222222222222222222222222222222222222222222222222222
333333333333333333333333333333333333333333333333333333333333333
444444444444444444444444444444444444444444444444444444444444444
555555555555555555555555555555555555555555555555555555555555555

******************************** BOTTOM OF DATA ***************

Se puede observar como, al final de la impresión del SPOOL, aparece el contenido de los 5 registros que habíamos dado de alta en nuestro fichero In-Stream. La información mostrada no se puede diferenciar de la que se visualizaría si esos 5 registros hubiesen sido recuperados de un fichero secuencial de entrada.

Esta es una forma muy fácil de realizar pruebas rápidas sobre programas creados o modificados, ya que nos evita tener que dar de alta todos los ficheros secuenciales que se van a utilizar y, además, así no tenemos que estar cambiando los datos de los registros contenidos en ellos. En ocasiones nos ayudará a ahorrar bastante biempo.

En principio, el paso In-Stream es muy sencillo y, por tanto, no debería producir ningún error de ejecución, siempre y cuando lo especifiquemos de la forma que os hemos indicado más arriba. Obviamente, el contenido de los registros in-stream sí que puede (y debe) ser modificado.

Pues nada, esperamos que lo comentado os haya ayudado a descubrir una forma más rápida de probar los programas. Siempre viene bien saber que existe esta opción, aunque luego finalmente nos decidamos a usar la forma más tradicional.

Saludos.

1 comentario:

  1. Una Pregunta, si el regsitro tiene mas de 72 caracteres, como se hace ?

    Saludos

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...