Código de salida

El código de salida puede escribirse en programas (módulos separados definidos en el CSD) o en rutinas dentro del programa de aplicación. El código de salida, si está activado, puede obtener el control cuando se produce una terminación anómala de tarea.

Los mandatos HANDLE ABEND pueden activar, desactivar o reactivar el código de salida. Para obtener información sobre los mandatos HANDLE ABEND , consulte Resumen de mandatos deCICS.

Sólo puede estar activa una salida de terminación anómala en un nivel lógico determinado dentro de una tarea. Esto significa que:
  1. Cuando un programa LINKs a otro programa, el programa LINKed-from y el programa LINKed-to pueden tener cada uno una salida activa.
  2. Cuando se activa una salida (en un nivel de programa determinado), cualquier otra salida que ya esté activa en el mismo nivel se desactiva automáticamente.

Las razones que un programador de aplicaciones puede tener para codificar una salida de terminación anómala de nivel de programa, y las funciones que se pueden incorporar, se describen en Manejo de terminaciones anómalas y salidas de terminación anómala de nivel de programa.

Cuando se emite una solicitud de terminación anómala para una tarea, CICS® pasa inmediatamente el control a la salida que está activa en el nivel lógico actual:
  • Si no hay ninguna salida activa en el nivel lógico actual, CICS comprueba progresivamente a través de niveles lógicos más altos y pasa el control al primer código de salida que se ha encontrado que está activo.
  • Si CICS no encuentra ninguna salida activa en, o superior, al nivel lógico actual, la tarea termina de forma anómala (consulte Terminación anómala de una tarea).

Cuando el control se transfiere a cualquier código de salida, CICS desactiva la salida antes de que se ejecute cualquiera de su código. (Esto significa que, en el caso de otra petición de terminación anómala, no se volverá a introducir la salida y se pasará el control al código de salida activado (si existe) en el siguiente nivel superior.)

A continuación, el código de salida se ejecuta como una extensión de la tarea de terminación anómala y se ejecuta al mismo nivel que el programa que ha emitido el mandato HANDLE ABEND que ha activado la salida.

Después de que se haya ejecutado cualquier código de salida de terminación anómala a nivel de programa, la siguiente acción depende de cómo finalice el código de salida:
  • Si el código de salida finaliza con un mandato ABEND, CICS da el control al siguiente código de salida de nivel superior que está activo. Si no hay ningún código de salida activo en niveles lógicos superiores, CICS termina la tarea de forma anómala. El siguiente tema describe lo que puede suceder después de la terminación anómala de una tarea.
  • Si el código de salida finaliza con un mandato RETURN, CICS devuelve el control al siguiente nivel lógico superior en el punto que sigue al mandato LINK (no a ningún código de salida que pueda estar activo) igual que si el programa de aplicación de nivel inferior hubiera emitido RETURN. Esto deja la tarea en un estado de proceso normal y no termina en este punto.
    En el caso especial de un mandato RETURN emitido por el código de salida en el nivel lógico más alto, CICS recupera el control y termina la tarea normalmente. Esto significa que:
    1. La restitución de transacción dinámica no se realiza.
    2. Se graba un registro de punto de sincronización de fin de tarea en el registro del sistema.
Nota: Si una transacción actualiza recursos recuperables y, por lo tanto, requiere que se realice una restitución de transacción en el caso de una terminación anómala de tarea, el código de salida debe finalizar con un mandato ABEND para conservar la integridad de los datos. Si el código de salida vuelve a CICS sin un mandato ABEND, CICS otorga el control al siguiente nivel lógico superior tal como se ha descrito anteriormente, no se realiza la restitución de la transacción y se confirman los cambios en los recursos recuperables.