Novembre-desembre 26.indd

Anuncio
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
Descargar