miércoles, 29 de abril de 2009

Caja de busqueda en el blog

He añadido una caja de Google en el blog para facilitaros la búsqueda de temas en el blog.

martes, 28 de abril de 2009

Someter trabajos batch

Para entender como el sistema somete un trabajo, explicaré cual es el procedimiento básico que utiliza el OS400.Para someter un trabajo utilizamos el mandato SBMJOB, indicando en el parámetro CMD el programa, o mandato, que queremos ejecutar, grabando una entrada en la cola de trabajo:
  • Es conveniente indicar un nombre de trabajo (JOB) que nos ayude a controlarlo, ya que por omisión utilizara el valor *JOBD, o sea utilizara el nombre de la descripción de trabajo para todos los trabajos que sometamos sin nombre.
  • El trabajo ira a la cola de trabajo (JOBQ) que este especificada en el SBMJOB, por omisión tiene *JOBD que nos indica que cogerá el valor de la cola de trabajo especificada en la descripción de trabajo, indicada en el parámetro JOBD.
  • El parámetro JOBD nos indica la descripción de trabajo que utilizará, por omisión tiene el valor *USRPRF, este nos indica que cogerá el valor de la descripción de trabajo del usuario que esta sometiendo el trabajo. Esto se define en el perfil del usuario (DSPUSRPRF parámetro JOBD).
  • El valor del parámetro JOBD(*USRPRF) puede forzarse para tener otro valor, al usar el parámetro USER del SBMJOB (por omisión *CURRENT), que indica que usara otro usuario para ejecutar el trabajo, evidentemente hemos de estar autorizados al perfil de usuario a utilizar ya que puede suponer un agujero de seguridad.
  • Podemos definir la prioridad que tendrá nuestro trabajo en la cola de trabajos (JOBPTY) y/o en la cola de salida (OUTPTY). Por omisión utiliza el valor *JOBD recuperando este valor de la descripción de trabajo que habitualmente es 5. Podemos indicarle otro valor que puede ir de 1 (alta prioridad) a 9 (baja prioridad), de todas formas tenemos un limite que esta indicado en el parámetro PTYLMT de nuestro perfil de usuario y que por omisión es 3.
  • Con el parámetro OUTQ definimos a que cola de salida irán los listados que genere nuestro trabajo, por omisión es *CURRENT con lo que utiliza la cola de salida que tienen asignada el trabajo desde donde se ejecuta el SBMJOB.
  • Otro parámetro muy importante es INLLIBL (Initial library list) donde indicaremos en que bibliotecas y en que orden el sistema operativo debe buscar los objetos (programas, archivos, áreas de datos, etc..) que se utilicen en el trabajo. Por omisión tiene el valor *CURRENT y por tanto la lista de bibliotecas sera la misma que la del trabajo desde donde se ejecuta el SBMJOB. Otro valor que puede tener el parámetro INLLIBL, y muy recomendable utilizar, es *JOBD que utilizara la lista de bibliotecas definida en la descripción de trabajo que utilicemos para someter el trabajo.
  • El parámetro RTGDTA (Routing data) es importante para asignar los atributos de ejecución del trabajo, esta relacionado con las entradas de direccionamiento que explicaré en un próximo articulo.
  • Después vendrían los parámetros relacionados con el log del trabajo: LOG, LOGCLPGM, LOGOUTPUT, JOBMSGQMX. Todos ellos tienen por omisión *JOBD. Habitualmente para que un trabajo deje rastro para que podamos ver los que se ha ejecutado es utilizando los valores LOG(4 00 *SECLVL) LOGCLPGM(*YES).
Para el resto de parámetros y valores os recomiendo leer con más calma la ayuda del propio mandato SBMJOB (SBMJOB + F4+F1+F2, F14 para imprimirla) para entrar en más detalle.

Para mucha más información:
Gestión de Trabajos en el IBM iSeries InformationCenter
Manual de IBM iSeries Systems management and Work management

viernes, 20 de marzo de 2009

Intercambio archivos entre AS y PC

En este documento se explican los tipos de intercambios de archivos más comunes entre AS400 y PC; deben servir solo como referencia y adaptar los parámetros según nuestras necesidades:

Archivos formato texto ("planos" de 1 solo campo):
De AS400 a PC, en un directorio ubicado en un servidor de archivos (por ejemplo):
CPYTOIMPF FROMFILE(mylib/myfile) TOSTMF('/QNTC/myserver/mysharedfolder/mytextfile.TXT') MBROPT(*REPLACE) STMFCODPAG(*PCASCII) RCDDLM(*CRLF) DTAFMT(*DLM) STRDLM(*NONE)

Para generar ficheros sin caracter CR (retorno carro) y solo LF (final de linea):
CPYTOIMPF FROMFILE(mylib/myfile) TOSTMF('/home/temp/myascii.txt') MBROPT(*REPLACE) FROMCCSID(37) STMFCODPAG(*PCASCII) RCDDLM(*LF) DTAFMT(*DLM) STRDLM(*NONE) STRESCCHR(*NONE) RMVBLANK(*TRAILING)
FLDDLM('')

Ejemplo para subir un archivo plano de PC (desde un servidor) al AS400:
  1. Primero averiguar la longitud del archivo TEXTO.TXT, por ejemplo en este caso 132.
  2. Crear un archivo de destino en el AS400:
  3. CRTPF FILE(MYLIB/TEXTO) RCDLEN(132)
  4. Copiar el archivo:
  5. CPYFRMIMPF FROMSTMF('/QNTC/myserver/mysharedfolder/mytextfile.TXT') TOFILE(MYLIB/TEXTO) MBROPT(*REPLACE) RCDDLM(*CRLF) DTAFMT(*DLM) STRDLM(*NONE) RMVBLANK(*NONE) FLDDLM(*TAB)
Para convertir y copiar un archivo de AS400 a formato CSV (para Excel y/o Access) y dejarlo en la carpeta de un servidor de archivos (p.e. WinNT) puedes utilizar el mandato:

CPYTOIMPF FROMFILE(mylib/myfile) TOSTMF ('/QNTC/myserver/mysharedfolder/mycsvfile.CSV') MBROPT(*REPLACE) STMFCODPAG(*PCASCII) RCDDLM(*CRLF) DTAFMT(*DLM) STRDLM('"') FLDDLM(';')

Tener en cuenta que la ruta "/QNTC/myserver/mysharedfolder/" solo funciona si:
  1. La carpeta compartida del servidor //myserver/mysharedfolder es accesible desde la red.
  2. El servicio Netserver del AS400, esta correctamente configurado.
  3. El usuario y la contraseña que lanza el mandato CPY???IMPF es igual en el AS400 y en el servidor de archivos.

viernes, 6 de marzo de 2009

Comprimir archivos en IFS

Para comprimir un archivo ASCII ubicado en el IFS del AS400 podemos utilizar el comando jar en una sesión del shell de UNIX en el AS400.

Como hacerlo, pues ahí va un ejemplo:
  1. Desde la línea de mandatos tecleamos STRQSH, o simplemente QSH.
  2. En la pantalla de "QSH Command Entry" teclear:
  3. jar -cfM /home/compress_folder/myfile.zip /home/myfolder/myfile1.txt
Si queremos comprimir todo el contenido de un directorio:
  1. jar -cfM /home/compress_folder/mydirectory.zip /home/folder_to_compress
Si queremos comprimir varios archivos, dentro de un CL:
  1. PGM
  2. ...
  3. QSH('jar -cfM /home/compress_folder/myfile.zip /home/myfolder/myfile1.txt /home/myfiles/myfile2.csv')
  4. ...
  5. ENDPGM