Archivo lógico sin campos clave

Anuncio
Información sobre Power Systems, incluidos AS/400, iSeries y System i
Año 27 - Febrero 2013
Nº 288
COLABORACIONES
SUMARIO
Mandatos que pasan desapercibidos
Tal y como avanzan los lenguajes de
programación, el CL no parece que sea
muy glamorouso. ¡Ni mucho menos! Es
práctico, efectivo y tiene grandes posibilidades. Una de mis características favoritas es la habilidad de ampliar el lenguaje
CL mediante la creación de sus propios
mandatos. He utilizado esta nueva característica en mi beneficio durante muchos
años y me sorprende encontrar cuantos
programadores no lo han utilizado nunca.
En este artículo vamos a conocer las ventajas de crear mandatos y algunos ejemplos de cómo hacerlo.
He visto que muchas empresas utilizan el mandato CALL únicamente para
llamar a un programa. El mandato CALL
funciona en todas las instancias y normalmente es suficiente. Ahora bien, puede
escribir un mandato como una interfase
alternativa a un programa. Ejecutar el
mandato es lo mismo que llamar al programa, pero el mandato tiene ciertas ventajas. Estas son algunas.
Las Ventajas de los mandatos sobre un
CALL:
1. Los parámetros clave son más fáciles de leer que los parámetros posicionales
Pongamos que necesita cambiar un
programa CL. ¿Cuál de los dos siguientes
mandatos preferiría ver si está leyendo un
código fuente?
Sigue en página 5
Como crear ayudas para mandatos
Mejorar las posibilidades del propio
IBM i creando uno sus propios mandatos
es muy gratificante y eficiente, pero un
mandato sin un texto de ayuda es como
hacer huevos a la cazuela sin salsa. Afortunadamente, generar textos de ayuda
para un mandato es muy sencillo gracias
a una técnica que aprendí de un programador llamado Chris Wages. Así se hace.
Primero debemos disponer de un mandato. Este es el ejemplo de código fuente
del mandato DOIT.
He creado y probado el mandato y
funciona correctamente. Ahora, a por el
texto de ayuda. Utilizaremos el mandato
GENCMDDOC (Generar Documentación del mandato).
Sigue en página 10
Archivo lógico sin campos clave
Febrero 288.indd 1
Consulting
Archivo lógico sin campos clave 2
Cómo se lee un archivo
primario2
Cómo usar más de un campo
clave en un opcode CHAIN
3
Diferencia entre archivo físico
y archivo físico fuente
4
Cómo borrar objetos tipo File
excepto los archivos físicos
fuente4
Cómo copio un listado de un
archivo spool a un miembro de
un archivo físico fuente
4
¿Genera un journaling sobre un
archivo físico con múltiples
miembros registros duplicados?4
Colaboraciones
Mandatos que pasan
desapercibidos5
Como crear ayudas para
mandatos10
CONSULTING
Un archivo lógico es una vista de un
archivo físico. En la mayoría de los casos
se crea para definir una vía de acceso específica. Pero también podría crearse una
para seleccionar ciertos campos de un archivo físico. Pero hay una pequeña confusión de términos. Una vista SQL es
algo muy distinto a un archivo lógico,
aunque resulta muy similar. En modo nativo, un programa RPG puede utilizar un
archivo lógico sin la ‘K’ en la spec ‘F’.
Puede establecerse en *loval y leer registros del archivo. No creo que puedas esperar ningún orden de registros cuando
haces esto.
Precio: 7 Euros
Tanto los archivos físicos como los
lógicos pueden ser creados sin claves o
con claves. Se puede acceder a ambos
con RPG tengan o no tenga claves. Si
fueron creados con claves puede accederse a ellos vía RPG sin claves siendo la
secuencia la “secuencia de llegada” (arrival sequence), el orden en que las filas
aparecen en el disco físico. Esto no es un
error que será destacado. Una SQL TABLE se implementa como un caso especial de un archivo físico. Una SQL
VIEW se implementa como un caso especial de archivo lógico.
Casos Prácticos
Transferencia de contenidos en la
Industria Gráfica 14
Sigue en página 2
08/03/13 9:28
CONSULTING
Pregunta Usuario:
Si utilizo un archivo lógico sin campos clave en un programa RPG, ¿Dará lugar a un error?
Respuesta ATT
Un archivo lógico es una vista de un archivo físico. En
la mayoría de los casos se crea para definir una vía de acceso específica. Pero también podría crearse una para seleccionar ciertos campos de un archivo físico. Pero hay una
pequeña confusión de términos. Una vista SQL es algo
muy distinto a un archivo lógico, aunque resulta muy similar. En modo nativo, un programa RPG puede utilizar un
archivo lógico sin la ‘K’ en la spec ‘F’. Puede establecerse
en *loval y leer registros del archivo. No creo que puedas
esperar ningún orden de registros cuando haces esto.
Tanto los archivos físicos como los lógicos pueden ser
creados sin claves o con claves. Se puede acceder a ambos
con RPG tengan o no tenga claves. Si fueron creados con
claves puede accederse a ellos vía RPG sin claves siendo la
secuencia la “secuencia de llegada” (arrival sequence), el
orden en que las filas aparecen en el disco físico. Esto no es
un error que será destacado. Una SQL TABLE se implementa como un caso especial de un archivo físico. Una
SQL VIEW se implementa como un caso especial de archivo lógico. Observe que aunque los campos lógicos pudieran tener claves, una SQL VIEW no puede tener una clave.
Pregunta Usuario:
Cuando declaro un archivo, y en la designación de archivo coloco un ‘P’ al archivo primario, entiendo que
utilizará el ciclo lógico de RPG para leer el archivo en lugar de los opcodes de archivo del tipo read/chain,
etc… Pero, ¿podría alguien decirme como se lee este archivo primario? No he podido encontrar la respuesta
por mi mismo. Si alguien pudiera describirme el proceso de lectura del archivo primario, sería de gran ayuda.
Respuesta ATT
Básicamente, el Ciclo RPG realiza un loop “Hacer hasta
que no termine el archivo” y lee registro a registro. Solo se
codifica la lógica dentro del loop, esto es el procesamiento
que se ha de realizar para cada registro. Es posible especifi-
ATTITUDES Nº 287
Febrero 288.indd 2
car lógica de inicialización, finalización (LR) y “level
break”(total). Pero en lo más básico, el programa del archivo primario es sencillamente un programa que procesa cada
registro en un archivo conductor.ran tener claves, una SQL
VIEW no puede tener una clave.
2
Enero 2013
08/03/13 9:28
Pregunta Usuario:
¿Cómo usar más de un campo clave en un opcode CHAIN?
Tengo un archivo físico que contiene tres campos claves y quisiera saber cómo utilizar los tres campos clave
en un opcode CHAIN.
Respuesta ATT
Utilice el código de operación KLIST y defina los tres
campos ahí. Luego utilice el KLIST para encadenar
CHAIN el registro. En el Manual de referencia de RPG sobre el tópico “CHAIN” dice: Si el fichero es un archivo
descrito externamente, search-arg puede ser también una
clave compuesta en la forma de un nombre de KLIST, una
lista de valores o %KDS.
ATTITUDES Nº 288
Febrero 288.indd 3
De modo que puede listar los campos clave en KLIST o
bien, los puede listar en la propia instrucción CHAIN, o
también puede listarlos en una estructura de datos clave. El
manual de referencia del leguaje es donde encontrará las
respuestas a este tipo de preguntas.
3
Febrero 2013
08/03/13 9:28
Pregunta Usuario:
¿Cuál es la diferencia entre archivo físico y archivo físico fuente?
Respuesta ATT
El archivo físico fuente (PF-SRC) contiene el código
fuente del programa. PF-DTA contiene los datos. El archivo PF-SRC contiene un miembro por cada código fuente
del programa. El archivo PF-DTA contiene uno o más
miembros, cada uno contiene un número de registros. Espero haber resuelto su duda.
Pregunta Usuario:
Quiero borrar objetos tipo File excepto los archivos físicos fuente.
He pasado el output del mandato DSPOBJD a un archivo de base de datos. Ahora quiero borrar todos los
objetos del tipo “*FILE” y atributo de objeto “PF” pero sin borrar los archivos físicos fuente (PF-SRC).
¿Cómo puedo hacerlo?
Respuesta ATT
Un archivo fuente debe tener el atributo PF-SRC. De
modo que primero tiene que borrar los objetos LF (lógicos)
y luego los archivos físicos (PF-DTA). Si existieran en una
biblioteca o dos, la manera más sencilla sin programar es
utilizar la opción “User Defined PDM”. Si hace WRKOBJPDM xxxx donde xxxx es el nombre de su biblioteca.
Luego pulsa F16 y llega al menú donde puede crear una
opción PDM. Como DF DLTF &/&N. Pulse Intro y luego
F17, para realizar un filtro y seleccionar solo los objetos
LF. Ahora ponga DF en la primera opción del subfichero,
pulse F13 para repetir hasta el final e Intro. Finalmente
vuelva atrás y cambie su filtro de LF a PF y repita el proceso.
Pregunta Usuario:
¿Cómo copio un listado de una archivo spool a un miembro de un archivo físico fuente?
Por accidente, borrÉ el miembro fuente, pero dispongo de una copia del spool tomada con la opción 6. Me
gustaría convertir el archivo de spool al miembro borrado.
Respuesta ATT
Paso 1 - CRTPF QTEMP/WFILE RCDLEN(133)
Paso 2 - CPYSPLF QPSUPRTF QTEMP/WFILE (Su
job name/number)
Paso 3 - Utilizar WRKQRY para crear un nuevo archivo
PF. Defina campos de resultado para analizar los registros
de entrada en los 3 campos necesarios para un archivo físico fuente. Utilice también Select para omitir los registros
del encabezamiento de página.
Paso 4 - Utilizar CPYF para copiar este nuevo archivo
en
su
miembro
de
archivo
fuente.
Utilice
FMTOPT(*CVTSRC)
Pregunta Usuario:
¿Realizar un journaling sobre un archivo físico con múltiples miembros podría causar registros duplicados?
La DDS del archivo no tiene UNIQUE.
Respuesta ATT
Realizar journals en si mismo no tendría efecto en la
creación o existencia de registros duplicados, dado que el
journaling no genera registros en ningún caso. Ahora bien,
ATTITUDES Nº 288
Febrero 288.indd 4
al revisar entradas de un journal, puede averiguar de donde
vienen los duplicados. Los duplicados están permitidos en
el archivo si no se ha establecido el atributo UNIQUE.
4
Febrero 2013
08/03/13 9:28
COLABORACIONES
Mandatos que pasan
desapercibidos
Tal y como avanzan los lenguajes de programación, el
CL no parece que sea muy glamorouso. ¡Ni mucho menos! Es práctico, efectivo y tiene grandes posibilidades.
Una de mis características favoritas es la habilidad de ampliar el lenguaje CL mediante la creación de sus propios
mandatos. He utilizado esta nueva característica en mi
beneficio durante muchos años y me sorprende encontrar
cuantos programadores no lo han utilizado nunca. En este
artículo vamos a conocer las ventajas de crear mandatos y
algunos ejemplos de cómo hacerlo.
He visto que muchas empresas utilizan el mandato
CALL únicamente para llamar a un programa. El mandato
CALL funciona en todas las instancias y normalmente es
suficiente. Ahora bien, puede escribir un mandato como
una interfase alternativa a un programa. Ejecutar el mandato es lo mismo que llamar al programa, pero el mandato
tiene ciertas ventajas. Estas son algunas.
Ventajas de los mandatos sobre un CALL
1. Los parámetros clave son más fáciles de leer que los
parámetros posicionales
I have noticed that many shops use the CALL command exclusively to start execution of a program. CALL
works in all instances and is often sufficient. However,
you can write a command as an alternative interface to a
program. Running the command is the same as calling the
program, but the command has certain advantages. Here
are some of them.
CALL
ATTITUDES Nº 288
Febrero 288.indd 5
Pongamos que necesita cambiar un programa CL.
¿Cuál de los dos siguientes mandatos preferiría ver si está
leyendo un código fuente?
¿Prefiere la versión CALL?
PGM(MYPGM) PARM('QCUSTCDT QIWS
' 'CUSTOMER
'*FIRST' 'CUSTOMER' '*REPLACE')
5
QTEMP
' +
Febrero 2013
08/03/13 9:28
COLABORACIONES
O bien, ¿la versión del mandato?
MYCMD
FROMFILE(QIWS/QCUSTCDT) TOFILE(QTEMP/CUSTOMER) +
FROMMBR(*FIRST) TOMBR(CUSTOMER) MBROPT(*REPLACE) Personalmente me quedo con la del mandato, porque
me da mucha más información de lo que está pasando.
innecesarios.
Pongamos que necesita proporcionar valores para los
parámetros 1, 2 y 10 en un CALL a un programa MYPGM.
¿Cuál de entre las siguientes prefiere?
2. Cuando utilizo los nombres de los parámetros, no es
necesario utilizar marcadores de posición para parámetros
CALL
PGM(MYPGM) PARM(&ENDDATE &COMPANY X X X X X X X CLOSE)
o…
MYCMD ENDDATE(&ENDDATE) COMPANY(&COMPANY) OPTION(CLOSE) De nuevo, prefiero la segunda.
rámetro del tipo un número de compañía decimal empacado de dos dígitos. Para llamar al programa desde otro
programa se requiere que el número de compañía coincida
en tipo y tamaño.
3. Las reglas de los valores de los parámetros son más
relajadas al usar un mandato que al usar un CALL.
Pongamos que el programa MYPGM requiere un pa-
DCL
DCL
CHGVAR
CALL
ATTITUDES Nº 288
Febrero 288.indd 6
VAR(&COMPANY) TYPE(*CHAR) LEN(3)
VAR(&NCOMPANY) TYPE(*DEC) LEN(2 0)
VAR(&NCOMPANY) VALUE(&COMPANY)
PGM(MYPGM) PARM(&NCOMPANY) 6
Febrero 2013
08/03/13 9:28
COLABORACIONES
Pero si en cambio llama al programa a través de un mandato, el procesador del mandato convierte los datos al tipo y
tamaño requerido por usted.
DCL
MYCMD
VAR(&COMPANY) TYPE(*CHAR) LEN(2 0)
COMPANY(&COMPANY) Diga adiós a aquellas variables intermedias molestas
que llenan su código.
En este ejemplo, MYPGM requiere tres parámetros.
Pongamos que quiere llamar al programa MYPGM con
unos valores de los parámetros extraídos del área de datos.
Así se haría con un CALL.
4. Si la definición del mandato lo permite, puede utilizar expresiones en los parámetros del mandato. No puede
utilizar expresiones en el parámetro PARM del mandato
CALL.
DCL
DCL
DCL
DCL
CHGVAR
CHGVAR
CHGVAR
CALL
VAR(&DATA) TYPE(*CHAR) LEN(1024)
VAR(&PRTTXT) TYPE(*CHAR) LEN(30)
VAR(&COMPANY) TYPE(*DEC) LEN(2)
VAR(&CUSTOMER) TYPE(*DEC) LEN(6)
VAR(&COMPANY) VALUE(%SST(&DATA 101 2))
VAR(&CUSTOMER) VALUE(%SST(&DATA 103 6))
VAR(&PRTTXT) VALUE(%SST(&DATA 151 200))
PGM(MYPGM) PARM(&COMPANY &CUSTOMER &PRTTXT) El mismo proceso es más sencillo cuando se utiliza un mandato que permite expresiones.
DCL
VAR(&DATA) TYPE(*CHAR) LEN(1024)
MYCMD
COMPANY(%SST(&DATA 101 2)) +
CUSTOMER(%SST(&DATA 103 6)) +
PRTTXT(%SST(&DATA 151 30)) He utilizado la función substring en ese ejemplo. También
puede concatenar. Observe el parámetro COMPANY en el siguiente ejemplo.
DCL
DCL
DCL
MYCMD
VAR(&DATA) TYPE(*CHAR) LEN(1024)
VAR(&COMP1) TYPE(*CHAR) LEN(1)
VAR(&COMP2) TYPE(*CHAR) LEN(1)
COMPANY(&COMP1 *CAT &COMP2) +
CUSTOMER(%SST(&DATA 103 6)) +
PRTTXT(%SST(&DATA 151 30)) 5. En una definición de mandatos puede especificar una
validación limitada de los valores de los parámetros. Por cada
parámetro, puede especificar cosas tales como:
• Valores válidos: Una lista de hasta 300 constantes que
definen los únicos valores permitidos.
• Expresión relacional: Una expresión lógica que define
la relación entre parámetros.
• Alcance: Límites inclusivos dentro de los cuales el valor de un parámetro debe estar.
• Campo completo requerido: Si el valor del parámetro
puede o no contener espacios en blanco
Puede incluso nombrar un programa de comprobación de
validez con el mandato CRTCMD (Create Command). Este
programa se ejecuta antes que el programa de procesamiento
de mandatos y permite definir una validación de parámetros
aún más restrictiva.
ATTITUDES Nº 288
Febrero 288.indd 7
7
Febrero 2013
08/03/13 9:28
COLABORACIONES
6. Los mandatos no están afectados por las definiciones de parámetros por defecto inherentes a un CALL.
• Los literales numéricos se pasan como valores decimales empaquetados de 15 dígitos con cinco decimales.
• Los literales de caracteres de 32 bytes o menos se
pasan como valores de 32-byte.
• Los literales de caracteres mayores de 32 bytes son
pasados tal y como son.
realidad es más que un programa. Ha creado tres objetos.
Cuando se trata del parámetro CMD del mandato
SBMJOB (Submit Job), esta norma se aplica a las variables también. Someter un CALL con parámetros a una
cola de trabajos puede ser doloroso. En cambio someter
un mandato es muy sencillo. El procesador de mandatos
lo arregla todo por usted.
Buen trabajo
Su fantástica aplicación requiere que tres valores sean
proporcionados durante la ejecución.
AR100P Un archivo de impresión descrito externamente para definir el informe.
AR100R Un programa RPG con SQL embebido para
seleccionar los datos requeridos y crear el informe.
AR100C Un programa CL para aplicar el texto a imprimir al archivo de impresión, llamar al programa ROG y
manejar los errores y mensajes.
• Un número de compañía de 2 dígitos, que indica sobre
qué compañía realizar el informe.
• Un número de cliente de 6 dígitos. Si este valor es positivo, el cliente asignado a ese número de cuenta será
el único cliente reflejado en el informe. Si el valor es 0
o negativo, todos los clientes de la empresa seleccionada aparecerán en el informe.
• Una cadena de texto de 30 caracteres, que se imprimirá
a pie de página de cada informe.
7. El procesador de mandatos proporciona una práctica función de prompt que puede utilizar desde la línea de
mandatos cuando edite un miembro fuente y cuando haga
prompt sobre un parámetro de mandato desde otro mandato, como SBMJOB. Gracias a esta función, puede realizar
un mejor trabajo rellenando los parámetros correctamente.
Un ejemplo
Digamos que ha escrito un maravilloso programa que
va a revolucionar el departamento de Cuentas a Cobrar. En
Aquí figuran algunas partes del program CL donde se
observan las definiciones de los parámetros.
pgm parm(&inCompany &inCustomer &inPrtTxt)
dcl
dcl
dcl
dcl
&inCompany
&inCustomer
&inPrtTxt
&Status
*dec
*dec
*char
*char
2
6
30
8
ovrprtf ar100p prttxt(&inPrtTxt)
call
ar100r parm(&inCompany &inCustomer &Status)
dltovr ar100p
if (%sst(&Status 4 5) *ne '00000') do
sndpgmmsg msgid(cpf9898) msgf(qcpfmsg) msgtype(*diag) +
msgdta('Program' *bcat &PgmName *bcat +
'ended abnormally with status' *bcat &Status)
goto Escape
enddo
Nº ejemplares: 8.500
Precio ejemplar: 7,00 euros (Anual 60 )
Difusión: Andorra, Portugal,
Italia y España
Publicidad: Tel. 93 319 17 23
ATTITUDES Nº 288
Febrero 288.indd 8
Edita: American Top Tools, S.L.
Via Laietana, 20
08003 Barcelona
Tel. 93 319 16 12 - Fax 93 319 17 55
E-mail: [email protected]
8
Depósito Legal: B-18.455-1993
Imprime Graficas Altagraf
Publicación: 10 ediciones
Alcance: 28/00
Febrero 2013
08/03/13 9:28
COLABORACIONES
Se le pide que realice varias invocaciones a esta aplicación, una para cada compañía, en el planificador de tareas
para que se ejecute durante la noche y toda la semana. No
hay ninguna manera de hacer esto con un CALL debido
a las longitudes de los parámetros de cliente y compañía.
Si bien, si define un mandato para ejecutar el mandato
CL, la planificación del trabajo será sencilla. Aquí está la
fuente para el mandato.
AR100:
CMD
PARM
PARM
PARM
PROMPT('Accounts Receivable Report')
KWD(COMPANY) TYPE(*DEC) LEN(2 0) REL(*GT 0) +
MIN(1) PROMPT('Company')
KWD(CUSTOMER) TYPE(*DEC) LEN(6 0) DFT(*ALL) +
REL(*GT 0) SPCVAL((*ALL -1)) +
PROMPT('Customer')
KWD(PRTTXT) TYPE(*CHAR) LEN(30) EXPR(*YES) +
PROMPT('Print text')
Aquí esta como crear un mandato:
CRTCMD CMD(MYLIB/AR100)
PGM(*LIBL/AR100C)
SRCFILE(MYLIB/QCMDSRC)
SRCMBR(AR100) Y aquí especifico como planificarlo para su ejecución.
ADDJOBSCDE
JOB(AR100_3)
CMD(AR100 COMPANY(3) CUSTOMER(*ALL) PRTTXT('Give to Billy Ruben'))
FRQ(*WEEKLY)
SCDDAY(*SUN *MON *TUE *WED *THU)
SCDTIME(230000)
JOBD(ARJOBD) En mi experiencia…
El ejemplo de este artículo incluye un mandato que ejecuta el programa
CL. No quiero dar la impresión de que el programa de procesamiento de mandatos tenga que estar escrito en CL. Puede ser escrito en cualquier lenguaje.
Pero cuando pienso en todos los mandatos que he escrito durante los últimos
25 años, la mayoría de mis mandatos han ejecutado programas CL.
Además, no quiero dar la impresión de que todos los programas necesitan
interfases de mandato. Si un programa tiene pocos o ningún parámetro, o bien
es llamado solo desde algunos programas, un simple CALL sería más que
suficiente. Mi experiencia es que tan solo un porcentaje muy pequeño de programas puede beneficiarse de una interfase de mandato. Ahora bien, en caso
de un programa que es llamado desde varios programas CL, (por ejemplo,
una utilidad), he visto que escribir una interfase de mandato, incluso sin ser
necesario, mejora la lectura y posterior modificación del programa.
ATTITUDES Nº 288
Febrero 288.indd 9
9
Febrero 2013
08/03/13 9:28
COLABORACIONES
Crear ayudas
para Mandatos
Mejorar las posibilidades del propio IBM i creando
uno sus propios mandatos es muy gratificante y eficiente, pero un mandato sin un texto de ayuda es como hacer
huevos a la cazuela sin salsa. Afortunadamente, generar
textos de ayuda para un mandato es muy sencillo gracias a
una técnica que aprendí de un programador llamado Chris
Wages. Así se hace.
Primero debemos disponer de un mandato. Este es el
ejemplo de código fuente del mandato DOIT.
CMD
PROMPT('Do it')
PARM
KWD(HOW) TYPE(*CHAR) LEN(7) RSTD(*YES) +
DFT(*WELL) +
VALUES(*WELL *BETTER *BEST) +
EXPR(*YES) +
PROMPT('How should I do it?')
PARM
KWD(WHEN) TYPE(*CHAR) LEN(8) RSTD(*YES) +
DFT(*MORNING) +
VALUES(*MORNING *NOON *NIGHT) +
MAX(3) EXPR(*YES) +
PROMPT('When should I do it?') He creado y probado el mandato y funciona correctamente. Ahora, a por el texto de ayuda. Utilizaremos el
mandato GENCMDDOC (Generar Documentación del
mandato).
GENCMDDOC CMD(MYLIB/DOIT)
TODIR('/qsys.lib/mylib.lib/qpnlsrc.file')
TOSTMF(doit.mbr)
GENOPT(*UIM) ATTITUDES Nº 288
Febrero 288.indd 10
10
Febrero 2013
08/03/13 9:28
COLABORACIONES
Observe que el texto de ayuda se sitúa en un archivo
físico fuente llamado QPNLSRC. También que el mandato GENCMDDOC requiere que el nombre del archivo
físico fuente y el nombre del miembro sean especificados
en formato de IFS.
Cambie el tipo de fuente de UIM a PNLGRP.
Llegados a este punto, edito el fuente, numerando to-
das las apariciones del token de sustitución, <…>. Sustituyo los tokens por algo así como <1>,<2>, etc… Esto me
facilita sustituir cada token por el texto apropiado.
Utilice el mandato CRTPNLGRP (Create Panel Group)
para crear el objeto grupo de panel. Se hace fácilmente a
través del la opción 14 del PDM.
CRTPNLGRP PNLGRP(MYLIB/DOIT)
SRCFILE(MYLIB/QPNLSRC)
SRCMBR(DOIT) Ahora es el momento de conectar el texto de ayuda con el mandato. Fíjese en los parámetros HLPPNLGRP y HLPID.
CRTCMD CMD(MYLIB/DOIT)
PGM(*LIBL/DOIT)
SRCFILE(MYLIB/SRC)
SRCMBR(DOIT)
HLPPNLGRP(DOIT)
HLPID(*CMD) Ahora trabajo con dos sesiones. En la primera, desarrollo al mandato para ver el mandato de texto. En la otra,
edito el código fuente del texto de ayuda.
En la primera sesión, escribo el nombre del mandato
ATTITUDES Nº 288
Febrero 288.indd 11
en una línea de mandatos, pulso F4 para ver los parámetros, muevo el cursor hasta posicionarlo enfrente del primer parámetro y pulso F1 para obtener el texto de ayuda.
Así debería aparecer
11
Febrero 2013
08/03/13 9:28
COLABORACIONES
En la segunda sesión, modificó el código fuente en
función de lo que se requiera, basándome en lo que veo en
la primera sesión. Esto se ve mejor si dispone de dos monitores. Borro líneas que no quiero y cambio los valores
de los tokens de sustitución, IDs de mensaje, etc… Prefiero realizar una serie de pequeñas modificaciones y recons-
ATTITUDES Nº 288
Febrero 288.indd 12
truir el panel de grupo, en lugar de intentar construir todo
el texto de ayuda en una sola tacada, por si introdujese
algún error de sintaxis. Especialmente recomiendo esta
aproximación a aquellos no muy conocedores de UIM.
Una vez terminado mi texto de ayuda quedaría así.
12
Febrero 2013
08/03/13 9:28
COLABORACIONES
Déjeme señalar que no tiene que recrear el mandato
cuando hace un cambio al panel de grupo. Cada vez que
pulsa F1 en busca de ayuda, el sistema recargará el panel
de grupo. De hecho, no tiene que salir de la línea de mandatos cuando solicite el mandato. Solo salga del texto de
ayuda y volverá a la pantalla de prompt del mandato y
DECOMPILER
Recuperación
de programas fuente
desde
programas objeto
pulse F1 de nuevo.
Los mandatos son una de las mejores y menos utilizadas ventajas del IBM i. Añadir textos de ayuda es una
sencilla manera de mejorar la utilidad de los mandatos.
Recuperación
objetos:
- RPG IV
- RPG 36/38
- RPG 400
- COBOL 36/38
- COBOL 400
- CL
- DDS
Tel. 93 3191612
ATTITUDES Nº 288
Febrero 288.indd 13
13
En poco más del tiempo
empleado en compilar un
programa fuente, puede
descompilar un programa
objeto.
- Proteja su inversión.
- Simplifique las migraciones
- Evite reprogramaciones.
Fax 93 3191755
[email protected]
www.att.es
Febrero 2013
08/03/13 9:28
GoAnywhere: Automatización de comunicaciones
Sector:
Industria Gráfica
Compañía: General de Impresiones S.A.
TRANSFERENCIA DE CONTENIDOS
Describimos aquí un caso de aplicación de las nuevas tecnologías a una
situación clásica en empresas que se dedican a la impresión de Revistas
de periodicidad relativamente frecuente, semanal, quincenal o mensual.
El Cliente es quién establece los contenidos y la maquetación de los
textos e imágenes mientras que por otro lado, la Imprenta, en nuestro
caso, General de Impresiones, S.A., los recibe, revisa, prepara y devuelve
con las sugerencias y correcciones para la aprobación del Cliente.
Problema:
Actualizaciones de última hora
Las dificultades se producen cuando
como consecuencia del dinamismo de
ese tipo de información hay que añadir
o modificar contenidos, dado que la
importancia y oportunidad de los
mismos cambia de día en día y hasta de
hora en hora. Desde la composición
original hasta la que finalmente se
decide pasar a impresión, se registran
numerosos cambios producidos por la
propia naturaleza de la misión
informativa y del éxito de su
publicación. Este éxito depende en
gran parte de la incorporación de
ATTITUDES Nº 288
Febrero 288.indd 14
noticias recién producidas, que incluso
pueden
ser
ignoradas
por
la
competencia y por ello adquirir un
importante valor añadido. También
depende de que se mantenga en
secreto hasta el último momento una
información exclusiva y puntual.
La empresa General de Impresiones,
S.A. tiene una facturación aproximada
de 120 millones de euros, ocupa a 900
personas, tiene unos 50 clientes y unas
130 cabeceras. Si tenemos en cuenta
que una página de revista ocupa 20
MegaBytes y que 100 páginas ocupan
2000 MB, resulta fácil entender que el
sistema de comunicaciones transporta
grandes volúmenes de datos cuyo
14
control en tiempo, forma y seguridad
exigen medios altamente desarrollados.
El Director de Operaciones, D. Rafael
Lara, nos describe el proceso de
incorporación de los contenidos que les
hace llegar el Editor de cualquier
Revista o Publicación y cómo se ha
resuelto finalmente contando con los
medios informáticos adecuados.
Recordamos que el Sr. Lara trabaja
en la empresa General de Impresiones,
S.A. multinacional del sector de las
comunicaciones, cuya base de negocio
está dirigida a la impresión de libros y
revistas.
Alto volumen de información
Hasta hace relativamente
poco
tiempo, sus clientes le enviaban el
contenido de la publicación a imprimir,
en formato papel, mediante correo
postal o mensajeros. Una vez en la
empresa, el departamento de Preimpresión revisaba el contenido de la
información a imprimir, la ortografía y
Febrero 2013
08/03/13 9:28
el estilo, y preparaba la composición de
cada una de las páginas en formato
final. Esta información se reenviaba
corregida de nuevo al cliente para su
aprobación, la cual éste devolvía de
nuevo a General de Impresiones, dando
el visto bueno o bien aportando nuevas
ideas y cambios. Este intercambio de
información se repetía varias veces,
hasta que todo estaba correcto y se
aceptaba la prueba definitiva, la cual
luego se enviaba a imprimir en el
departamento de producción.
La tecnología permitió superar todo
este trasiego de información en papel y
el sistema de comunicación evolucionó
positivamente. Dadas las posibilidades
de los sistemas digitales se sustituyó el
soporte papel por un dispositivo actual,
el DVD. Todo era más reducido y
manejable, pero seguían dependiendo
de un sistema de correos o mensajería
que, hoy en día, todavía resultaba lento
para sus necesidades. Actualmente la
información requiere más inmediatez, y
sus clientes le demandaron un sistema
más rápido y eficaz de intercambio de
información.
“Los conocimientos técnicos del
personal propio no eran
suficientes para acometer el
proyecto con garantías en un
plazo inferior a un año”
Sr.Ballesteros
Director de Informática
Costoso diseño propio
Don Rafael Lara, se dirigió al
Departamento de Informática para que
buscara una solución que permitiera
aumentar la capacidad de respuesta
rápida requerida por sus clientes. No
mucho tiempo después el Director de
Informática, Don Claudio Ballesteros,
presento un diseño de la aplicación
requerida para atender los objetivos
perseguidos y que básicamente debían
lograr un entorno tan seguro como
hermético para evitar indiscreciones y
un acceso inmediato a la información.
La complejidad del proyecto se hizo
ATTITUDES Nº 288
Febrero 288.indd 15
evidente al tener que mantener vías de
comunicación con diferentes clientes
que utilizaban diferentes tecnologías y
a los que había que ofrecer vías
cómodas, fáciles y eficaces de
comunicación.
Para realizar el proyecto se requería
un experto en comunicaciones y la
realización de un sistema integral de
comunicaciones cuya creación se
estimo en un trabajo de 3 hombres/año
de un alto nivel profesional. Dados los
costes y la duración que el proyecto
podría alcanzar hasta ser operativo, el
coste interno total se presupuestó en
138.000 euros.
GoAnywhere: La alternativa
Al comprobar que los conocimientos
técnicos del personal propio, no eran
suficientes para acometer el proyecto
con garantías, en un plazo inferior a un
año, el director de informática, el Sr.
Ballesteros, estudió otras alternativas
externas considerando aplicaciones
operativas creadas por expertos y que
pudieran ser incorporadas al Sistema
Informático de forma inmediata.
Tras
una
exploración
de
las
alternativas que ofrecían las empresas
de software y las consultoras de
empresa, en el mercado informático,
tuvieron conocimiento de la aplicación
que mejor se acomodaba y cubría
sobradamente sus necesidades. Se
trataba del GoAnywhere, aplicación
creada por la empresa Linoma
Software, de USA, muy conocida en el
ámbito del software de diferentes
tecnologías, entre ellas el AS/400,
ahora System i, AIX, Unix, Linux,
Solaris, Windows y HP-UX.
El Sr. Ballesteros tuvo fácil hacer su
recomendación técnica basándose en
los datos de que disponía. El software
GoAnywhere tenía un coste de 24.000
euros, su aplicación operativa era
inmediata, no había que reprogramar
ninguna solución anterior y bastaba con
el personal propio para su puesta en
marcha.
El GoAnywhere, según comenta el Sr.
Ballesteros, “gestiona un servidor de
ficheros que permite conectar General
de Impresiones con sus proveedores,
clientes, empleados…, facilitando el
intercambio de datos en un entorno
controlado y auditado, simplificando la
transferencia de un gran volumen de
datos de forma rápida y segura, sin
importar el sistema operativo origen o
destino de la información, sin
necesidad de instalar ningún software
adicional más en el cliente final y
aprovechando las estructuras hardware
y software ya existentes”
“La aplicación operativa de
GoAnywhere era inmediata, no
había que reprogramar ninguna
solución anterior y bastaba con
el personal propio para su
puesta en marcha.”
Sr. Ballesteros
Primer proyecto
Entre otros asuntos, el Sr Ballesteros
configuró un servidor de ficheros con
GoAnywhere y se puso en contacto con
sus clientes. Creó para cada cliente una
carpeta de trabajo a la cual accedía
con su propia clave. Este planteamiento
permitió que sus clientes dispusieran de
más tiempo para maquetar su
GoAnywhere “Services”
Permite poner un conjunto de servicios de transferencia de datos (FTP,
FTPS,
SFTP. AS2) y un servidor web( HTTPS) para quienes necesiten
conectarse a otro sistema para intercambiar archivos en un entorno seguro, a
través del navegador. Instalado en su propia infraestructura, permite controlar
las cuentas, permisos y archivos de datos de sus colaboradores así como
planear respuestas a ciertos eventos. También puede configurar un módulo
para envío de enlaces para descarga controlada de archivos, evitando el envío
de los mismos.
15
Febrero 2013
08/03/13 9:28
producto, incluir los contenidos más
recientes en sus publicaciones, y tener
un servicio rápido, cómodo y fiable
para el trasporte de sus datos.
Por otra parte el GoAnywhere
permitió perfeccionar aún más su
método de trabajo implementando las
utilidades que facilita el producto y que
no habían sido previstas.
En muy poco tiempo y de una manera
muy fácil, puso en marcha el servicio
de avisos que proporciona GoAnywhere,
para que el sistema enviase un aviso
automático cada vez que cualquier
usuario autorizado depositara un
fichero en una carpeta reservada,
informando a la persona/as designadas
para que actuaran de forma inmediata,
avisos que con las tecnologías actuales
se pueden incluso desviar a un
dispositivo móvil.
Mejores flujos de información
Todo ello conduce a potenciar la
implicación inmediata de las personas
involucradas en el proceso productivo
en un entorno de eficiencia en que las
limitaciones técnicas y operativas no
dificultan las iniciativas personales
vinculadas al estado actual de los
contenidos.
GoAnywhere “Director”
Gestiona de forma más eficiente el intercambio de datos a través de una
innovadora aproximación centralizadora permitiendo la automatización de
múltiples procesos. Permite a las empresas conectarse con prácticamente
cualquier sistema (interno o externo) e intercambiar datos de forma segura a
través de protocolos de seguridad estándar entre los que se encuentran: SFTP
(SSH), SCP, FTP/S (SSL/TLS), HTTP/S, SMTP, POP3, IMAP y AS2.
GoAnywhere Director permite también la encriptación de los datos mediante
sistemas de encriptación Open PGP y envíos con compresión ZIP y encriptación
AES para mayor protección de la información sensible.
Características técnicas destacadas.
Bases de Datos:
Navegación Gráfica:
DB2 AS/400, Derby, Informix, PostgreSQL,
SQL Server, MySQL, Oracle, Sybase
Gestión centralizada y acceso
desde navegador web
Seguridad:
Encriptación, Auditoría, Logs, Autenticación
de firma digital/certificados
Servidores:
FTP, SFTP, SCP, FTPS, AS2,
HTTP(S), Email, MQ
Eficiencia:
Conversión formatos:
Alertas por E-mail:
Reintenta/Continúa tareas interrumpidas,
comprueba integridad , comprime
Lee/escribe Excel, XML, CSV
y texto de ancho fijo
Avisa de errores, eventos, disponibilidad
de archivos y envío por e-mail
Según resume el Sr. Lara, el resultado
final es que el cliente gana un tiempo
fundamental para la creación de su
producto, seguridad en el transporte de
la información, comodidad en el modo
de trabajo y una mayor agilidad, lo cual
es importante para conseguir la calidad
deseada en el producto acabado.
Más información: www.att.es
“Actualmente la información
requiere más inmediatez, y
nuestros clientes
demandaban un sistema más
rápido y eficaz de intercambio
de información.”
Sr. Lara
Director de Operaciones
ATTITUDES Nº 288
Febrero 288.indd 16
16
Febrero 2013
08/03/13 9:28
Descargar