T27DTAQ - Teknoda tips

Anuncio
Notas técnicas de AS/400 - Tips en detalle Nro. 27
(Lo nuevo, lo escondido, o simplemente lo de siempre pero bien explicado)
"Tips en breve/Tips en detalle" se envía con frecuencia variable y absolutamente sin cargo como un servicio a nuestros
clientes AS/400. Contiene principalmente notas técnicas y no contiene mensajes publicitarios.
Este mensaje se envía en concordancia con la nueva legislación sobre correo electrónico: Por sección 301,párrafo (a) (2)
(c) de S.1618 bajo el decreto s.1618 titulo 3º aprobado por el 105 congreso base de las normativas internacionales sobre
SPAM, este e-mail no podrá ser considerado SPAM mientras incluya una forma de ser removido
Conteste este mail con asunto “REMOVER” si no desea recibir más esta publicación. Si desea suscribir otra dirección
de e-mail para que comience a recibir los “Tips”, envíe un mensaje desde esa dirección a letter400@teknoda.com.ar,
aclarando nombre, empresa y cargo del suscriptor.
Vuelco de spool a archivos de base de datos en forma
automática, usando COLAS DE DATOS
Tema:
Backup, Administración.
Utilidad:
El procedimiento aquí detallado permite volcar spool a archivos *FILE en forma
automática, conforme ingresan a la cola de salida, y dejarlos disponibles para
salvar, transferir, pasar a un dispositivo óptico, etc.
Nivel:
Avanzado.
Versión:
Todas.
TIPS RELACIONADOS PARA REFERENCIAR: Nros. 4, 8, 12 y 23
Lista de Tips publicados hasta la fecha:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Modificación de los parámetros por default que rigen en los comandos del OS/400
Restricción de comandos pesados a modalidad batch
Cómo generar un entorno de prueba para año 2000
Cómo salvar y restaurar spool
Cómo agregar pantallas de confirmación/validación para comandos delicados
Defragmentación del espacio en disco no utilizado : STRDSKRGZ, ENDDSKRGZ
Manipulación de bases de datos desde programas CL, a través de Query/400
Generación de spool AS/400 en formato PDF (Adobe Acrobat Reader) para almacenar en CD´s
Cómo proteger columnas de un archivo físico o lógico
Cómo cambiar la pantalla de signon
Cómo automatizar transferencias de archivos con TCP/IP desde AS/400
Control de accesos sobre archivos de spool
Aproveche lo que ya tiene: FILE SERVING con NETSERVER/400
EMULACION 5250 vía Internet con lo que ya tiene instalado
Editor alternativo: Comando EDTF (Edit File)
Auditoría sobre objetos en AS/400
Cómo personalizar los comandos del menú de petición del sistema
Acceso a archivos multimiembros en un entorno cliente/servidor o SQL
Cómo agregar opciones de usuario al producto PDM
Auditoría sobre usuarios en AS/400
Cómo obtener línea de comandos en pantallas que no la tienen.
22.
23.
24.
25.
26.
Cómo enviar por e-mail objetos de QSYS.LIB
Cómo transferir archivos de spool a la PC usando Operations Navigator
Qué es el IFS y cómo accederlo
Curiosidades de la programación CL – Parte I
Cómo gestionar y controlar la seguridad a través del menú SECTOOLS – Parte I
Temas de próximos tips:


Cómo rutear usuarios a subsistemas según el nombre y no el dispositivo.
Curiosidades de la programación CL – Parte II
Resumen ejecutivo
Normalmente nos referimos a los archivos de spool como salidas aún no impresas que se encuentran
almacenadas dentro de colas de salida (objetos de tipo *OUTQ). Esta afirmación no es errónea, pero parte
de ella no es exactamente cierta. Las colas de salida constituyen una organización lógica de los archivos de
spool, porque realmente estos elementos están almacenados dentro de la biblioteca QSPL.
Este comportamiento debe considerarse, porque si se necesita manipular (salvar, transferir, etc.)
de alguna manera la información de los archivos de spool generados en el sistema, debe convertir los
archivos de spool en objetos que posteriormente serán salvados, convertidos, transferidos como cualquier
otro archivo.
Las colas de datos son una herramienta del OS/400 que permite automatizar este vuelco de spool a
archivos de base de datos, sin necesidad de trabajar manualmente con el comando CPYSPLF. Cuando se
necesitan transformaciones masivas de spool en archivos, por ejemplo, para salvarlo, o implementar un
sistema tipo COLD, este tip propone la solución,
Introducción: Salvar o manipular contenido de un archivo de spool
Los archivos de spool están físicamente almacenados como miembros dentro de objetos de tipo
*FILE, atributo PF-DTA, en la biblioteca del sistema QSPL. Dentro de estos archivos de QSPL, las salidas
impresas aparecen sin un formato comprensible y sin poder distinguir un archivo de spool de otro. Las
colas de salida, en realidad, contienen las direcciones donde el spool está almacenado. Por lo tanto, los objetos
de tipo *OUTQ permiten organizar el spool desde un punto de vista lógico. Ej: colas de salida por usuario,
por impresora o cola de salida de información confidencial (sueldos). Este es el motivo por el cual al salvar,
una cola de salida, no son salvados los archivos de spool que están dentro de ella.
Para poder salvar, transferir, o manipular contenido de archivos de spool, es necesario
convertirlos en miembros de un *FILE PF-DTA pero creado por nosotros. De esta forma, realizando un
backup del objeto en cuestión, se salvarían los archivos de spool.
Los pasos necesarios para convertir un archivo de spool en un miembro de un objeto *FILE con
atributo PF-DTA fueron especificados en Notas técnicas de AS/400 – Tips en detalle nro 4 – Cómo salvar
y restaurar spool. Como se podrá notar en el mencionado tip, los pasos a ejecutar son sencillos, pero poco
prácticos si se necesitan realizar para varios archivos de spool.
En las próximas secciones se analizará la creación de un programa que automáticamente convierta
los archivos de spool de una determinada cola de salida, conforme ingresan a la misma, en miembros de
un archivo físico de datos. En este esquema, los objetos de tipo *DTAQ o Colas de datos desempeñan un
importante papel.
Desde ya, esta puede ser una buena solución para implementar el backup del spool, o de una parte
importante del mismo, pero cualquier otra aplicación que requiera un vuelco masivo de archivos de spool en
archivos de datos pueden utilizar este mismo mecanismo. (Ej. un sistema de almacenamiento óptico,
transferencias a PC, etc.)
Colas de datos: Introducción.
Las colas de datos son objetos de tipo *DTAQ que pueden crearse en cualquier biblioteca y pueden ser
utilizadas para transferir datos entre programas que se ejecutan dentro del mismo job o en distintos trabajos.
A través de estos objetos es posible generar esquemas donde uno o varios jobs hacen un requerimiento
almacenándolo dentro de una cola de datos, y un trabajo receptor toma cada una de las peticiones y las
procesa. El envío y la recepción de entradas a colas de datos se realiza a través de programas del sistema
operativo llamados API’s (Application Programming Interface): QSNDDTAQ y QRCVDTAQ
respectivamente. El siguiente esquema muestra el uso general de las API’s dentro de los programas:
Para crear colas de datos se utiliza el comando CRTDTAQ. Las colas de datos tienen diferentes atributos,
entre ellos el parámetro Longitud máxima de entrada (palabra clave MAXLEN). Las entradas que se
almacenan dentro de una cola de datos no tienen un formato específico, sólo poseen longitud máxima
indicada en el momento de la creación de este objeto. Es importante notar que PROGA y también
PROGB deben “estar de acuerdo” en cómo se organiza la información dentro de la entrada. Ejemplo:
si se crea una cola de datos de longitud 100, se puede organizar la entrada de la siguiente manera: posición 1
a 6 el número de cliente y posición 7 a 36 el nombre del cliente y así hasta completar las 100.
Asociación entre colas de salida (*OUTQ) y colas de datos (*DTAQ)
Existe una interesante relación que puede establecerse entre los objetos de tipo *OUTQ y los objetos de tipo
*DTAQ. Cuando se crea una cola de salida, en los parámetros adicionales, se puede visualizar el parámetro
Cola de datos (palabra clave DTAQ). Si en este parámetro se especifica el nombre de una cola de datos
creada anteriormente, cada vez que un archivo de spool en estado RDY ingrese a la cola de salida, se
genera automáticamente una entrada en la cola de datos. La entrada almacenada contiene el nombre
completo del archivo de spool. Un programa que lee y procesa las entradas de la cola de datos puede convertir
el archivo de spool (cuyo nombre está mencionado en cada entrada) en un miembro de un archivo de base de
datos. El siguiente gráfico muestra los objetos involucrados en esta relación:
Observar en el esquema anterior, que el envío de las entradas hacia las colas de datos, o sea la llamada
a la API QSNDDTAQ se realiza de manera implícita por la relación establecida entre la cola de salida y
la cola de datos.
El programa CONVERSOR, además de copiar el archivo de spool como miembro de un archivo de base de
datos, también puede encargarse de depositarlo como un objeto más en un determinado directorio, con
extensión “.txt” y especificando la página de códigos a utilizar en la conversión. Esto puede realizarlo
utilizando el comando CPYTOSTMF (ver flechas rojas). De esta manera, los datos transferidos estarán
disponibles como “stream files” en el directorio del IFS que se haya seleccionado como destino de la copia.
Esta sería también la manera de automatizar la copia de archivos de spool como archivos con extensión
“.txt”. Manualmente se puede realizar desde Operations Navigator, haciendo “dragging” de un archivo de
spool hacia el escritorio de la PC.
Implementación del proceso de conversión
Como se menciona en el último párrafo de la sección anterior, la invocación a la API QSNDDTAQ es
consecuencia de la relación entre la cola de salida y la cola de datos. El formato de la entrada no es definido
por esta implementación, sino que está determinado y proporcionado por IBM de la manera siguiente:
Posición inicial
Longitud
Atributo
Contenido
13
10
*CHAR
23
10
*CHAR
33
6
*CHAR
39
10
*CHAR
Nombre del archivo en el spool.
49
4
Binario
Número de archivo de spool dentro del job.
53
10
*CHAR
Nombre de la cola de salida que contiene el archivo de spool.
63
10
*CHAR
Biblioteca que contiene la cola de salida.
Nombre completo del trabajo que generó el archivo de spool en el
siguiente orden: nombre del job, nombre de usuario y número de
job.
Las sentencias que componen el programa CL CONVERSOR son las siguientes (los números en rojo
corresponden a explicaciones sobre las sentencias):
PGM
DCL
DCL
DCL
DCL
DCL
DCL
DCL
DCL
DCL
DCL
RECIBIR:
11
VAR(&LONG) TYPE(*DEC) LEN(5 0) VALUE(128)
VAR(&WAIT) TYPE(*DEC) LEN(5 0) VALUE(-1)
VAR(&ENTRADA) TYPE(*CHAR) LEN(128)
VAR(&NROSPOOL) TYPE(*DEC) LEN(4)
VAR(&NROSPOOLC) TYPE(*CHAR) LEN(4)
VAR(&NOMJOB) TYPE(*CHAR) LEN(10)
VAR(&USUARIO) TYPE(*CHAR) LEN(10)
VAR(&NROJOB) TYPE(*CHAR) LEN(6)
VAR(&NOMSPOOL) TYPE(*CHAR) LEN(10)
VAR(&MIEMBRO) TYPE(*CHAR) LEN(10)
CALL
PGM(QRCVDTAQ) PARM('COLADATOS' 'QGPL' +
&LONG &ENTRADA &WAIT)
33
CHGVAR
CHGVAR
CHGVAR
CHGVAR
CHGVAR
CHGVAR
VAR(&NOMJOB) VALUE(%SST(&ENTRADA 13 10))
VAR(&USUARIO) VALUE(%SST(&ENTRADA 23 10))
VAR(&NROJOB) VALUE(%SST(&ENTRADA 33 6))
VAR(&NOMSPOOL) VALUE(%SST(&ENTRADA 39 10))
VAR(&NROSPOOLC) VALUE(%SST(&ENTRADA 49 4))
VAR(&NROSPOOLC) VALUE(%BIN(&NROSPOOLC))
44
CHGVAR
55
CPYSPLF
66
DLTSPLF
77
CHGPFM
&MIEMBRO ('SP' *CAT &NROJOB *CAT +
%SST(&NROSPOOLC 3 2))
FILE(&NOMSPOOL) TOFILE(QGPL/CONTENEDOR) +
JOB(&NROJOB/&USUARIO/&NOMJOB) +
SPLNBR(&NROSPOOLC) TOMBR(&MIEMBRO) +
CTLCHAR(*FCFC)
FILE(&NOMSPOOL) +
JOB(&NROJOB/&USUARIO/&NOMJOB) +
SPLNBR(&NROSPOOLC)
FILE(QGPL/CONTENEDOR) MBR(&MIEMBRO) +
TEXT(&NOMSPOOL *CAT &USUARIO *CAT +
&NOMJOB)
CMDLBL(RECIBIR)
22
GOTO
ENDPGM
Observaciones:
111... Invocación a la API QRCVDTAQ. Las llamadas a las API’s deben respetar el formato con el que
fueron definidas, es decir, orden y cantidad de parámetros, tipo y longitud de cada uno de ellos. En el
caso particular de QRCVDTAQ los parámetros son:

Cola de datos desde la cual se lee (*CHAR 10).

Biblioteca de la cola de datos (*CHAR 10).

Longitud de la entrada (*DEC (5 0)).

Entrada (*CHAR, la longitud para este ejemplo es 128).

Tiempo de espera. Especifica la cantidad de segundos que el programa QRCVDTAQ espera por
una entrada. El valor “0” indica “no esperar”, un valor mayor expresa la cantidad de segundos a
esperar, y el valor “-1” es esperar indefinidamente (*DEC (5 0)).
Los dos primeros parámetros pueden ser constantes, los restantes no.
Luego de la llamada a QRCVDTAQ, la variable &ENTRADA contiene los datos de un archivo de
spool a procesar.
222...
Las sentencias CHGVAR almacenan en las diferentes variables, los datos del archivo de spool que
están contenidos en la variable &ENTRADA, respetando el formato expresado en la tabla anterior.
333...
Se traduce de binario a caracteres la información correspondiente al número de archivo de spool
dentro del job.
444...
Dentro de la variable &MIEMBRO se “arma” el nombre que tendrá el miembro de archivo de base de
datos que contendrá el archivo de spool ya convertido.
555...
El mandato CPYSPLF es el encargado de convertir el archivo de spool a un miembro de un archivo
de base de datos. El objeto *FILE PF-DTA que se menciona (QGPL/CONTENEDOR) debe estar
creado con anterioridad. El valor *FCFC en el parámetro Caracteres de control (palabra clave
CTLCHAR) da la posibilidad futura de volver a bajar el miembro como archivo de spool, sin que
pierda su formato.
En este punto del programa se podría agregar el comando CPYTOSTMF (Copy to stream file). El
mandato toma un miembro de un archivo de base de datos (previamente generado por CPYSPLF) y lo
deposita en un determinado directorio que debe estar previamente creado. También es posible
seleccionar la página de códigos del archivo que se generará en el IFS.
666...
Luego que el archivo de spool ya fue convertido a miembro, puede ser eliminado de la cola de salida.
Observar que la lectura de la entrada desde la cola de datos no elimina el archivo de spool en la cola de
salida.
777...
A través del mandato CHGPFM, se asocia al miembro de archivo de base de datos una descripción
que asista al usuario en la identificación del spool.
Para poder implementar en forma exitosa esta aplicación es necesario cumplir con los siguientes pasos
en el orden indicado:
1
Crear una cola de datos: CRTDTAQ DTAQ(QGPL/COLADATOS) MAXLEN(128) . La longitud de
la entrada para colas de datos que se vinculan con colas de salida debe ser al menos de 128.
2
Crear una cola de salida y vincularla con la cola de datos creada en el paso 1:
CRTOUTQ OUTQ(QGPL/AGUARDAR) DTAQ(QGPL/COLADATOS)
3
Crear un archivo físico sin formato de registro:
CRTPF FILE(QGPL/CONTENEDOR) RCDLEN(133) MAXMBRS(*NOMAX)
Observar que la longitud de registro debe ser la del archivo de spool más ancho que se quiera almacenar
más uno. Esta posición extra se utilizará para guardar el caracter de control en caso de realizar el
comando CPYSPLF con el parámetro CTLCHAR establecido en *FCFC. El máximo de miembros
(parámetro MAXMBRS) debe estar en *NOMAX, porque el default de “1” no permitiría agregar al
archivo más de un miembro.
4
Crear un directorio en el IFS:
Este paso es necesario si se agrega en el programa el comando CPYTOSTMF que toma miembros
de un archivo físico de datos y los convierte en archivos continuos. Puede crearse desde pantalla
verde o a través del Operations Navigator.
CRTDIR DIR(‘/spool’)
5
Crear el fuente y compilar el programa CL
6
Considerar el sometimiento planificado del programa. Puede agregarse una entrada planificada
con el comando WRKJOBSCDE o incorporar en un subsistema un trabajo de arranque automático con el
comando ADDAJE. Tener en cuenta la frecuencia de apagado del sistema.
Una vez completados estos pasos, la información convertida queda disponible para salvarla, transferirla, etc.
Puede utilizarse el comando SAVOBJ sobre el archivo CONTENEDOR para salvar los miembros convertidos
o pueden procesarse con alguna herramienta los archivos de texto depositados en el directorio /spool.
Para tener en cuenta...

Una misma cola de datos puede estar vinculada con más de una cola de salida.

Más de un trabajo puede recibir datos de una misma cola de datos.

Los comandos existentes para trabajar con colas de datos son WRKDTAQ, CRTDTAQ y
DLTDTAQ. Además de las API’s ya nombradas, existe también QCLRDTAQ que se utiliza para
eliminar las entradas presentes en una cola de datos (parámetros cola de datos y biblioteca).

Vaciar las entradas de una cola de datos con la API QCLRDTAQ no reduce el tamaño del objeto a su
valor mínimo, por lo tanto se aconseja utilizar los comandos DLTDTAQ y CRTDTAQ.

A partir de V4R5 existen dos nuevos parámetros en el comando CRTDTAQ: Tamaño de la cola y
Reclamación automática. El parámetro Tamaño de la cola permite especificar un número de entradas
inicial (por default 16 entradas) y un máximo de tamaño que el objeto *DTAQ puede alcanzar. Si el
parámetro Reclamación automática es establecido en *YES, el almacenamiento asignado para la
cola de datos es reclamado cuando el objeto *DTAQ está vacío.

Una vez que el miembro fue procesado, puede eliminarse del archivo de base de datos con el
comando RMVM. Esto no debería realizarse si el objetivo es salvar el archivo CONTENEDOR.

Es posible también automatizar el camino inverso volviendo a generar los archivos en el spool. El
comando CPYFRMSTMF convierte un archivo “.txt” en un miembro de un archivo de base de datos.

Si el trabajo que ejecuta el programa convertidor permanece activo por muchos días, considerar la
posibilidad de someterlo especificando en el parámetro adicional Anotaciones de mensajes con el
valor Nivel establecido en “0”. Cada entrada procesada genera varios mensajes en la joblog.
Copyright Octubre 2001 Teknoda S.A. - AS/400 y OS/400 son marcas registradas de IBM.
Dudas o consultas a gmperez@teknoda.com.ar o nsalmun@teknoda.com.ar.
Documentos relacionados
Descargar