call

La sentencia EGL call transfiere el control a otro programa y, opcionalmente, pasa una serie de valores. El control vuelve al llamador cuando el programa llamado finaliza; si el programa llamado cambia los datos que se han pasado por medio de una variable, cambia también el área de almacenamiento disponible para el llamador.


Diagrama de sintaxis para la sentencia call
nombre de programa
Nombre del programa llamado. El programa es generado por EGL o se considera definido externamente.

El nombre especificado no puede ser una palabra reservada. Si el llamador debe llamar a un programa no EGL que tiene el mismo nombre que una palabra reservada EGL, utilice un nombre de programa diferente en la sentencia call y, a continuación, utilice un componente de opciones de enlace, elemento callLink, para especificar un alias, que es el nombre utilizado durante la ejecución.

Si el programa llamado es un programa Java, el nombre del programa llamado será sensible a las mayúsculas y minúsculas; calledProgram es distinto a CALLEDPROGRAM. En caso contrario, la determinación de si el nombre de programa es sensible a las mayúsculas y minúsculas depende del sistema en el que resida el programa llamado: sensible a las mayúsculas y minúsculas para UNIX, no sensible a las mayúsculas y minúsculas en otros casos.

En el depurador EGL, el nombre del programa llamado no es sensible a las mayúsculas y minúsculas.

argumento
Una de una serie de referencias de valor, cada una de ellas separada del texto por una coma. Un argumento puede ser un elemento, un registro, un literal no numérico, una constante no numérica o (si EGL tiene acceso al programa llamado durante la generación) una expresión de fecha y hora, numérica o de texto más compleja. No puede pasar un campo de tipo ANY.
externallyDefined
Indicador de que el programa está definido externamente. Este indicador sólo está disponible si establece la propiedad de proyecto para la compatibilidad con VisualAge Generator.

Es aconsejable que un programa no generado por EGL se identifique como definido externamente no en la sentencia call, sino en el componente de opciones de enlace utilizado durante la generación. (La propiedad relacionada se encuentra en el componente de opciones de enlace, elemento callLink, y también se denomina externallyDefined).

noRefresh
Indicador de que debe evitarse una renovación de pantalla cuando el programa llamado devuelve el control.

El indicador está soportado (durante el desarrollo) si la propiedad de programa VAGCompatibility está seleccionada o (durante la generación) si la opción del descriptor de construcción VAGCompatibility está establecida en yes.

Este indicador es adecuado si el llamador está en una unidad de ejecución que presenta formularios de texto en una pantalla y se produce alguna de estas situaciones:
  • El programa llamado no presenta un formulario de texto; o
  • El llamador escribe un formulario de texto de pantalla completa después de la llamada.

Es aconsejable indicar la preferencia de la renovación de pantalla no en la sentencia call, sino en el componente de opciones de enlace utilizado durante la generación. (La propiedad relacionada se encuentra en el componente de opciones de enlace, elemento callLink, y se denomina refreshScreen).

A continuación se ofrece un ejemplo:

  if (userRequest == "C")
    try
      call programA;
    onException
      myErrorHandler(12);
    end
  end

El número, tipo y orden de los argumentos de una sentencia call debe corresponder al número, tipo y orden de los valores esperados por el programa llamado.

Es muy aconsejable que el número de bytes pasados en cada argumento sea el mismo que el número de bytes esperado. Si el programa llamado está en CICS y las longitudes no son iguales, se produce una finalización anormal del entorno de ejecución. En el caso de un programa Java generado por EGL, una Una discrepancia de longitudes sólo provoca un error si la corrección de la discrepancia en tiempo de ejecución provoca una discrepancia de tipos.

En el caso de Java, se produce un Un error si se añaden blancos a un elemento de datos de tipo NUM, por ejemplo, pero no si se añaden blancos a un elemento de datos de tipo CHAR.

Los literales y las constantes están sujetos a las siguientes normas:

Las llamadas recursivas están soportadas en todos los sistemas destino.

El comportamiento de la llamada depende parcialmente del sistema destino, como se muestra en la tabla siguiente.

Sistema destino Detalles específicos de plataforma
AIX Las llamadas recursivas están soportadas.
CICS para z/OS

Las llamadas recursivas no están soportadas.

El código de retorno que el programa llamado coloca en el registro 15 no está disponible para el llamador.

iSeries Las llamadas recursivas están soportadas.
Linux Las llamadas recursivas están soportadas.
z/OS por lotes

Las llamadas recursivas no están soportadas.

Windows 2000, Windows NT Las llamadas recursivas están soportadas.
z/OS UNIX System Services Las llamadas recursivas están soportadas.
Sistema destino Detalles específicos de plataforma
AIX Las llamadas recursivas están soportadas.
iSeries COBOL Las llamadas recursivas no están soportadas.
iSeries Java Las llamadas recursivas están soportadas.
Linux Las llamadas recursivas están soportadas.
z/OS por lotes Las llamadas recursivas no están soportadas.
Windows 2000, Windows NT Las llamadas recursivas están soportadas.
z/OS UNIX System Services Las llamadas recursivas están soportadas.

La llamada resulta afectada por el componente de opciones de enlace, si existe, utilizado durante la generación. (Puede incluir un componente de opciones de enlace estableciendo la opción linkage del descriptor de construcción).

Para obtener detalles acerca de la opción linkage, consulte el apartado Componente de opciones de enlace.

Conceptos relacionados
Componente de opciones de enlace
Diagrama de sintaxis

Consulta relacionada
Sentencias EGL
Manejo de excepciones
linkage
Tipos primitivos

Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.