Dedicado a los programadores cobol.
Vistas de página en total
viernes, 1 de julio de 2016
jueves, 2 de junio de 2016
Jcl: Cómo realizar búsquedas
Imagínate que quieres hacer una búsqueda masiva de algún elemento o mensaje en todos los programas cobol que hay en producción e incluso en las cadenas o copys de producción. Pues es tan fácil como lanzar (o submitir) en desarrollo el siguiente jcl:
//SEARCH EXEC PGM=ISRSUPC,PARM(SRCHCMP,'ANYC')
//NEWDD DD DSN=LIBRERIA1,DISP=SHR
// DD DSN=LIBRERIA2,DISP=SHR
// DD DSN=LIBRERIA3,DISP=SHR
//OUTDD DD SYSOUT=(X)
//SYSIN DD *
SRCHFOR 'CADENA-A-BUSCAR'
/*
//SEARCH EXEC PGM=ISRSUPC,PARM(SRCHCMP,'ANYC')
//NEWDD DD DSN=LIBRERIA1,DISP=SHR
// DD DSN=LIBRERIA2,DISP=SHR
// DD DSN=LIBRERIA3,DISP=SHR
//OUTDD DD SYSOUT=(X)
//SYSIN DD *
SRCHFOR 'CADENA-A-BUSCAR'
/*
Cabe destacar el área del NEWDD: ahí irán todas las librerías de producción que contengan programas cobol, copys, cadenas,... en las que queramos realizar la búsqueda. Cabe destacar que en función del cliente para el que estemos trabajando estas librerías serán distintas de un sitio a otro. Es decir, si estamos en un cliente X la librería de las cadenas se llamará de una forma pero en un cliente Y se llamará de otra forma. Y con el resto de las librerías pasa exactamente lo mismo. Por lo tanto, en función del cliente en el que estés, las librerías que pongas aquí variarán.
Otra cosa importante es el SRCHFOR porque a continuación pondrás entre comillas aquello que quieras buscar en las librerías indicadas en el NEWDD.
De manera que sólo tendrías que hacer un SUB, es decir, submitir o lanzar dicha cadena en desarrollo para saber qué elementos utilizan dicha cadena que quieras buscar.
viernes, 6 de mayo de 2016
viernes, 1 de abril de 2016
Jcl: Generar un fichero para exportar a EXCEL
En ocasiones tenemos que generar por jcl un fichero para exportar posteriormente a Excel.
Podemos hacer dos cosas:
1º) Generar el fichero sin cabecera
2º) Generar el fichero con cabecera
Optar por el primer punto es lo más fácil porque sólo tendríamos que preparar un programa que generase un fichero de salida cuya copy o estructura sería algo como lo siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE ';'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE ';'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE ';'.
Cuando se ejecutase el programa en cuestión tendríamos un fichero del tipo:
CAMPO1;CAMPO2;.....;CAMPO9;
De manera que podríamos descargar dicho fichero como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
Aunque optar por la segunda opción no significa mayor dificultad ni complejidad pero sí habría que tener en cuenta alguna cosa. Veamos este caso en profundidad.
En este caso también tenemos que tener un programa que genere un fichero de salida con una estructura similar a la que acabamos de ver para la primera opción. Pero en este caso tenemos que tener en cuenta la longitud del fichero, y ¿por qué? Muy fácil, la respuesta está en relación al fichero que generemos con la cabecera. Es decir, tras ejecutar el programa que genere el fichero de salida con la estructura antes vista (contiene los datos separados por puntos y coma) se ejecutará el siguiente paso:
//PASOCAB EXEC PGM=SORT
//SORTIN DD *
//SORTOUT DD DSN=<<FICHERO-CABECERA>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(C'NOMB-COL1;',C'NOMB-COL2;',...C'NOMB-COLN;')
En el paso de SORT que acabamos de ver se genera un fichero con la cabecera que posteriormente tendrá la Excel. Cabe destacar lo siguiente: en el OUTREC FIELDS tenemos que, para incluir una nueva cabecera para encabezar una determinada columna, se debe poner
C'NOMBRE-CABECERA;'
Y aquí viene lo importante: te tienes que fijar con qué longitud se genera este fichero. La longitud con la que se genere este fichero te la tienes que apuntar. Si has leído con atención, el fichero de salida generado en el programa ejecutado con anterioridad al paso antes mostrado debe tener la misma longitud que el fichero de cabecera generado en el paso de SORT que acabamos de ver.
Llegados a este punto tenemos dos ficheros:
Lo último que tenemos que hacer es unir ambos ficheros en uno solo mediante un paso de SORT como el siguiente:
//PASOFEX EXEC PGM=SORT
//SORTIN DD DSN=<<FICHERO-CABECERA>>,DISP=SHR
// DD DSN=<<FICHERO-DATOS>>,DISP=SHR
//SORTOUT DD DSN=<<FICHERO-EXPORTAR-EXCEL>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
El resultado es un fichero en el que la primera línea es la cabecera (CAB1;...;CAB9;) y el resto de filas son los datos (CAMPO1;...;CAMPO9;). En este punto podríamos descargar el fichero resultante como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
En lugar de separar cada uno de los campos con el símbolo ; también existe otra variante que consiste en separar los campos mediante tabuladores. Para realizar esto tendríamos que definir el símbolo tabulador (X'05') de manera que en el programa cobol que generase el correspondiente fichero de datos tendríamos que tener una estructura como la siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE X'05'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE X'05'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE X'05'.
Esto ha sido todo por hoy. Espero que os haya resultado de utilidad.
Podemos hacer dos cosas:
1º) Generar el fichero sin cabecera
2º) Generar el fichero con cabecera
Optar por el primer punto es lo más fácil porque sólo tendríamos que preparar un programa que generase un fichero de salida cuya copy o estructura sería algo como lo siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE ';'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE ';'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE ';'.
Cuando se ejecutase el programa en cuestión tendríamos un fichero del tipo:
CAMPO1;CAMPO2;.....;CAMPO9;
De manera que podríamos descargar dicho fichero como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
Aunque optar por la segunda opción no significa mayor dificultad ni complejidad pero sí habría que tener en cuenta alguna cosa. Veamos este caso en profundidad.
En este caso también tenemos que tener un programa que genere un fichero de salida con una estructura similar a la que acabamos de ver para la primera opción. Pero en este caso tenemos que tener en cuenta la longitud del fichero, y ¿por qué? Muy fácil, la respuesta está en relación al fichero que generemos con la cabecera. Es decir, tras ejecutar el programa que genere el fichero de salida con la estructura antes vista (contiene los datos separados por puntos y coma) se ejecutará el siguiente paso:
//PASOCAB EXEC PGM=SORT
//SORTIN DD *
//SORTOUT DD DSN=<<FICHERO-CABECERA>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(C'NOMB-COL1;',C'NOMB-COL2;',...C'NOMB-COLN;')
C'NOMBRE-CABECERA;'
Y aquí viene lo importante: te tienes que fijar con qué longitud se genera este fichero. La longitud con la que se genere este fichero te la tienes que apuntar. Si has leído con atención, el fichero de salida generado en el programa ejecutado con anterioridad al paso antes mostrado debe tener la misma longitud que el fichero de cabecera generado en el paso de SORT que acabamos de ver.
Llegados a este punto tenemos dos ficheros:
- Fichero de datos: generado por programa en el que tenemos la información requerida separada por puntos y comas, teniendo algo como lo siguiente CAMPO1;CAMPO2;.....;CAMPO9;
- Fichero de cabecera: generado mediante un paso de SORT (ver el paso de SORT incluido), teniendo algo como lo siguiente CAB1;...;CAB9;
Lo último que tenemos que hacer es unir ambos ficheros en uno solo mediante un paso de SORT como el siguiente:
//PASOFEX EXEC PGM=SORT
//SORTIN DD DSN=<<FICHERO-CABECERA>>,DISP=SHR
// DD DSN=<<FICHERO-DATOS>>,DISP=SHR
//SORTOUT DD DSN=<<FICHERO-EXPORTAR-EXCEL>>,
// DISP=(,CATLG,DELETE)
// SPACE=(TKK,(10,1),RLSE),
// DCB=(RECFM=FB,LRECL=621,BLKSIZE=27945)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
El resultado es un fichero en el que la primera línea es la cabecera (CAB1;...;CAB9;) y el resto de filas son los datos (CAMPO1;...;CAMPO9;). En este punto podríamos descargar el fichero resultante como un txt, y pasarlo a Excel de una vez que lo tuviéramos descargado en el equipo como txt.
En lugar de separar cada uno de los campos con el símbolo ; también existe otra variante que consiste en separar los campos mediante tabuladores. Para realizar esto tendríamos que definir el símbolo tabulador (X'05') de manera que en el programa cobol que generase el correspondiente fichero de datos tendríamos que tener una estructura como la siguiente:
01 W-REG-SALIDA.
05 W-CAMPO1 PIC X(10).
05 W-FILLER1 PIC X(01) VALUE X'05'.
05 W-CAMPO2 PIC X(10).
05 W-FILLER2 PIC X(01) VALUE X'05'.
:
:
05 W-CAMPO9 PIC X(10).
05 W-FILLER9 PIC X(01) VALUE X'05'.
viernes, 4 de marzo de 2016
viernes, 19 de febrero de 2016
Jcl: Condiciones de ejecución
En los pasos de los jcl's se puede poner condiciones para que dichos pasos se ejecuten o no se ejecuten. Tal como: COND=(0,NE) o COND=(4,LT)
Comencemos con el siguiente ejemplo de condición: COND=(0,NE)
El tema de las condiciones siempre ha sido mi eterna lucha: ¿qué condición pongo para que se ejecute el siguiente paso? En ocasiones he puesto una condición y no he conseguido que funcionase en la manera que quería.
Tras poner la correspondiente cara de asombro, he tenido que cambiar la condición hasta que funcionase de la manera correcta. El poner la condición correcta era una cuestión de prueba y error....hasta hoy, día en el que he descubierto lo siguiente: la condición que pongas NO se tiene que cumplir para que el paso en cuestión se ejecute. Fíjate que lo he puesto en rojo porque es la idea principal para poner la condición correcta y, por tanto, el paso en cuestión se ejecute. Vamos a ver una serie de ejemplos en los que se cumpla esta idea.
Imagínate la típica cadena cuyo primer paso es el borrado de ficheros de trabajo o ficheros temporales. Un paso de ese tipo suele terminar con la sentencia SET MAXCC=0. Partiendo de la idea principal, ¿adivinas qué condición habría que poner al siguiente paso para que éste se ejecute?
¿Lo sabes? Tic, tac, tic, tac...va pasando el tiempo...Habría que poner lo siguiente: COND=(0,NE)
Es decir, supongamos que en un jcl hay dos pasos: el PASO1 que es el de borrado, el cual termina con la mencionada sentencia de SET MAXCC=0, y el paso PASO2 cuya condición es COND=(0,NE). ¿Por qué en este caso ponemos dicha condición? Muy sencillo. En el paso PASO1 estamos poniendo la sentencia SET MAXCC=0, lo que supone obligar a dicho paso que termine con código 0. Si queremos que el siguiente paso se ejecute debemos de poner la condición COND=(0,NE), que, si la interpretamos, significa NOT EQUAL 0. Y, ¿0 es distinto de 0? Nooooo, entonces se ejecuta el paso.
Ahora pasamos a otro ejemplo: cuando ejecutamos un paso de descarga de una tabla (También conocido como UNLOAD). Al ejecutarse dicho paso podemos obtener un fichero con datos o un fichero vacío (esto es muy típico cuando la SELECT ejecutada en el paso de descarga tiene cláusula WHERE y en la tabla que se está intentando descargar no existe ninguna fila que cumpla las condiciones del WHERE). Esto supone que podemos obtener dos posibles códigos: 0 si el fichero obtenido en la descarga contiene información o 4 si el fichero de descarga está vacío.
Llegados a este punto tenemos lo siguiente: el paso de UNLOAD puede devolver 0 si se ha descargado información (hemos obtenido un fichero con datos) o 4 si no se ha descargado información (hemos obtenido un fichero vacío). Teniendo en cuenta esto tenemos que preguntarnos con respecto al siguiente paso cuando éste ejecuta, por ejemplo, un programa que recibe en la entrada el fichero (con o sin datos) generado en la descarga de la tabla. Nos lo tenemos que preguntar porque nos puede interesar que sólo se ejecute si el código de retorno del paso de UNLOAD es 0 o que se ejecute indistintamente de que dicho código sea 0 ó 4. Si sólo queremos que se ejecute cuando el código de retorno del paso de UNLOAD sea 0 tenemos que poner la siguiente condición: COND=(0,NE). Imagino que recordarás el por qué (porque 0 no es igual a 0 y la condición no se cumple, como la condición no se cumple entonces se ejecuta el paso). Si queremos que se ejecute indistintamente de que el código de retorno del paso de UNLOAD sea 0 ó 4 tenemos que poner la siguiente condición: COND=(4,GT). GT es Greater Than (mayor que). Dado que ni 0 ni 4 son mayores que 4, no se cumpliría la condición y se ejecutaría el paso en cuestión. Sin embargo, las condiciones usadas en los pasos que se ejecutan a continuación de un paso de descarga tienen una particularidad: son la excepción que confirman la regla. ¿Por qué? Por que a pesar de lo que se acaba de explicar para los pasos ejecutados tras un paso de descarga (usar COND=(0,NE) o COND=(4,GT)) podemos usar también la siguiente condición: COND=(4,LT). Si usamos dicha condición en un paso que se ejecute después de un paso de UNLOAD tenemos que dicho paso se ejecutará con independencia del código devuelto por el paso de descarga.
Hemos aprendido cuál es la regla general (jamás debes olvidarla) y cómo se aplica en diferentes casos así como las excepciones (que se dan cuando se ha ejecutado un paso de UNLOAD).
Llegados a este punto tenemos lo siguiente: el paso de UNLOAD puede devolver 0 si se ha descargado información (hemos obtenido un fichero con datos) o 4 si no se ha descargado información (hemos obtenido un fichero vacío). Teniendo en cuenta esto tenemos que preguntarnos con respecto al siguiente paso cuando éste ejecuta, por ejemplo, un programa que recibe en la entrada el fichero (con o sin datos) generado en la descarga de la tabla. Nos lo tenemos que preguntar porque nos puede interesar que sólo se ejecute si el código de retorno del paso de UNLOAD es 0 o que se ejecute indistintamente de que dicho código sea 0 ó 4. Si sólo queremos que se ejecute cuando el código de retorno del paso de UNLOAD sea 0 tenemos que poner la siguiente condición: COND=(0,NE). Imagino que recordarás el por qué (porque 0 no es igual a 0 y la condición no se cumple, como la condición no se cumple entonces se ejecuta el paso). Si queremos que se ejecute indistintamente de que el código de retorno del paso de UNLOAD sea 0 ó 4 tenemos que poner la siguiente condición: COND=(4,GT). GT es Greater Than (mayor que). Dado que ni 0 ni 4 son mayores que 4, no se cumpliría la condición y se ejecutaría el paso en cuestión. Sin embargo, las condiciones usadas en los pasos que se ejecutan a continuación de un paso de descarga tienen una particularidad: son la excepción que confirman la regla. ¿Por qué? Por que a pesar de lo que se acaba de explicar para los pasos ejecutados tras un paso de descarga (usar COND=(0,NE) o COND=(4,GT)) podemos usar también la siguiente condición: COND=(4,LT). Si usamos dicha condición en un paso que se ejecute después de un paso de UNLOAD tenemos que dicho paso se ejecutará con independencia del código devuelto por el paso de descarga.
Hemos aprendido cuál es la regla general (jamás debes olvidarla) y cómo se aplica en diferentes casos así como las excepciones (que se dan cuando se ha ejecutado un paso de UNLOAD).
viernes, 5 de febrero de 2016
Humor - Modelo Cliente-Servidor
Si queréis un buen ejemplo para comprender totalmente qué es el modelo cliente-servidor, espero que la siguiente imagen os ayude.
viernes, 22 de enero de 2016
xpediter online
Lo primero de todo para poder pasar el xpediter con programas online es saber si dicho se programa se ha ejecutado. Y ¿cómo se sabe? pues muy fácil. Debemos ejecutar el siguiente comando en CICS:
CEMT S PROG(NOMB-PROG)
Siendo NOMB-PROG el nombre del programa online que queremos pasar por xpediter.
Tras ejecutar dicho comando debe aparecer en pantalla un mensaje en el que se indica el número de veces que se ha ejecutado el programa online.
Si no aparece eso es que todavía no se ha ejecutado. Y si no aparece....pues ya sabes, ejecuta dicho programa al menos una vez y así ya aparecería.
Llegados a este punto en el que ya aparece lo anterior, sólo tendríamos que ejecutar el siguiente comando: XPED NOMB-PROG (o XPE NOMB-PROG).
De una vez que se ha ejecutado dicho comando aparece una pantalla con el código del programa.
Lo primero de todo es poner un punto de ruptura (poner una B en la línea que queramos).
¿Ahora qué hacemos? Pulsamos PF3 tantas veces hasta que aparezca la pantalla principal. En esta pantalla se elegiría la opción 1 (1 - SESSION CONTROL). Aparece otra pantalla de la que se elegiría la opción 6 - TRAP SUMMARY. Aparece otra pantalla, de la cual, lo más importante es la primera fila, esa primera fila en la que hemos de indicar el nombre del programa bajo la columna PROGRAM. Acuérdate que dicho nombre debe coincidir con el que venga en el campo MODULE. En esa misma fila, y bajo la columna TRAP ABEND, debemos dejar el valor YES (y si no está puesto lo ponemos nosotros).
Pulsamos PF3 tantas veces como sea necesario hasta que volvamos a la pantalla principal. De una vez que estamos en la pantalla principal elegimos la opción 2 (2 - DEBUGGING FACILITIES) y aparece otra pantalla en la que elegimos la opción L - SOURCE LISTING. Tras elegir esa opción estamos en la pantalla del código del programa en la que tenemos el punto de ruptura.
Ya estamos preparados para lanzar el programa online y pasar el xpediter, así que lanzamos el programa. De una vez que está lanzado tenemos que ir al xpediter. Vamos a él y pulsamos PF9.
Ya tenemos la transacción parada y el programa online listo para ejecutarlo por xpediter. A partir de aquí sería igual que cuando empleamos el xpediter para el batch, me refiero a que es igual en lo siguiente:
1) Si das PF9 estarías ejecutando línea a línea.
2) Si das PF12 irías al final del programa y lo finalizarías. A menos que no
hubieras puesto previamente un punto de ruptura, en cuyo caso iría a
dicho punto de ruptura.
3) ¿Cómo se pone un punto de ruptura? Poniendo una B en aquella línea a la
que queremos ir directamente.
4) Si ponemos SS al inicio de una línea y otra vez SS varias líneas después lo
que haríamos sería que esas líneas de código no se ejecutarían.
5) Si estamos en un determinado punto del programa y queremos ir varias
líneas hacia atrás, ¿cómo se hace? Poniendo GT al inicio de la línea a la
que queramos retroceder.
Cuando acabamos de utilizar el xpediter en el online tenemos que hacer lo siguiente: pulsar PF3 tantas veces como sea necesario hasta que aparezca la pantalla en la que pregunta por finalizar sesión.
Tanto en END SESSION como en DUMP OPTION ponemos YES. Pulsamos intro y nos hemos salido del xpediter volviendo de nuevo al CICS. Aparece mensaje de confirmación.
Pues esto es el xpediter para online. Espero que te haya servido de ayuda, si tienes alguna duda no dudes en preguntar.
viernes, 8 de enero de 2016
Humor - Lo que cada uno entiende en un proyecto
Esto es un ejemplo de lo que cada uno entiende, a lo largo de un proyecto, de lo que realmente necesitaba el usuario.
viernes, 4 de diciembre de 2015
xpediter batch
Cuando estamos en el tso podemos hacer uso del xpediter para los procesos batch. Vamos a ver cómo se puede depurar un programa batch mediante xpediter.
Lo primero de todo es entrar en la utilidad existente en el sistema para hacer uso del xpediter, dependiendo del cliente en el que estemos trabajando existe una infraestructura que es la que limita la manera en la que se accede al xpediter. Se acceda de una manera o de otra deberemos llegar a un menú donde podamos elegir una opción relativa a XPEDITER. Se elegirá dicha opción.
De una vez que se ha accedido veremos una pantalla con un menú en el que elegimos la opción 2 (2 - TSO, la opción relativa para depurar programas bajo TSO). Aparece una pantalla en donde indicamos el programa, parámetros (si recibe algún dato por SYSIN), la librería en la que está el proceso donde estamos ejecutando el programa (también se indica el miembro dentro de esa librería, es el jcl donde tenemos el programa que estamos ejecutando, ejemplo: LIB.JCLS.DESA(JCL-PRUEBA)) y si tiene plan DB2 (en cuyo caso hay que indicar el nombre del plan y el sistema, éste último será desarrollo).
Lo primero de todo, en la misma pantalla anterior, es escribir SE y dar intro para que aparezca otra pantalla de la que elegiremos 1 - LOADLIBS.
Si elegimos dicha opción podremos indicar las librerías necesarias para poder pasar el xpediter. De una vez que hemos introducido las librerías, damos intro y a continuación damos PF3. De esta manera nos situamos en la pantalla donde ya hemos indicado el nombre del programa y el resto de datos.
En esta pantalla tenemos que rellenar una serie de información que paso a detallar a continuación (la que acabamos de indicar con tanta palabrería pero ahora más detallado):
- Program - aquí indicarías el nombre del programa
- Load Module - el nombre del ejecutable, coincide con el nombre del programa
- PARM - se suele dejar a YES
- File List/Jcl Member - se pone la librería en la que está el jcl desde el que lanzamos el programa y entre paréntesis se pone el nombre de dicho jcl. Ejemplo: LIB.JCLS.DESA(JCL-PRUEBA)
- Preview Files? - se suele dejar a NO
- Is this a DB2 Test? - si no tiene DB2 se deja a NO
- Is this a DB2 Test? - si tiene DB2 se pone YES
- Plan - indicamos el plan DB2
- System - indicamos el sistema: DBSD
Después de hacer lo indicado, en caso de que sea necesario, iríamos a la línea de comando y pondríamos END. Damos intro y aparece una pantalla en la que habría que indicar lo siguiente: 'LIB.EJEM.XPED(XPEDITER)'
Con esto estamos indicando la librería en la que el xpediter va a crear un archivo auxiliar. ¿Con qué nombre lo creará? Con el que le indiquemos entre paréntesis. Es decir, en nuestro ejemplo xpediter crearía un archivo auxiliar en la librería LIB.EJEM.XPED con nombre XPEDITER....se llamará así porque es lo que yo he puesto entre paréntesis, si hubiese puesto XPEDIT01 se crearía con ese nombre. Como veis, soy original a tope (en algunas instalaciones puede no aparecer esta pantalla, por lo tanto, en esos casos pasaríamos directamente a la siguiente pantalla).
Damos intro y....tatatachán...ya hemos comenzado a pasar el xpediter a nuestro programa.
A partir de aquí hay una serie de cosas que deberías saber:
1) Si das PF9 estarías ejecutando línea a línea.
2) Si das PF12 irías al final del programa y lo finalizarías. A menos que no
hubieras puesto previamente un punto de ruptura, en cuyo caso iría a
dicho punto de ruptura.
3) ¿Cómo se pone un punto de ruptura? Poniendo una B en aquella línea a la
que queremos ir directamente.
4) Si ponemos SS al inicio de una línea y otra vez SS varias líneas después lo
que haríamos sería que esas líneas de código no se ejecutarían.
5) Si estamos en un determinado punto del programa y queremos ir varias
líneas hacia atrás, ¿cómo se hace? Poniendo GT al inicio de la línea a la
que queramos retroceder.
Esto es lo básico que necesitas saber para pasar un programa por xpediter.
Pues esto es el xpediter para batch. Espero que te haya servido de ayuda, si tienes alguna duda no dudes en preguntar.
viernes, 20 de noviembre de 2015
viernes, 6 de noviembre de 2015
MicroFocus: versión gratuita para desarrolladores Mainframe del EDPE
Se trata de una solución orientada al desarrollo de aplicaciones en lenguaje COBOL para Mainframe, que ofrece opciones de editor inteligente y compilación a través de Eclipse o Visual Studio IDEs (Entorno de desarrollo integrado).
La solución ofrece un editor inteligente para programas COBOL, con análisis de código, edición de archivos de datos; BMS Screen Painter para el desarrollo y mantenimiento de macros BMS; y la tecnología de compilación de Micro Focus para verificar los programas antes de que migren al Mainframe.
Los interesados pueden descargarse gratuitamente la herramienta en el siguiente link:
http://online.microfocus.com/enterprise-developer-pe
Ésta es una buena ocasión para aquellos desarrolladores que quieren iniciarse en el mundo del COBOL y se encuentra con el problema de conseguir un editor/compilador para trabajar desde sus casas.
Si os animáis a probarlo, no dudéis en dejar algún comentario para dar vuestra opinión.
viernes, 16 de octubre de 2015
viernes, 2 de octubre de 2015
Programación de aplicaciones para dispositivos móviles
Con respecto a la programación de aplicaciones para dispositivos móviles, he encontrado un libro llamado Programación multimedia y dispositivos móviles al que puedes acceder pinchando aquí. Como podrás comprobar es de la editorial ra-ma y hay que pagar por él. Pero tiene un material adicional que te lo puedes descargar gratuitamente.
También he encontrado los siguientes apuntes en pdf relacionados con este tema:
Suscribirse a:
Entradas (Atom)






