PARM (Identify Parameters)

Código Tipo Datos Tipo Datos Campo de resultado Indicadores
PARM Campo de destino Campo de origen Parámetro      

La operación PARM declarativa define los parámetros que componen una lista de parámetros (PLIST). Las operaciones de PARM pueden aparecer en cualquier lugar de los cálculos siempre que sigan inmediatamente la operación PLIST, CALL o CALLB a la que hacen referencia. Las sentencias PARM deben estar en el orden esperado por el programa o procedimiento llamado. Se permite una sentencia PARM, o hasta 255 para una CALL o 399 para una CALLB o PLIST.

La operación PARM se puede especificar en cualquier lugar dentro de los cálculos, incluidos los cálculos totales. La entrada de nivel de control (posiciones 7 y 8) puede estar en blanco o puede contener un indicador L1 a L9 , un indicador LR o una entrada L0 para agrupar la sentencia en la sección adecuada del programa. Las entradas del indicador de condicionamiento (posiciones de la 9 a la 11) no están permitidas.

Las entradas de factor 1 y factor 2 son opcionales. Si se especifica, las entradas deben ser del mismo tipo que las especificadas en el campo de resultado. Si el campo de destino es de longitud variable, su longitud se establecerá en la longitud del valor del campo de origen. No se puede especificar un literal o constante con nombre en el factor 1. El factor 1 y el factor 2 deben estar en blanco si el campo de resultado contiene el nombre de una estructura de datos de varias apariciones o *OMIT.

Sugerencia:

Si la comprobación de tipo de parámetro es importante para la aplicación, debe definir un prototipo y una definición de interfaz de procedimiento para la interfaz de llamada, en lugar de utilizar las operaciones PLIST y PARM.

El campo de resultado debe contener el nombre de un:
  • Para todas las sentencias PARM:
    • Campo
    • Estructura de datos
    • Matriz
  • Para sentencias PARM PLIST no *ENTRY, también puede contener:
    • ARRAY, elemento
    • *OMIT (solo CALLB)
La entrada de Campo de Resultado de una operación PARM no puede contener:
  • *IN, *INxx, *IN(xx)
  • Un literal
  • Una constante con nombre
  • Un nombre de tabla
Además, lo siguiente no está permitido en la entrada de Campo de Resultado de una operación PARM en *ENTRY PLIST:
  • *OMIT
  • Una estructura de datos inicializada globalmente
  • Una estructura de datos con subcampos inicializados
  • Una estructura de datos con una matriz de tiempo de compilación como subcampo
  • Campos o estructuras de datos definidos con las palabras clave BASED, IMPORT o EXPORT
  • Un elemento de matriz
  • Un nombre de área de datos
  • Un nombre de estructura de datos de área de datos
  • Un subcampo de estructura de datos
  • Una matriz en tiempo de compilación
  • Un estado de programa (PSDS) o una estructura de datos de información de archivo (INFDS)

Un nombre de campo sólo puede especificarse una vez en un *ENTRY PLIST.

Si se especifica una matriz en el campo de resultado, el área definida para la matriz se pasa al programa o procedimiento llamado. Cuando se pasa una estructura de datos con varias apariciones al programa o procedimiento llamado, todas las apariciones de la estructura de datos se pasan como un único campo. Sin embargo, si se especifica un subcampo de una estructura de datos de varias apariciones en el campo de resultado, sólo se pasa la aparición actual del subcampo al programa o procedimiento llamado.

Cada campo de parámetro sólo tiene una ubicación de almacenamiento; está en el programa o procedimiento de llamada. La dirección de la ubicación de almacenamiento del campo de resultado se pasa al programa o procedimiento llamado en una operación PARM. Si el programa o procedimiento llamado cambia el valor de un parámetro, cambia los datos en esa ubicación de almacenamiento. Cuando el control vuelve al programa o procedimiento de llamada, el parámetro del programa o procedimiento de llamada (es decir, el campo de resultado) ha cambiado. Incluso si el programa o procedimiento llamado finaliza con error después de cambiar el valor de un parámetro, el valor cambiado existe en el programa o procedimiento de llamada. Para conservar la información pasada al programa o procedimiento llamado para su uso posterior, especifique en el factor 2 el nombre del campo que contiene la información que desea pasar al programa o procedimiento llamado. El Factor 2 se copia en el campo de resultado y la dirección de almacenamiento del campo de resultado se pasa al programa o procedimiento llamado.

Puesto que se accede a los campos de parámetro por dirección, no por nombre de campo, los parámetros de llamada y de llamada no tienen que utilizar los mismos nombres de campo para los campos que se pasan. Los atributos de los campos de parámetro correspondientes en los programas o procedimientos de llamada y de llamada deben ser los mismos. Si no lo son, pueden producirse resultados indeseables.

Cuando se ejecuta una operación CALL o CALLB, ocurre lo siguiente:
  1. En el procedimiento de llamada, el contenido del campo de factor 2 de una operación PARM se copia en el campo de resultado (campo receptor) de la misma operación PARM.
  2. En el caso de un CALLB cuando el campo de resultado es *OMIT, se pasará una dirección nula al procedimiento llamado.
  3. En el procedimiento llamado, después de recibir el control y después de cualquier inicialización de programa normal, el contenido del campo de resultado de una operación PARM se copia en el campo de factor 1 (campo receptor) de la misma operación PARM.
  4. En el procedimiento llamado, cuando se devuelve el control al procedimiento de llamada, el contenido del campo de factor 2 de una operación PARM se copia en el campo de resultado (campo receptor) de la misma operación PARM. Este movimiento no se produce si el procedimiento llamado finaliza de forma anómala. El resultado del movimiento es imprevisible si se produce un error en el movimiento.
  5. Al volver al procedimiento de llamada, el contenido del campo de resultado de una operación PARM en el procedimiento de llamada se copia en el campo de factor 1 (campo receptor) de la misma operación PARM. Este movimiento no se produce si el procedimiento llamado finaliza de forma anómala o si se produce un error en la operación de llamada.
Nota: Los datos se mueven de la misma forma que los datos se mueven utilizando el código de operación EVAL. Se aplica la compatibilidad de tipo estricta. Para obtener información sobre cómo llamar y pasar parámetros a un programa a través de CL, consulte el manual CL Programming .

Para obtener más información, consulte Operaciones de llamada o Operaciones declarativas.

La Figura 1 ilustra la operación PARM.