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