miércoles, 31 de julio de 2013

Copiar archivo a CSV y ejecutar Excel

Actualización de la utilidad CPYTOXLS, que uso para copiar un archivo a formato CSV y, si estoy ejecutando desde una sesión pantalla, ejecutar el programa de hoja de calculo que este instalado en el ordenador, habitualmente MS-Excel.
Precisamente esta es la actualización, ya que podemos configurar la hoja de calculo que vamos a ejecutar actualizando una área de datos, sin tener que recompilar, en cada nueva versión de la hoja de calculo, el programa que lo procesa. También incorpora la nueva opción de eliminar el archivo del IFS generado, parámetro DLT, su valor por omisión es *NO.
Si el mandato se lanza en un trabajo batch, no se ejecutara el programa de hoja de calculo ni eliminara el archivo IFS generado, aunque lo hayamos indicado que ejecute y lo elimine (parámetros EXC y DLT). 
En el mandato CPYTOXLS podemos pulsar F1, para acceder al panel de ayuda, y donde se explica, con más detalle, la conversión a CSV.
Debemos tener instalado el iSeries Access (STRPCO) y habilitado el servicio Netserver para que la hoja de calculo pueda ejecutarse con el mandato STRPCCMD y acceder al fichero .CSV generado, en el directorio IFS del sistema que indiquemos.
Podemos bajarnos el código de esta utilidad desde este enlace.

PowerCL: CL for Files (CLF)

Si tenéis la necesidad, o ganas, de poder insertar, actualizar o borrar registros de una tabla desde programas CL, existe una tool (shareware con periodo de prueba de 30 días) para hacerlo posible:
www.powercl.com de Bruce Vining.

viernes, 14 de junio de 2013

IBM AS400 en 25 diapositivas

La revista electrónica "IBM Systems magazine", esta publicado interesantes artículos  aprovechando la efemérides de los 25 años del  sistema AS400 (i)., para dar a conocer mejor este sistema, a los profanos; y también para gozo de los veteranos. Entre ellos destaco los siguientes:

  1. Integration: The invisibility cloak of complexity
  2. User Groups: We’ve really got a lot in common!
  3. AS/400: The 36 was from Venus, the 38 from Mars
  4. TIMI: Shoes that fit every occasion
  5. Single-level storage: Where did I leave my keys?
  6. Subsystems: Hostel or hotel?
  7. Object orientation: May I see your badge, please?
  8. Integrated database: Will you need a bed in your hotel room tonight?
  9. Virtualization: A great idea is new again.
  10. System Integrity: Trust but verify
  11. ISVs: An application system for business
  12. International: Anyone for double-byte Ping-Pong?
  13. Business Partners: A freight train needs a track
  14. Lab Services: Want a superstar on your team?
  15. Out-of-box: No assembly required
  16. RPG: No, it’s not rebounds per game
  17. Integrated Middleware: Tricked out or built in?
  18. PASE: Welcome to the family!
  19. PHP: Red wine with fish, Mr. Bond?
  20. POWER: What do IBM i and Watson have in common?
  21. User interfaces: Green is good; BYOD might be even better.
  22. Reliability: Over a long distance, you learn a lot about the strength of your horse
  23. Automated service: The robocall everyone wants to get
  24. LUG: Want something to change? Do it together.
  25. Client success: The Rochester way

                                                  jueves, 13 de junio de 2013

                                                  Recuperar atributos de otro trabajo

                                                  Muchos conocemos, y usamos, el mandato RTVJOBA que recupera los atributos de nuestro trabajo, y según los valores recuperados ejecutar unas u otras sentencias; unos ejemplos:

                                                  • RTVJOBA USER(&USRPRF) : Si el valor &USRPRF devuelto pertenece al grupo de los usuarios operadores, le muestro, por ejemplo, un menú de backup, en caso contrario salgo sin dejarle hacer nada.
                                                  • RTVJOBA TYPE(&TYPE):  Si el valor recuperado &TYPE devuelve '1' es un trabajo interactivo y puedo mostrar por ejemplo una pantalla, y si tiene el valor '0' generar un listado de spool.

                                                  ¿Pero que pasa cuando necesitamos recuperar los atributos de otro trabajo? 
                                                  Para ello cree la utilidad RTVJOBATR "Retrieve another Job Attributes" que devuelve varios atributos de un trabajo, que aun exista en el sistema, indiferentemente del estado de dicho trabajo.

                                                  viernes, 24 de mayo de 2013

                                                  Utilidad estadisticas espacio en disco (DSKINF)

                                                  En un articulo anterior se explicaba como activar las estadísticas de espacio en disco incluidas con el sistema operativo de nuestro AS400.

                                                  Analizando el funcionamiento de dicha función del AS400 desarrolle, hace años, la utilidad CPYDSKINF, para consolidar, periódicamente, esta información en otro archivo y así poder realizar análisis de la evolución del crecimiento de la ocupación en disco, de las bibliotecas y/o de los objetos.

                                                  La periodicidad podría ser semanal, o como mínimo mensual, aunque deberemos analizar cual es la mejor periodicidad para nuestro sistema y nuestras necesidades. Deberemos tener en cuenta que este proceso genera, acumula mucha información, y necesita mucho tiempo de ejecución,  aunque, evidentemente, dependerá del rendimiento de nuestro sistema.
                                                  Si usamos esta utilidad es recomendable no utilizar la opción de planificación de recogida de estadísticas de espacio en disco del sistema (GO DISKTASKS), ya que estaremos duplicando el proceso y podemos tener problemas si los lanzamos al mismo tiempo.

                                                  Para planificar la ejecución semanal, de esta utilidad, utilizar el siguiente mandato:
                                                  ADDJOBSCDE JOB(CPYDSKINF) CMD(CALL PGM(DSKINF/CPYDSKINF)) FRQ(*WEEKLY) SCDDATE(*NONE) SCDDAY(*SUN) SCDTIME('23:59:59') RCYACN(*SBMRLS) JOBQ(QSYS/QUSRNOMAX) 
                                                  TEXT('Statistical disk space usage')

                                                  A partir de los datos recogidos, semana a semana, podemos utilizar Query's, Consultas QM o SQL, para extraer información sobre la evolución de la ocupación del disco, bibliotecas y de los objetos  en el sistema. También nos puede servir para averiguar en que periodo se elimino un objeto, que objetos se han creado entre periodos, etc...

                                                  El programa actualiza los tres archivos DSKINF, EVODSK y EVOLIB:
                                                  • DSKINF: Contiene la misma información que QAEZDISK, pero con 2 campos más que contienen el nombre del sistema, donde se ha recogido la información, y la fecha de recogida (en formato saammdd).
                                                  • EVODSK: Se genera en cada ejecución y contiene un registro por cada fecha de recogida con la ocupación en disco y el total de disco cuando se recogió la información.
                                                  • EVOLIB: Se genera en cada ejecución y contiene un registro por cada fecha de recogida y biblioteca, con el tamaño de la misma cuando se recogió la información.
                                                  En el código del programa CPYDSKINF, la variable &DLTDAT nos indica cuanto tiempo debe conservar los datos de información de espacio en disco en el sistema, de esta forma el tamaño de la biblioteca DSKINF sera, más o menos, constante. Por omisión se conservan 365 días.

                                                  Seguid las instrucciones de instalación de la utilidad en el fuente README_DSK.TXT incluido. Se recomienda instalarla en la biblioteca DSKINF, de esta forma tendremos más controlado el espacio que ocupa esta información. Podéis bajaros el código desde este enlace.

                                                  Esta utilidad consta de varios fuentes y objetos:
                                                  ADDDSKINF   RPG   Añade registros informe espacio disco
                                                  CPYDSKINF   CLP   Genera, consolida e imprime informes disco
                                                  DSKINF      PF    Informe espacio en disco
                                                  EVODSK      SQL   Evolución espacio en disco

                                                  EVODSK_CRT  SQL   Creación archivo evolución espacio en disco 
                                                  EVOLIB      SQL   Evolución ocupación bibliotecas

                                                  EVOLIB_CRT  SQL   Creación archivo evolución ocupación bibliotecas 
                                                  RMVDSKINF   RPG   Elimina registros informe espacio disco

                                                  README_DSK  TXT   Instrucciones de instalación de DSKINF 

                                                  Notas:

                                                  lunes, 13 de mayo de 2013

                                                  Visualizar los trabajos de un usuario

                                                  Cuando tenemos que controlar trabajos de varios usuarios y diferentes nombres, podemos usar los mandatos WRKJOB, WRKUSRJOB y WRKSBMJOB, además del WRKACTJOB, pero muchas veces tenemos que ir cambiando de mandato para poder usar el que más fácilmente nos muestra los trabajos que que queremos comprobar. Esto implica una perdida de tiempo navegando por varios mandatos, es por ello que creé el mandato DSPUSRJOB, basado en la tool RTVJOBCNT de Martin Rowe.
                                                  El uso del mandato es sencillo y podemos usar la tecla de función F4, para ver los parámetros disponibles, así como también F1 para visualizar la ayuda del mandato y sus parámetros.
                                                  Las opciones 2=Change job y 4=End job solo las veremos si nuestro usuario tiene el permiso especial *JOBCTL. El resto de las opciones 5=Display job,  6=Change joblog y 8=Display spools están disponibles para cualquier usuario que utilice el mandato si hemos tenido la precaución de compilar el programa con USER(*OWNER) y el propietario del programa DSPUSRJOBC sea, por ejemplo QPGMR, u otro usuario con *JOBCTL.

                                                  Con este mandato tenemos la posibilidad de dar acceso a trabajos de otros usuarios a usuarios que no tienen la autorización especial *JOBCTL en su perfil de usuario. Esto nos evita, lo que se hace a veces, de dar autorización *JOBCTL a un perfil de usuario que no debería tenerla, solo para facilitarle el acceso a un trabajo, por ejemplo para ver los spools del mismo.
                                                  Para limitar el acceso a esta potente herramienta, la habremos compilado con AUT(*EXCLUDE) para limitar el uso publico del mandato (y programa). Posteriormente podremos añadir la autorización *USE a los usuarios que nos interese que puedan utilizarla.

                                                  Podéis bajar el código de esta utilidad desde este enlace.

                                                  Tenéis más información sobre la discusión de otorgar las autorizaciones especiales *JOBCTL y/o *ALLOBJ, para solo controlar trabajos en este enlace.

                                                  viernes, 26 de abril de 2013

                                                  Cambiar contraseñas conocidas

                                                  El sistema operativo viene con algunos usuarios genéricos ya instalados y cuya contraseña es igual al nombre del perfil de usuario.
                                                  Para evitar accesos no controlados con estos usuarios a nuestros sistemas es altamente, yo diría imprescindible  cambiar la contraseña de dichos usuarios inmediatamente después de instalar el sistema operativo. Los perfiles de usuario más conocidos son QSECOFR, QSYSOPR y QPGMR, debemos asignarles una contraseña, que sea difícil de adivinar y fácil de recordar. Podéis ver mi entrada "La clave de las claves" con ideas de que contraseña elegir.
                                                  Por otra parte existen otros usuarios que no son tan conocidos pero que debemos evitar se usen sin nuestro conocimiento, estos usuarios son QUSER, QSRV y QSRVBAS. Lo más recomendable para estos perfiles es cambiar la contraseña a *NONE, con este cambio impedimos que se puedan conectar al sistema usándolos  Tened mucho cuidado en deshabilitarlos ya que, por ejemplo el perfil QUSER, debe estar activo ya que se usa en muchos trabajos de sistema, que dan servicio a otros usuarios, por ejemplo las conexiones ODBC en los trabajos QZDASOINIT.
                                                  También se deberían cambiar las contraseñas de los usuarios de servicios de la DST.

                                                  Ademas es altamente recomendable:
                                                  - Tener el nivel de seguridad del sistema (valor de sistema QSECURITY) con un valor de 30 como mínimo, 40 como recomendable o superior. ver entrada "Configurar seguridad del sistema"
                                                  - Duplicar el perfil de usuario QSECOFR, como QSECOFR2 para, por si alguna razón alguien nos bloquea QSECOFR, con ese usuario podamos entrar y poder habilitarlo de nuevo.
                                                  - Cambiar todos los perfiles de usuario que tengan como contraseña igual al nombre de perfil, ver entrada "Desactivar usuarios con contraseña por omisión".
                                                  - Los perfiles de usuarios que uséis como perfiles de grupo recomiendo cambiarlos a contraseña *NONE, en mi opinión deberían como contenedores de perfiles de usuarios, para asignar más fácilmente permisos a los objetos creados.

                                                  En el IBM Information Center tenéis una explicación más amplia de este tema: Changing known passwords

                                                  sábado, 20 de abril de 2013

                                                  Cambiar mensajes de error inicio sesión

                                                  Cuando un usuario introduce incorrectamente el usuario o la contraseña, en la pantalla de inicio de sesión, el sistema le avisa del error y si el fallo es el usuario o de la contraseña.
                                                  "CPF1107 - Contraseña incorrecta para perfil de usuario."
                                                  "CPF1120 - No existe el usuario &1."
                                                  ó si el idioma primario es ingles:
                                                  "CPF1107 – Password not correct for user profile."
                                                  "CPF1120 – User &1 does not exist."
                                                  Para evitar dar demasiadas pistas, sobre el error cometido, a un posible saboteador (hacker), podemos modificar la descripción de los mensajes siguientes, en el archivo de mensajes (QCPFMSG); Si nuestro idioma primario es el castellano (2931), ejecutaremos este mandato:
                                                  CHGMSGD MSGID(CPF1107) MSGF(QSYS/QCPFMSG) 
                                                     MSG('Información de inicio de sesión incorrecta')
                                                  CHGMSGD MSGID(CPF1120) MSGF(QSYS/QCPFMSG) 
                                                     MSG('Información de inicio de sesión incorrecta')

                                                  lunes, 1 de abril de 2013

                                                  Historico de trabajos del sistema (HSTJOBLOG)

                                                  La utilidad HSTJOBLOG, creada y publicada en 2003 en mi antigua pagina web, genera y mantiene una base de datos de todos los trabajos ejecutados en el sistema. Debemos tener una tarea planificada que se ejecute periódicamente.
                                                  Esta utilidad lee los mensajes de finalización de los trabajos (CPF1164), en los archivos QHST, y los guarda en un archivo. Por omisión guarda todos los trabajos ejecutados en el sistema, pero realizando unas sencillas modificaciones, en el código del programa, podemos filtrar trabajos para no ocupar tanto espacio, o evitar guardar información no significativa para nuestra instalación.
                                                  Para consultar la información generada tenemos una sencilla interfaz de pantalla que invocamos con el mandato HSTJOBLOG, podemos pasar, como parámetro  el nombre del trabajo o un perfil de usuario.

                                                  viernes, 22 de marzo de 2013

                                                  Entradas de diario para tablas (y 4)

                                                  En la entrada anterior "Entradas de diario para tablas (3)" explicaba como analizar las cabeceras de las entradas de diario. Pero otra forma en que nos ayudan las entradas de diario es la de analizar las entradas de un trabajo en su conjunto, esto fácil de entender, pero más difícil de explicar por lo que intentare hacerlo con un ejemplo.

                                                  Podemos hacer una primer análisis usando DSPJRN por pantalla, pero puede ser complicado si hay muchas entradas, lo más recomendable seria someter el volcado de las entradas de diario generadas por el trabajo a fichero, esto se explicaba en la entrada "Entradas de diario para tablas (2)", y a continuación podemos bajar el fichero a una hoja de calculo; esto es relativamente sencillo usando el complemento de "Transfer Data from System i" incluido en el "IBM System i Access for Windows", acordaros de marcar la casilla "Convert CCSID 65535" de las "Properties" de la definición, aunque siempre suele dar un error en la columna 21 (JOJID), al contener caracteres no visualizables y que podemos ignorar. Adjunto una imagen de un archivo con entradas de diario bajadas a hoja de calculo:

                                                  viernes, 15 de marzo de 2013

                                                  Entradas de diario para tablas (3)

                                                  En la entrada anterior "Entradas de diario para tablas (2)" se explicaba como podemos obtener la información del journal, ahora me centrare en analizar la información de las entradas de diario.

                                                  Como he dicho las entradas de diario nos dan información de los cambios en las tablas registradas por el diario, DSPJRN nos muestra la lista de entrada por numero de secuencia y reflejan el orden estricto en que se han ejecutado las acciones en la base de datos.
                                                  Con la opción 5 "Display entire entry" visualizaremos el contenido de la entrada. La primera vez que entramos nos muestra los datos específicos para esa entrada "Entry specific data". Si el tipo de entrada fuera, por ejemplo, R-PT (Record added) nos mostrará el buffer del registro con los datos que ha insertado en la tabla, que se muestra en la cabecera de la pantalla:
                                                  Los campos numéricos se muestran como caracteres ilegibles, podemos pulsar "F11=Display hexadecimal format" para mostrar su valor en hexadecimal.

                                                  viernes, 8 de marzo de 2013

                                                  Entradas de diario para tablas (2)

                                                  En la entrada anterior "Entradas de diario para tablas (1)" explique como tener nuestros archivos registrados por diario, para poder analizar los cambios en los datos de los archivos.

                                                  Con nuestros archivos ya registrados por diario, podemos investigar en sus entradas usando el mandato DSPJRN.

                                                  Con DSPJRN podemos visualizar las entradas que se van grabando en los receptores de diario. Estas entradas reflejan cambios en los datos (o archivos), ciclos de commit, rollback, etc.
                                                  Hay varios parámetros importante en este mandato:
                                                  • JRN: Es el diario del cual vamos a recuperar entradas. Es recordar que, si queremos ver los cambios en tablas que están en diferentes diarios, habremos de ejecutar un DSPJRN por cada diario implicado.
                                                  • FILE: Podemos indicar si solo queremos ver las entradas para una, o más, tablas. Si lo dejamos en blanco saldrán todas.
                                                  • RCVRNG: Si los dejamos en blanco solo recupera entrada del receptor de diario al cual esta conectado en ese momento. Si queremos buscar en un receptor concreto hemos de especificar el nombre del receptor. Si hemos de buscar un rango de fecha/hora hay que que especificar *CURCHAIN, es un error muy habitual olvidarse de este parámetro :(
                                                  • FROMENTLRG y TOENTLRG: Aquí introduciremos el numero de secuencia  de la entrada de diario de inicio/fin, es muy raro usar este parámetro ya que habitualmente desconocemos (de entrada) este número.
                                                  • FROMTIME y TOTIME: Aquí introduciremos la fecha/hora de inicio y fin del rango donde buscaremos, cuando más acotemos menos tardara la búsqueda. Hay que calcularlo bien ya que no podemos paginar más atrás  del inicio que pongamos y tendremos que volver a repetir la búsqueda.
                                                  • JRNCDE y ENTTYP: Si buscamos algún tipo especifico, o código, de entrada de diario, los introducimos aquí, a la practica solo se suele usar en ENTTYP. Por defecto es *ALL, que ya nos va bien.
                                                  • JOB: Introducirlo aquí si sabemos el nombre del trabajo, o mejor su JobID, del cual queremos ver las entradas de diario que ha generado su ejecución. De esta forma acotamos la búsqueda y podemos analizar el comportamiento de un trabajo en base a los cambios en la base de datos.
                                                  • CCIDLRG: Si conocemos el numero de secuencia del ciclo de commit, podemos introducirlo. De esta forma solo se mostraran las entradas de diario que se han generado bajo ese ciclo de commit, esta opción es mu potente ya que si los programas utilizan la lógica con ciclos de commit es fácil, para un programador ver 
                                                  • OUTPUT: Para visualizar la información por pantalla, a archivo de spool o  volcar las entradas a un archivo (ver al final de este articulo).

                                                  viernes, 1 de marzo de 2013

                                                  Entradas de diario para tablas (1)

                                                  Las entradas de diario, de los archivos registrados por diario, nos pueden ser de mucha utilidad para analizar los cambios de los archivos y/o de sus datos.

                                                  La primera condición es que la tabla este registrada por diario, esto ya lo explique en la entrada Arrancar registro por diario automáticamente.

                                                  Es importante arrancar el registro por diario de un archivo, mandato STRJRNPF, con los parámetros:

                                                  • IMAGES(*BOTH): Que guarda la imagen anterior y posterior al cambio del registro (aunque ocupa más espacio en disco); podemos usar el valor *AFTER pero no veremos el valor que tenían los datos antes de grabarse en el registro, aunque ahorremos espacio en disco.
                                                  • OMTJRNE(*OPNCLO): Que omite guardar en el diario una entrada cada vez que hacemos un open y/o close de una tabla, básicamente para ahorrar tiempo y espacio en disco.
                                                  El tener tablas registradas por diario tiene implicaciones en el sistema, como el incremento del tiempo de ejecución de los trabajos (debe insertar entradas en el receptor de diario) y del uso de disco (los receptores ocupan espacio); por lo que antes deberemos analizar previamente dicho impacto, y en como gestionaremos los receptores de diario.
                                                  Como ayuda podemos consultar el en IBM i Information Center y también estas dos entradas de mi blog:
                                                  Con nuestros archivos ya registrados por diario, podemos investigar en sus entradas usando el mandato DSPJRN.

                                                  Continua (2)...

                                                  jueves, 14 de febrero de 2013

                                                  CL: Nuevas funciones incorporadas en V7R1

                                                  He leído un interesante articulo, en la web de SecureMyi, donde se explican las nuevas funciones incorporadas del lenguaje CL en la V7R1 (es necesario instalar la ptf SI49061).

                                                  JobD que usan una Cola de Trabajos o de Salida

                                                  Como continuación a la entrada anterior de este blog "JobD que usan una Biblioteca (FNDJOBDL)", nos podemos encontrar con el caso de querer hacer limpieza de Colas de Entrada y/o Colas de Salida y no sabemos en que Descripciones de Trabajo están definidas. Para ello realice una modificación de la utilidad FNDJOBDL, y poder realizar dichas funciones con dos nuevas utilidades:
                                                  • Find Job Queue on Jobd (FNDJOBDQ)
                                                  • Find Out Queue on Jobd (FNDJOBDO)
                                                  Con un funcionamiento idéntico a FNDJOBDL, obtendremos de forma fácil y rápida una lista de las descripciones de trabajo (JOBD) en las que participa una Cola de Trabajos (JOBQ)  o una Cola de Salida (OUTQ).

                                                  Podéis bajaros el código de los siguientes enlaces: FNDJOBDQ o FNDJOBDO.

                                                  jueves, 7 de febrero de 2013

                                                  JobD que usan una Biblioteca (FNDJOBDL)

                                                  Cuantas veces revisando las bibliotecas del sistema hemos eliminado alguna, que no se usaba, y después han empezado a fallar SBMJOB por que no encuentran esa biblioteca en la descripción de trabajo que utilizan.
                                                  Pues bien, la utilidad JCRLJOBD, publicada hace tiempo por Craig Rutledge, viene en nuestra ayuda. Esta utilidad busca, en todas las descripciones de trabajo (JOBD) del sistema, si contienen una biblioteca en su lista inicial de bibliotecas (INLLIBL).
                                                  Como dicha utilidad tenia salida por pantalla, realice una modificación para que, opcionalmente, también pudiera hacerlo a un archivo de spool, de esta forma puedo someter el nuevo mandato FNDJOBDL y documentar las Descripciones de Trabajo que utilizan una biblioteca.
                                                  En la pantalla podemos ver el funcionamiento de dicha utilidad, y un ejemplo de su salida por pantalla o spool, buscando en que JobD participa la biblioteca QGPL:
                                                  Podéis bajar el código de este enlace FNDJOBDL.

                                                  viernes, 1 de febrero de 2013

                                                  Uso del mandato RGZPFM



                                                  El mandato Reorganizar miembro de archivo físico (RGZPFM) tiene dos funciones principales:

                                                  • Comprimir (remover registros eliminados) de un miembro de un archivo físico (PF), para reducir el tamaño del objeto.
                                                  • Ordenar los registros de la tabla con una clave, por lo general la clave principal usando el valor KEYFILE(*FILE), aunque hay que tener en cuenta que si el código de la aplicación es necesito leer los registros con la secuencia de llegada, hemos de utilizar el valor *NONE, para dicho parámetro.
                                                  Mientras se ejecuta el proceso de compresión, el mandato RGZPFM bloquea en exclusividad el objeto, por lo que, dependiendo del número de registros, el tamaño de la tabla, y la reconstrucción de los indices de la tabla, la ejecución podría durar mucho tiempo y habla que tenerlo en cuenta para buscar una ventana donde se pueda ejecutar. También está recomendado, yo diría prohibido, cancelar la ejecución del RGZPFM (* ver nota al final), ya que podría dañar el objeto; por ello es recomendable, antes de ejecutarlo, realizar una copia de seguridad del archivo, sus índices y tablas asociadas (restricciones) y detener las aplicaciones que están utilizando la tabla.

                                                  miércoles, 23 de enero de 2013

                                                  Copiar miembros fuente al PC (CPYSRCTOPC)

                                                  La utilidad CPYSRCTOPC, publicada hace ya años en mi antigua web, copia miembros fuente de un archivo de fuentes a archivos planos de PC, en formato ANSI, en un directorio del AS400.

                                                  En el siguiente pantalla podéis ver un ejemplo de uso:
                                                  Si el directorio destino no existe se crea automáticamente.
                                                  Podéis bajaros el código del siguiente enlace Copiar miembros fuente a archivo ANSI.

                                                  Teknoda Tips

                                                  Ya hace algún tiempo que la gente de Teknoda esta publicando información muy útil para los usuarios de AS400; es por ello que he incluido en mi blog un widget para realizar el seguimiento de sus entradas. www.teknodatips.com.ar

                                                  Cambio de look

                                                  Aunque últimamente no he tenido tiempo de actualizar las entradas del blog www.as400howto.com si he creído conveniente actualizar la imagen y formato del mismo. Creo que gana en claridad y es más fácil su lectura.
                                                  Espero que os guste :o)