transfer

La sentencia EGL transfer transfiere el control de un programa principal a otro, finaliza el programa que realiza la transferencia y, opcionalmente, pasa un registro cuyos datos se aceptan al registro de entrada del programa receptor. No puede utilizarse una sentencia transfer en un programa llamado.

El programa puede transferir el control mediante una sentencia del tipo transferir a transacción o mediante una sentencia del tipo transferir a programa:
  • Una sentencia del tipo transferir a transacción actúa de la manera siguiente:
    • En un programa principal que se ejecuta en IMS/VS o en CICS para z/OS, esta sentencia compromete los recursos recuperables, cierra los archivos, cierra los cursores e inicia una nueva transacción.
    • En un programa que se ejecuta como programa por lotes principal de z/OS, como un BMP IMS o como un programa principal por lotes o de texto Java, la sentencia inicia un programa en la misma unidad de ejecución, pero el comportamiento previo a la transferencia depende del valor de la opción de descriptor de construcción synchOnTrxTransfer:
      • Si el valor de synchOnTrxTransfer es NO (el valor por omisión), la sentencia de transferencia no cierra ni compromete recursos disponibles para el programa invocado.
      • Si el valor de synchOnTrxTransfer es YES, la sentencia de transferencia compromete recursos recuperables, cierra archivos y cierra cursores.
    • En un programa de tipo VGWebTransaction, una transferencia a una transacción no es válida; en su lugar, utilice una de las sentencias siguientes:
      • Una sentencia transfer del tipo transferir a un programa (para transferir a otro programa VGWebTransaction o a un programa por lotes principal), o bien
      • Una sentencia forward (para reenviar el control a un URL).
    • En un PageHandler, no puede realizarse una transferencia a una transacción; en lugar de ello, utilice la sentencia forward.
  • Una transferencia a programa inicia un programa en la misma unidad de ejecución. Con excepciones que se describen más adelante y que están relacionadas con el proceso de DL/I, una transferencia a un programa no origina un punto de sincronización: no cierra archivos ni cursores ni compromete ni retrotrae recursos recuperables.
    Una transferencia a un programa está disponible en programas de tipo VGWebTransaction (en cualquier sistema) y en cualquier programa COBOL principal:
    • En CICS para z/OS, la transferencia no origina un punto de sincronización a menos que se planifique un PSB cuando tiene lugar la transferencia y cuando se da una de las situaciones siguiente:
      • El programa receptor empieza planificando un PSB distinto o ningún PSB, o bien
      • El programa receptor empieza planificando el mismo PSB, pero la opción de descriptor de construcción synchOnPgmTransfer está establecida en YES, que es el valor por omisión.

      EGL implementa la sentencia con el mandato XCTL CICS y utiliza la opción COMMAREA de ese mandato para pasar el registro, después del cuál los datos del registro empiezan en el primer byte del área común de CICS.

    • Para los programas z/OS por lotes y BMP IMS, es válida una transferencia a un programa. Si el programa receptor no se ha generado con EGL ni con VisualAge Generator, EGL utiliza la macro XCTL de OS para implementar la transferencia. En cualquier caso, no es válido transferir entre un programa por lotes de z/OS y un programa BMP IMS.
    • Para los programas IMS/VS, una transferencia a un programa solo está soportada si el programa receptor se ha generado mediante EGL o VisualAge Generator.

      Si el programa inicial de una transacción es un programa por lotes principal, la transferencia a un programa de transacción principal no está soportada. Si el programa inicial es una transacción principal, la transferencia no es válida para un programa por lotes que accede al PCB de E/S.

El componente de opciones de enlace, elemento transferLink no tiene ningún efecto cuando se transfiere el control desde código Java a código Java; de lo contrario, es significativo.

Si transfiere código de control a un código que no se ha escrito con EGL o VisualAge Generator, es aconsejable establecer el elemento transferLink del componente de opciones de enlace del siguiente modo:
  • Si transfiere a una transacción, establezca la propiedad externallyDefined en yes
  • Si transfiere a un programa, establezca la propiedad linkType en externallyDefined

Si la ejecución se realiza en modalidad de compatibilidad con VisualAge Generator, puede especificar la opción externallyDefined en la sentencia transfer, como ocurre en los programas migrados desde VisualAge Generator; sin embargo, no es aconsejable establecer el valor equivalente en el componente de opciones de enlace. Para obtener detalles acerca de la modalidad de compatibilidad de VisualAge Generator, consulte el apartado Compatibilidad con VisualAge Generator.


Diagrama de sintaxis para la sentencia transfer
program nombreDestino (valor por omisión)
El programa que recibe el control. Si está generando para COBOL y especifica un nombre de programa con más de 8 caracteres, el nombre de programa se trunca al llegar a los 8 caracteres con caracteres de sustitución (si es necesario), como se describe en el apartado Alias de nombres.
transaction nombreDestino
La transacción o el programa que recibe el control, como se ha descrito anteriormente.
sysVar.transferName
Función de sistema que contiene un nombre destino que puede establecerse durante la ejecución. Para obtener detalles, consulte la función sysVar.transferName.
passing nombreRegistro
Un registro que se recibe como registro de entrada en el programa destino. El registro pasado puede ser de cualquier tipo, pero la longitud y los tipos primitivos deben ser compatibles con el registro que recibe los datos. El registro de entrada en el programa destino debe ser de tipo basicRecord.
externallyDefined
No recomendado para nuevos desarrollos, como se ha descrito anteriormente.

Consulta relacionada
transferName

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.