Este tema se ocupa de tareas adecuadas en los casos siguientes:
- Cuando el destino para la generación de EGL es BMP de
IMS o IMS/VS o bien
- Cuando el código accede a bases de datos de DL/I, como es el caso cuando el sistema destino es
CICS, IMS/VS, BMP de
IMS o
z/OS por lotes, o bien
- Cuando el código accede a archivos GSAM, como es el caso cuando el sistema destino es BMP de
IMS o
z/OS por lotes.
En los casos previos, puede personalizar elementos de programa de EGL según sea necesario para
generar un programa COBOL que puede acceder a los bloques de especificación de programa (PSB) y a
los bloques de comunicación de programa (PCB). En lo sucesivo, a estos bloques se les llamará PSB y
PCB de tiempo de ejecución.
En primer lugar, defina los componentes de registro de DLISegment a los que hará referencia en
los registros de PCB de base de datos (si los hay). Después de eso, las tareas primarias son las
siguientes:
- Definir un componente de registro de PSB. Este componente incluye el conjunto de registros de
PCB que se utilizarán al acceder a las colas de mensajes de
IMS, las bases de
datos de DL/I o los archivos de GSAM
- En el programa, asegúrese de que la información de PSB y PCB esté disponible:
- Declare un registro basado en el componente de registro de PSB
- Establezca la propiedad del programa @DLI, campo de propiedad psb, en el nombre
del registro de PSB; para conocer detalles de la sintaxis, consulte el apartado Bloques
set-value
Cada registro de PCB está basado en uno de los componentes de registro de PCB predefinidos,
siguientes:
- IO_ PCBRecord
- Se utiliza para interactuar con un PCB de E/S que permite la entrada de un programa o terminal
y (si la entrada venía de un terminal) permite la salida en el mismo terminal. El PCB de E/S
también proporciona acceso a otras posibilidades de
IMS; por ejemplo,
punto de control y reinicio de un programa por lotes.
- ALT_PCBRecord
- Se utiliza para hacer referencia a un PCB de teleproceso que no sea el PCB de E/S. Este tipo de
registro permite al código escribir la salida en una cola de mensajes asociada a otra transacción
o a otro dispositivo distinto al terminal asociado al PCB de E/S. El PCB de tiempo de ejecución
puede ser de una de las especies siguientes:
- Un PCB alterno, en cuyo caso, la salida solo se produce si se produce un compromiso.
- Un PCB alterno expreso, en cuyo caso, la salida se produce independientemente de si se produce
un compromiso o una retrotracción.
- DB_PCBRecord
- Se utiliza para hacer referencia a un PCB de base de datos que representa a una base de datos
de DL/I accesible desde el programa. El PCB de base de datos de tiempo de ejecución especifica los
datos a los que es posible acceder y el tipo de acceso válido.
- GSAM_PCBRecord
- Se utiliza para hacer referencia a un PCB de GSAM que se utiliza cuando un programa por lotes
de z/OS o de BMP de
IMS accede a un
archivo de serie que actúa como una base de datos de DL/I solo de raíz.
La lista siguiente proporciona detalles acerca del PSB de tiempo de ejecución en cada uno de los
sistemas de destino.
- CICS
- El valor de la propiedad de registro PSB defaultPSBName es (por omisión) el nombre del
PSB de tiempo de ejecución. EGL pone ese nombre en el campo psbName de la variable del
sistema DLILib.psbData, pero puede asignar un valor distinto a ese campo de biblioteca.
Cuando el programa intenta una operación de E/S frente a una base de datos de DL/I, el valor de
psbName determina qué PSB se utiliza.
La variable del sistema
DLILib.psbData tiene
un segundo campo,
psbRef. El valor inicial del campo es cero, lo que indica que no hay ningún
PSB planificado.
Cuando se produce el primer E/S de DL/I, el tiempo de ejecución de EGL emite una llamada de
planificación de PSB, que actúa de la manera siguiente:
- Utiliza el valor de DLILib.psbData.psbName para planificar un PSB de tiempo de ejecución.
- Establece DLILib.psbData.psbRef en una dirección con la que se puede acceder a es PSB.
Nota: Debe evitar escribir lógica que asigne un valor a DLILib.psbData.psbRef.
Durante una llamada, puede utilizar la variable
DLILib.psbData para "pasar el PSB"
(realmente, para pasar un nombre y la dirección relacionada.) Sin embargo, durante una
transferencia, el PSB planificado solo finaliza si tiene lugar un punto de compromiso:
- Si un PSB está planificado para el programa de transferencia pero no para el programa de
recepción, siempre tiene lugar un punto de compromiso para una sentencia transfer.
- Del mismo modo, si se planifica un PSB distinto para los programas de transferencia y
recepción, siempre tiene lugar un punto de compromiso para una sentencia transfer.
- Si el mismo PSB está planificado para los dos programas, el comportamiento de una sentencia
transfer varía:
- Si el formato de la sentencia transfer es transfer to transaction, tiene lugar un
punto de compromiso.
- Si el formato de la sentencia transfer es transfer to program, la opción del
descriptor de construcción synchOnPgmTransfer determina si tiene lugar un punto de
compromiso.
- Si no se planifica ningún PSB para un programa de transferencia, siempre tiene lugar un punto
de compromiso para una sentencia transfer de tipo transfer to transaction pero nunca
para una sentencia transfer de tipo transfer to program.
Los PCB de DB son válidos en el PSB de tiempo de ejecución.
- BMP IMS
- El parámetro PSB en el JCL de tiempo de ejecución identifica el PSB de tiempo de ejecución
utilizado a través del paso de trabajo. Aunque puede personalizar el JCL en tiempo de despliegue,
EGL genera el valor de parámetro PSB por omisión en el JCL de tiempo de ejecución asignando el
valor de la propiedad del registro PSB defaultPSBName.
Para BMP de
IMS, EGL necesita que
los primeros PCB de tiempo de ejecución sean de la forma siguiente:
- El PCB de E/S (asegúrese de que el programador del sistema
IMS establece CMPAT en
YES al desarrollar el trabajo PSBGEN)
- Un PCB alterno
- Un PCB alterno expreso
Los PCB de DB y GSAM también son válidos.
- IMS/VS
- Las reglas de la definición del sistema
IMS aseguran que el
nombre del programa principal es el nombre del PSB de tiempo de ejecución que está disponible a
través de la transacción.
Para IMS/VS, EGL necesita que los primeros PCB de tiempo de ejecución
sean de la forma siguiente:
- El PCB de E/S (asegúrese de que el programador del sistema
IMS establece CMPAT en
YES al desarrollar el trabajo PSBGEN)
- Un PCB alterno
- Un PCB alterno expreso
Los PCB de DB también son válidos.
Si el valor de la opción de descriptor de
construcción
workDBType es DLI (que es el valor por omisión), establezca uno de los PCB de
de DB de tiempo de ejecución para la base de datos de trabajo de EGL, identificada por el nombre
ELAWORK.
No es necesario incluir la información de jerarquía para la base de datos ELAWORK.
Nota: Es
recomendable especificar el último PCB de base de datos en el PSB de tiempo de ejecución como as
ELAWORK de forma que si decide cambiar a una base de datos de trabajo de SQL, puede eliminar
fácilemente ese PCB.
- z/OS por lotes
- El parámetro PSB en el JCL de tiempo de ejecución identifica el PSB de tiempo de ejecución
utilizado a través del paso de trabajo. Aunque puede personalizar el JCL en tiempo de despliegue,
EGL genera el valor del parámetro PSB por omisión asignando el valor de la propiedad de registro de
PSB defaultPSBName.
Para el proceso por lotes de
z/OS, , EGL necesita
que el primer PCB de tiempo de ejecución sea el PCB de E/S. Además, EGL necesita que haya dos PCB
adicionales de cualquier tipo en el PSB de tiempo de ejecución. Los PCB alternos, de DB y de GSAM
son válidos.
EGL hace ajustes para los dos o tres PCB de E/S y de teleproceso si están declarados en el
registro de PSB pero no están presentes en el PSB de tiempo de ejecución.
Estos ajustes permiten generar el mismo programa en entornos distintos.
En relación con
CICS, por ejemplo,
el tiempo de ejecución de EGL ignora los registros PCB de E/S inicial y alterno si están presentes
en el código.