Información sobre Power Systems, incluidos AS/400, iSeries y System i Año 26 - Noviembre-Diciembre 2012 Nº 286 COLABORACIONES SUMARIO Las estructuras de datos proporcionan buenos parámetros de estado Cuando un programa falla alguien tiene que arreglarlo. Ese alguien en muchas ocasiones soy yo. Sobre cuando nunca es el mejor momento,. Es importante que el programa que está fallando me proporcione la máxima información posible para poder detectar el error lo más rápidamente posible. Existen dos maneras para que un programa informe a su “caller” de que no se completó correctamente. Una manera es enviar un mensaje. La otra es utilizar un parámetro de estado también conocido Colaboraciones como “return code”. Es muy habitual que el programa coloque un cero en un parámetro de estado si funcionó correctamente y un valor distinto de cero si hubo algún error. Un buen ejemplo de esto es la convención de estado SQL. Puede desarrollar está idea mucho más haciendo que el programa erróneo devuelva tanta información como desee. Lo muestro con una estructura de datos RPG pero la técnica funciona con cualquier lenguaje. Sigue en página 2 Managed File Transfers hacen más de lo que se ve Los productos (MFT) relacionados con la gestión de transferencia de archivos están diseñados para gestionar, proteger, centralizar y automatizar la transferencia de archivos dentro y fuera de la empresa. En las empresas que cuentan con un IBM Midrange bajo el sistema operativo IBM i, o alguna de sus versiones anteriores como i5/OS o OS/400, siempre surgen motivos para compartir datos con otras plataformas que funcionan bajo Windows, Linux, Unix o Mac OS. La integración y las posibilidades de intercambio de datos crecen exponencialmente. Al mismo tiempo aumenta el interés sobre la seguridad de la información intercambiada. Sigue en página 4 Como utilizar el mandato GO SAVE para salvar todo el sistema o parte del mismo Utilice el mandato GO SAVE para salvar todo el sistema o partes del mismo que cambien regularmente. El uso del mandato GO SAVE es una forma sencilla de asegurarse de que tiene una copia de seguridad fiable de todo el sistema. El mandato GO SAVE le ofrece menús de Salvar que facilitan la realización de copias de seguridad del sistema, independientemente de la estrategia de copia de seguridad que decida utilizar. Se recomienda utilizar la opción 21 del menú Precio: 7 Euros del mandato GO SAVE inmediatamente después de instalar el sistema. La opción 21 del menú del mandato GO SAVE es la base de todas las estrategias de salvar. Esta opción le permite realizar una operación de salvar completa de todos los datos del sistema. Una vez que haya utilizado la opción 21 del menú, puede utilizar otras opciones del menú para salvar partes del sistema o utilizar un proceso de salvar manual. Sigue en página 6 Las estructuras de datos proporcionan buenos parámetros de estado 2 Las aplicaciones Managed File Transfers hacen más de lo que se ve 4 Como utilizar el mandato GO SAVE para salvar todo el sistema o partes del mismo 6 El grupo Washington soluciona la transferencia segura de 8 ficheros vía FTP 10 hechos que debería conocer sobre Valores Especiales 10 Consulting Como utilizar SQL para actualizar un número de secuencia14 Como pasar nombre de una carpeta de destino en IFS a varios sistemas 15 ¿Cómo puedo definir PARM en el miembro fuente del mandato para permitir los valores de minúsculas? 15 COLABORACIONES Las estructuras de datos proporcionan buenos parámetros de estado Cuando un programa falla alguien tiene que arreglarlo. Ese alguien en muchas ocasiones soy yo. Sobre cuando nunca es el mejor momento,. Es importante que el programa que está fallando me proporcione la máxima información posible para poder detectar el error lo más rápidamente posible. Existen dos maneras para que un programa informe a su “caller” de que no se completó correctamente. Una manera es enviar un mensaje. La otra es utilizar un parámetro de estado también conocido como “return code”. Es muy habitual que el programa coloque un cero en un parámetro de estado si funcionó correctamente y un valor distinto de cero si hubo algún error. Un buen ejemplo de esto es la convención de estado SQL. Puede desarrollar está idea mucho más haciendo que el programa erróneo devuelva tanta información como desee. Lo muestro con una estructura de datos RPG pero la técnica funciona con cualquier lenguaje. Primero, creemos un mensaje como este: crtmsgf *curlib/mymsgf addmsgd msgid(MYM1101) msgf(*curlib/mymsgf) + msg('&2 errors were found in program &1.') + seclvl('Correct the errors and rerun.') + fmt((*char 10) (*bin 4)) El mensaje tiene dos parámetros posicionales que ocupan 14 bytes de almacenamiento. Ahora, defina una es- D Status D D D tructura de datos compatible en el programa o programas que capturarán este error. Esta es la estructura de datos. ds 256 inz 7a 10a 10i 0 MsgID PgmName ErrorCount programa y los errores que encontró. Cuanta más información ponga en la estructura de datos, mejor, porque un usuario puede leerle un mensaje por teléfono pero leer un volcado de un programa es muy poco práctico. Cargar la estructura es muy sencillo. Los primeros siete bytes se guardan para alojar el ID del mensaje. Los restantes subcampos de la estructura de datos coinciden con las definiciones de los valores de sustitución en la descripción del mensaje. He mantenido la estructura lo más sencilla posible. Me dice el nombre del if ErrorCounter > *zero; MsgID = 'MYM1101'; PgmName = ProcName; ErrorCount = ErrorCounter; ouStatus = Status; endif; // from the PSDS La última línea devuelve los datos al caller, porque el primer parámetro es ouStatus. D OnePgm D D D pi ouStatus inWhs inItem 256a 3a 12a const const El CL sería algo parecido a esto: ATTITUDES Nº 286 2 Noviembre-Diciembre 2012 COLABORACIONES pgm parm(&inOption &inItem &inWhs) dcl &inOption dcl &inItem dcl &inWhs dcl &Status call OnePgm *char 1 *char 12 *char 3 *char 256 (&Status &inWhs &inItem) if cond(%sst(&Status 1 7) *eq ' ') then( + call TwoPgm (&Status &inOption)) if cond(%sst(&Status 1 7) *eq ' ') then(+ call RedPgm (&Status)) if cond(%sst(&Status 1 7) *eq ' ') then(+ call BluePgm (&Status &inWhs)) if cond(%sst(&Status 1 7) *ne ' ') then( + sndpgmmsg msgid(%sst(&Status 1 7)) msgf(MyMsgF) + msgdta(%sst(&Status 8 249)) + msgtype(*escape)) endpgm Si un programa encuentra un error, el sistema ignora las siguientes llamadas del un programa. Si un programa termina en un error, el ultimo IF hace que el programa CL 50 errors were found in program OnePgm finalice enviando un mensaje de error similar a este: He utilizado esta técnica en un proyecto en el que trabajé recientemente y quedé muy contento con los resultados. ATTITUDES Nº 286 Las estructuras de datos permiten parámetros de estado tremendos. 3 Noviembre-Diciembre 2012 COLABORACIONES Las aplicaciones Managed File Transfers hacen más de lo que se ve Los productos (MFT) relacionados con la gestión de transferencia de archivos están diseñados para gestionar, proteger, centralizar y automatizar la transferencia de archivos dentro y fuera de la empresa. En las empresas que cuentan con un IBM Midrange bajo el sistema operativo IBM i, o alguna de sus versiones anteriores como i5/OS o OS/400, siempre surgen motivos para compartir datos con otras plataformas que funcionan bajo Windows, Linux, Unix o Mac OS. La integración y las posibilidades de intercambio de datos crecen exponencialmente. Al mismo tiempo aumenta el interés sobre la seguridad de la información intercambiada. predecibles. Pero también el manejo de datos cuyo comportamiento no es rutinario es cada vez más común. Según Luebbe, “las empresas buscan cada vez más soluciones que no estén limitadas al uso de servidor a servidor”. En algunos casos, quieren que los propios usuarios inicien transferencias pero de un modo controlado y auditado y dentro de un entorno FTP gestionable y autorizado que evite la rotura de la seguridad. Muchas empresas intentan bloquear el uso de emails para evitar el intercambio de archivos y se pone el énfasis en el bloqueo del uso de sitios de intercambio de archivos gratuito. Ante un mayor riesgo crecen los requisitos de obligado cumplimiento para muchas empresas. Y aunque no tengan regulación de la industria o del gobierno, el riesgo en si mismo debería contar igualmente con su atención. La razón fundamental es que hay mucha información sensible circulando en todas direcciones. Y mucha de ella está desprotegida. Se envía información vía emails y sitios FTP donde el riesgo es alto y los auditores de seguridad mantienen niveles de tolerancia bajos. Al menos esas son las preocupaciones, pero parece que no se acaba de reconocer y se actúa bajo el supuesto de que el riesgo es asumible. La existencia de diferentes bases de datos es un aspecto muy importante a tener en cuenta en el intercambio Linoma Software es una de las empresas que desarrolla y comercializa soluciones MFT. Sus raíces provienen del IBM Midrange, pero en los últimos años ha ampliado sus áreas de negocio fuera de ese mercado. Así que hablamos con Bob Luebbe, el director de Ingeniería en Linoma, para saber más sobre el intercambio de archivos y las tendencias de MFT. Aún cuando mucha gente asumiría que donde más situaciones de intercambio de datos se dan es entre socios comerciales, distribuidores, vendedores, tiendas, etc. Luebbe comenta que los intercambios internos son incluso más comunes. La transferencia de ficheros va más allá que la simple conexión de diferentes servidores FTP entre ellos. La transferencia entre sistemas servidor a servidor está típicamente automatizada al máximo posible con transferencias de datos regulares planeadas que manejan escenarios en que los contenidos a manejar son 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º 286 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] 4 Depósito Legal: B-18.455-1993 Imprime Graficas Altagraf Publicación: 10 ediciones Alcance: 28/00 Noviembre-Diciembre 2012 COLABORACIONES bunkers de datos que se crearon antiguamente para proteger la información sensible, ahora esa información está siendo intercambiada con una frecuencia muy elevada. Tal como se hace debe ser gestionado y protegido. de datos,.lo cual origina una constante actividad de conexiones de bases de datos. Esta demanda llevó a que se construyeran traductores de datos en los productos MFT de Linoma, los cuales ayudan a la conversión de datos evitando la necesidad de construir nuevos programas con ese fin. Existen una gran variedad de protocolos seguros de transmisión de datos siendo el SFTP el más popular en aquellas organizaciones que comparten datos con otras empresas relacionadas con su negocio. El protocolo SFTP está sustituyendo rápidamente al más habitual FTPS, según Luebbe. La razón es que FTPS requiere varios puertos en el firewall. Las empresas utilizarían FTP estándar (mala idea) o FTP sobre SSL. Tener múltiples puertos aumenta la oportunidad de una brecha en la seguridad y más gestión. SFTP (ojo con los acrónimos) utiliza un simple puerto. Los ingenieros de red e incluso los auditores prefieren la opción de un solo puerto. Resumiendo, las prácticas de intercambio de archivos, especialmente en las medianas empresas es una práctica muy común, aunque sin mucho sentido común aplicado. El MFT se etiqueta algunas veces como el sustituto del FTP. Definitivamente lo es, pero va mucho más allá desde el punto de vista de integración de sistemas. Frente a los ATTITUDES Nº 286 5 Noviembre-Diciembre 2012 COLABORACIONES Como utilizar el mandato GO SAVE para salvar el sistema o parte del mismo Utilice el mandato GO SAVE para salvar todo el sistema o partes del mismo que cambien regularmente. SAVE adaptados al entorno de salvar de que se disponga. * En Ver toda la lista de comprobación de GO SAVE se proporcionan todos los pasos necesarios para realizar operaciones GO SAVE. Es posible que algunos de los pasos no se apliquen a su entorno concreto. El uso del mandato GO SAVE es una forma sencilla de asegurarse de que tiene una copia de seguridad fiable de todo el sistema. El mandato GO SAVE le ofrece menús de Salvar que facilitan la realización de copias de seguridad del sistema, independientemente de la estrategia de copia de seguridad que decida utilizar. Se recomienda utilizar la opción 21 del menú del mandato GO SAVE inmediatamente después de instalar el sistema. GO SAVE: Opción 21 (salvar todo el sistema) La opción 21 salva todo lo que hay en el sistema y le permite realizar la operación de salvar sin estar presente. La opción 21 coloca el sistema en estado restringido. Esto significa que, cuando se inicia la operación de salvar, ningún usuario puede acceder al sistema y la copia de seguridad es lo único que se está ejecutando en el mismo. La opción 21 del menú del mandato GO SAVE es la base de todas las estrategias de salvar. Esta opción le permite realizar una operación de salvar completa de todos los datos del sistema. Una vez que haya utilizado la opción 21 del menú, puede utilizar otras opciones del menú para salvar partes del sistema o utilizar un proceso de salvar manual. GO SAVE: Opción 22 (salvar datos del sistema) La opción 22 salva solamente los datos del sistema. No salva datos de usuario. La opción 22 coloca el sistema en estado restringido. Esto significa que ningún usuario puede acceder al sistema y que la copia de seguridad es lo único que se está ejecutando en el mismo. Otro método de salvar consiste en utilizar el producto Servicios BRM (BRMS), que automatiza los procesos de salvar. BRMS proporciona una solución global fácil para sus necesidades de copia de seguridad y recuperación. GO SAVE: Opción 23 (salvar datos de usuario) La opción 23 salva todos los datos de usuario. Esta información incluye archivos, registros y otros datos que los usuarios entran en el sistema. Importante: Asegúrese de aplicar de manera permanente todos los PTF (arreglos) del código interno bajo licencia antes de utilizar el mandato SAVSYS, o la opción 21 ó 22 del menú GO SAVE. La opción 23 del menú omite el sistema de archivos QSYS.LIB porque lo salvan los mandatos SAVSYS, SAVSECDTA, SAVCFG y SAVLIB LIB(*ALLUSR). El mandato omite el sistema de archivos QDLS porque el mandato SAVDLO lo salva. La figura siguiente ilustra los mandatos y las opciones de menú que puede utilizar para salvar partes del sistema, así como el sistema completo. Los siguientes apartados proporcionan una visión general y procedimientos sobre cómo utilizar opciones de menú del mandato GO SAVE: * En la visión general de las opciones de menú del mandato GO SAVE se explica cómo iniciar el mandato GO SAVE y se proporciona más información sobre las distintas opciones de GO SAVE. * Personalizar las instrucciones de copia de seguridad de GO SAVE permite crear una lista de pasos de GO ATTITUDES Nº 286 6 Noviembre-Diciembre 2012 COLABORACIONES Figura 1. Mandatos de salvar y opciones de menú ATTITUDES Nº 286 7 Noviembre-Diciembre 2012 GoAnywhere Director: Un cliente satisfecho Industria: Transporte del sector ferroviario, marítimo y de minería, protección del medio ambiente, tecnología aeronáutica y sector inmobiliario. Compañía: Grupo Washington Washington Business Services explota GoAnywhere Director La compañía Washington Business Services (WBS) es la encargada de proporcionar los servicios informáticos a las empresas del Grupo Washington y necesitaba solucionar la transferencia segura de ficheros vía FTP de forma automatizada entre las empresas que forman el grupo y otras empresas externas. WBS escogió GoAnywhere Director por sus grandes posibilidades para la transferencia de datos y los múltiples protocolos de seguridad contemplados, incluido el OpenPGP. “Cuanto más nos familiarizamos con todas sus funciones y posibilidades, encontramos nuevos lugares en los que utilizar el producto.” Paul Morton Según Paul Morton de WBS, “Hasta Desarrollador de Aplicaciones en Washinton Business Services que instalamos GoAnywhere Director y recibimos la instrucción básica del proveedor no descubrimos el potencial y que hacer conexiones limitadas al Una sola conexión eliminaba los múltiples posibilidades del producto”. Una de las opciones alternativas surgió cuando se estaba diseñando una interfase para el Sistema de Monitoreo de Red (NMS) para el nuevo centro de datos Class 1. WBS necesitaba una aplicación que pudiera automatizarse, enviar alertas cuando fuera necesario y comunicarse con diferentes sistemas. Estos procesos podrían realizarse mediante diferentes aplicaciones individuales para cada tarea. Pero crear una aplicación a medida o crear un nuevo equipo de desarrollo con tal fin, no era una de las opciones contempladas del proyecto. El NMS controla datos de condiciones medioambientales en el Data Center. Cualquier cambio drástico en alguna condición supervisada podría indicar que se ha producido un incidente en los sistemas medioambientales y poner en peligro la operación del Data Center. Los requisitos de una interfase automatizada con el NMS eran únicos. En primer lugar, la aplicación tendría ATTITUDES Nº 282 sistema dado que existían demasiadas conexiones que ralentizaban el sistema y perjudicaban el rendimiento. Los datos medioambientales, por otro lado, residen en una base de datos propietaria y tenían que ser traducidos a una base de datos SQL. Y en tercer lugar, cualquier situación que se produjera tenía que comunicarse al personal adecuado. Aún cuando GoAnywhere Director fue comprado para realizar transferencias seguras de ficheros entre las empresas del grupo WBS, también facilitaba la creación de un sistema de notificación de alertas que la situación requería. Luego, en poco tiempo, se creo un proyecto independiente para facilitar el NMS Para la confección de los complejos informes de sistemas medioambientales se necesitaba acceder a múltiples registros de datos pero GoAnywhere Director permitió realizarlo con tan solo una conexión al NMS para recolectar la información solicitada. 8 problemas de carga en el servidor. La siguiente tarea se centraba en la simplificación de la comunicación entre el sistema de monitoreo (NMS) y la base de datos de los informes y de log. Gracias a la posibilidad convertir y traducir del GoAnywhere Director se recuperó la información pertinente del sistema de monitoreo y se traspasó a la base de datos SQL utilizada para la confección de informes. La función que permite automatizar los procesos de GoAnywhere Director permitió realizar el proceso anterior en momentos determinados y enviar un email personalizado o SMS al apercibirse de una alerta del sistema, dando la forma final al proyecto de NMS. “Recomendamos GoAnywhere por su gran flexibilidad y posibilidades y también por el soporte que nos dio el proveedor en la configuración inicial. Cuanto más conocemos sus funciones, más lo aplicamos y todo con el mismo coste.” Junio-Julio 2012 Sobre Washington Companies. El grupo Washington Companies está compuesto por diversas empresas con sus propias sedes en todo Estados Unidos y el oeste de Canadá. Sus negocios se desarrollan a nivel mundial El núcleo de las actividades de Washington Companies incluye: Transporte ferroviario y marítimo, minería, rehabilitación y construcción, protección y recuperación del medio ambiente, venta y alquiler de equipos pesados, tecnología aeronáutica y sector inmobiliario. Washington Business Services, una modesta empresa del sector servicios, proporciona servicios administrativos, informáticos y otros servicios profesionales compartidos al grupo. www.washingtoncomapnies.com Sobre GoAnywhere Director 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 los siguientes: 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. Para más información consultar con American Top Tools ATTITUDES Nº 282 9 Junio-Julio 2012 COLABORACIONES 10 hechos que debería conocer sobre Valores Especiales Imagine no poder escribir *FIRST en el parámetro MBR del mandato OVRDBF (Override with Database File). Un pensamiento terrible, ¿no? Los valores especiales hacen que los mandatos sean más sensibles y sencillos de manejar. A continuación presentamos 10 hechos que cualquier desarrollador de IBM i debería conocer para poder utilizar los valores especiales de forma eficiente en sus mandatos. 1.- Los valores especiales son cadenas de caracteres incompatibles con las reglas de comprobación de validez. En el ejemplo, BATCH requiere un número de tres dígitos y *ALL no encaja con esa descripción. PARM KWD(BATCH) + TYPE(*DEC) LEN(3 0) + DFT(*ALL) + REL(*GT 0) + SPCVAL((*ALL -1)) + PROMPT('Batch number')</all> 2.- Los valores especiales facilitan a los humanos la comunicación con las computadoras. Mostramos un parámetro lógico que acepta *YES o *NO. Estos valores tiene más sentido para un humano que 1 y 0. PARM KWD(BLANKRECS) TYPE(*LGL) + RSTD(*YES) + DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Write blank records?' 5) 3.- El estándar de IBM es que los valores especiales empiecen con un asterisco, pero no es un requisito del sistema. En el ejemplo, ALL es un valor especial que no lleva asterisco. PARM ATTITUDES Nº 286 KWD(BATCH) + TYPE(*DEC) LEN(3 0) + DFT(ALL) + REL(*GT 0) + SPCVAL((ALL -1)) + PROMPT('Batch number') </all> 10 Noviembre-Diciembre 2012 COLABORACIONES 4.- El tipo y longitud de un dato coincide con los valores que hay por debajo y no con los valores especiales. En el ejemplo, BATCH se define con un número decimal de 3 dígitos sin decimales y no como una variable de carácter de 4 bytes. PARM KWD(BATCH) + TYPE(*DEC) LEN(3 0) + DFT(*ALL) + REL(*GT 0) + SPCVAL((*ALL -1)) + PROMPT('Batch number') </all> 5.- Un valor especial puede ser pasado como tal y como es, o bien, ser reemplazado por un valor de sustitución cuando se pase al programa de procesamiento de mandatos (CPP). En el ejemplo, el *MBR se pasa al CPP. PARM KWD(WORKMBR) TYPE(*NAME) DFT(*MBR) + SPCVAL((*MBR)) EXPR(*YES) PMTCTL(CHANGE) + PROMPT('Member') Pero en el segundo ejemplo, un espacio en blanco y un asterisco reemplazan a *BLANK y *AST respectivamente. PARM + KWD(CURRENCY) TYPE(*CHAR) LEN(1) DFT(*BLANK) RANGE(X'41' X'FE') + SPCVAL((*BLANK ' ') (*AST '*')) + EXPR(*YES) PROMPT('Currency fill character') ATTITUDES Nº 282 3 Junio-Julio 2012 COLABORACIONES 6.-Si el valor de sustitución del valor especial *CURLIB es la cadena sin comillas *CURLIB, el nombre de la biblioteca actual se pasará al programa CPP. En caso contrario, se pasará la cadena *CURLIB. En este ejemplo, no hay valor de sustitución, y así la literal *CURLIB será pasado al CPP- QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL) (*CURLIB)) + EXPR(*YES) + PROMPT('Library') En este otro ejemplo, la *CURLIB es sustituida con el nombre de la biblioteca actual QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL) (*CURLIB *CURLIB)) + EXPR(*YES) + PROMPT('Library') Si el trabajo no tiene una biblioteca actual definida, se pasa QGPL al CPP. 7.- Puede ignorar los errores con nivel de gravedad 20 o menos en la lista de compilación, suponiendo que el programa de procesamiento de mandatos puede manejar adecuadamente los valores de sustitución inválidos. La siguiente definición de parámetro genera tres errores CPF0257, porque los tres valores de reemplazo no son fechas válidas. Si bien como el CPP debe definir los campos de fecha como variables de caracteres de 7 bytes, los valores de reemplazo son los apropiados. PARM KWD(DATE) TYPE(*DATE) + DFT(TODAY) + SPCVAL((TODAY 2222222) (YESTERDAY 3333333) (TOMORROW 4444444)) + EXPR(*YES) + PROMPT('Cutoff date') AUDIT TRAIL Quién y cómo accede a los ficheros ◆ ◆ ◆ ◆ ◆ ◆ Creación de pistas de seguimiento de ficheros Investigación de campos modificados Información sobre el origen de la modificación Identificación del usuario, programa y hora Control únicamente de los campos deseados Testimonio irrefutable de actuaciones sobre la base de datos Tel. 93 3191612 ATTITUDES Nº 286 12 urity AS/400 Sec Fax 93 3191755 E-mail: [email protected] Noviembre-Diciembre 2012 COLABORACIONES 8.- Puede listar hasta 300 valores especiales en el parámetro SPCVAL. En el ejemplo, PARM define tres tipos de valores especiales. PARM KWD(SPLNBR) TYPE(*INT4) + DFT(*ONLY) + RANGE(1 999999) + SPCVAL((*ONLY 0) (*LAST -1) (*ANY -2)) + EXPR(*YES) + PROMPT('Spooled file number' 4) 9.- Los valores especiales pueden utilizarse en las sentencias PARM, ELEM y QUAL. Ya hemos mostrado varios ejemplos PARM, así que aquí mostramos un ejemplo de un parámetro cualificado que acepta valores especiales. PARM KWD(TEMPLATE) TYPE(FILE1) MIN(1) + PROMPT('Template' 1) FILE1: ELEM ELEM TYPE(QUALFILE1) MIN(1) PROMPT('File') TYPE(*NAME) LEN(10) DFT(*FIRST) + SPCVAL((*FIRST)) EXPR(*YES) PROMPT('Member') QUALFILE1: QUAL QUAL TYPE(*NAME) LEN(10) MIN(1) EXPR(*YES) TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL) (*CURLIB)) EXPR(*YES) + PROMPT'Library') 10.- Los valores especiales no están permitidos cuando un parámetro devuelve un valor al caller. Eso quiere decir que el keyword RNVAL tiene valor *YES. Está restricción no es un gran problema ya que es difícil imaginar porque alguien querría definir valores de entrada para un parámetro de salida. ATTITUDES Nº 286 13 Noviembre-Diciembre 2012 pReGuNta usuaRIO as/400: ¿Es posible utilizar una simple sentencia SQL para asignar una serie numérica ascendente a una columna en una tabla? Me gustaría que el número de la serie inicial fuera 10 y se incrementará de 10 en 10 cuando una fila sea actualizada de modo que la columna del número mostrará 10,20,30, etc… CONSULTING Respuesta att: Conozco una manera, pero vaya por delante que realmente solo he estado jugando con esto y nunca lo he utilizado en un entorno de producción. No puedo decir cuán útil o práctico es o que debería tenerse en cuenta como posible contra. Pregunta Usuario: ¿Es posible utilizar una simple sentencia SQL para asignar una serie numérica ascendente a una columna ElenDB2 para i,Me proporciona maneradede un objeto un seriedenumérica. Puede una tabla? gustaría queuna el número la crear serie inicial fuera que 10 y genere se incrementará 10 en 10 cuando utilizar este objeto para actualizar su tabla de base de datos (archivo físico). Aquí muestro el una fila sea actualizada de modo que la columna del número mostrará 10,20,30, etc… ejemplo: Respuesta ATT Conozco una manera, pero vaya por delante que realcree una tablacon con la yque jugar. mentePrimero solo he estado jugando esto nunca lo he utilizado en un entorno de producción. No puedo decir cuán útil create TestSeq o práctico es otable que debería tenerse en cuenta como posible (SerialNbr dec(5,0), Name char(24)) contra. El DB2 para i, proporciona una manera de crear un objeto que genere un serie numérica. Puede Luego ponga algunos datos en utilizar la tablaeste objeto para actualizar su tabla de base de datos (archivo físico). Aquí insert muestro elinto ejemplo: testseq (Name) values Actualice su tabla. update testseq set SerialNbr = next value for renumber Y ahora los datos son estos. SERIALNBR 10 20 30 ('Bob White-Quayle'), Primero cree una tabla con la que jugar. ('Billy Doo'), ('Jack O''Napes') SiSiyaya haha finalizado con con el generador de series finalizado el generador denumériseries numéricas cas puede deshacerse de él con un DROP. create table TestSeq (SerialNbr dec(5,0), Name char(24)) Y la tabla se parece a esto. drop sequence drop sequence renumber Si no ha terminado con él, puede dejarlo por ahí por si Si no ha terminado con él, puede dejarlo por ahí por si lo lo vuelve a necesitar. La serie empezaría donde se termino. donde se termino. Quizás esto responda a su pregunta. Quizás esto responda a su pregunta. Y la tabla se parece a esto. SERIALNBR Null Null Null NAME Bob White-Quayle Billy Doo Jack O'Napes NAME Bob White-Quayle Billy Doo Jack O'Napes También puede un generador seriesañada cuando También puede un generador de seriesdecuando da- añada dato tos a una tabla. Cree el generador de la de serie. Cree el generador la serie. create sequence renumber insert into testseq (SerialNbr, Name) values insert into testseq (SerialNbr, Name) values (next valuevalue for renumber, 'Bob White-Quayle'), (next for renumber, 'Bob White-Quayle'), (next value for renumber, 'Billy Doo'), (next value for renumber, 'Billy Doo'), (next value for renumber, 'Jack O''Napes') (next value for renumber, 'Jack O''Napes') start with 10 create sequence renumber increment by 10 start with 10 noincrement maxvalue by 10 nonocycle maxvalue no cycle Parece una buena manera de generar valores clave únicos. Quizá llegue a utilizarlo de verdad algún día. Parece una buena manera de generar valores clave únicos día. Actualice su tabla. update testseq set SerialNbr = next value for renumber Y ahora los datos son estos. COLABORAC 10 hechos que debería saber sob Imagine no poder escribir *FIRST en el parámetro MBR Database File). Un pensamiento terrible, ¿no? Los valores más sensibles y sencillos de manejar. A continuación pres desarrollador de IBM i debería conocer para poder utiliza en sus mandatos. 1.- Los valores especiales son cadenas de caracteres inc validez. En el ejemplo, BATCH requiere un número de tr ATTITUDES Nº 286 14 PARM KWD(BATCH) + Noviembre-Diciembre 2012 TYPE(*DEC) LEN(3 0) + DFT(*ALL) + Pregunta Usuario: Tengo un proceso que debo montarlo en varios sistemas. Se basa en la salida de un proceso existente que utiliza un área de datos para contener el nombre de una carpeta de destino en el IFS. ¿Es posible pasar el nombre de la carpeta en el script SFTP, o voy a tener que generar un script sobre la marcha? Respuesta ATT Si está utilizando SCP, puede utilizar una variable de entorno. Si está utilizando la utilidad Expect en su script, es posible pasarla como una variable, también. Si está utilizando la opción -b (batch) de SFTP, entonces probablemente tendrá que generar el script. Pregunta Usuario: He creado un mandato para iniciar algunas acciones en el sistema; el programa que llama el mandato es un CL. Uno de los parámetros, necesito ser capaz de utilizar caracteres en minúscula, pero el CL está recibiendo todos los valores de mayúsculas. ¿Cómo puedo definir PARM en el miembro fuente del mandato para permitir los valores de minúsculas? En mi programa (abajo), necesito el PARM PWD para recibir valores de minúsculas CMD PROMPT(‘Agrega a archivo comprimido’) PARM KWD(ZIP) TYPE(*PNAME) LEN(50) MIN(1) + PROMPT(‘Nombre de archivo comprimido’ 1) PARM KWD(FILE) TYPE(*PNAME) LEN(50) MIN(1) MAX(10) + PROMPT(‘Nombre de archivo a agregar’ 2) PARM KWD(INCSD) TYPE(INCSDID) MIN(1) PROMPT(‘Incluir + subcarpetas’ 3) PARM KWD(PWD) TYPE(*NAME) LEN(20) DFT(*NONE) + PROMPT(‘Contraseña’ 4) INCSDID: QUAL TYPE(*NAME) LEN(2) RSTD(*YES) VALUES(SI NO) MIN(1) + CHOICE(*VALUES)? Respuesta ATT Añadir CASE(*MIXED) en el PARM en cuestión. ATTITUDES Nº 286 15 Noviembre-Diciembre 2012 ATTITUDES Nº 282 3 Junio-Julio 2012