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.
Una Pregunta, si el regsitro tiene mas de 72 caracteres, como se hace ?
ResponderEliminarSaludos