Propiedades que dan soporte a registros de longitud variable

Al declarar un componente de registro, puede incluir propiedades que den soporte a la utilización de registros de longitud variable. Puede utilizar registros serie de longitud variable para acceder a archivos secuenciales, registros serie o indexados de longitud variable para acceder a archivos VSAM y registros MQ de longitud variable para acceder a colas de mensajes de MQSeries.

Registros de longitud variable con la propiedad lengthItem

La propiedad lengthItem, si está presente, identifica un elemento que se utiliza cuando:
  • El código lee un registro de un archivo o cola. El elemento de longitud recibe el número de bytes leídos en el registro de longitud variable.
  • El código graba un registro. El elemento de longitud especifica el número de bytes que deben añadirse al archivo o cola.
El elemento de longitud puede ser cualquiera de los siguientes:
  • Un elemento de estructura del mismo registro
  • Un elemento de estructura de un registro que es global al programa o que es local a la función que accede al registro (el elemento de longitud puede estar calificado con una variable de registro declarada en el programa o función)
  • Un elemento de datos que sea global con respecto al programa o local con respecto a la función que accede al registro
El elemento de longitud tiene estas características:
  • Tiene un tipo primitivo BIN, DECIMAL, INT, NUM o SMALLINT
  • No tiene posiciones decimales
  • Permite 9 dígitos como máximo
A continuación se ofrece un ejemplo de componente de registro de longitud variable con la propiedad lengthItem:
  Record SerialRecordPart1 type serialRecord
    {
      fileName = "myFile",
      lengthItem = "myOtherField"
    }
    10 myField01 BIN(4);   // 2 bytes de longitud
    10 myField02 NUM(3);   // 3 bytes de longitud
    10 myField03 CHAR(20); // 20 bytes de longitud
  end
Al grabar un registro, el valor del elemento de longitud debe estar dentro de los límites, a menos que el elemento sea un elemento de carácter. Por ejemplo, un registro de tipo SerialRecordPart1 puede tener el elemento de longitud, myOtherField, establecido en 2, 5, 6, 7, ... , 24 , 25. Un registro con myOtherField establecido en 2 sólo contiene un valor para myField01; un registro con myOtherField establecido en 5 contiene valores para myField01 y myField02; un registro con myOtherField establecido de 6 a 24 también contiene parte de myField03.

Registros de longitud variable con la propiedad numElementsItem

La propiedad NumElementsItem, si está presente, identifica un elemento que se utiliza cuando el código se añade al archivo o cola o los actualiza. El registro de longitud variable debe tener una matriz como último elemento de estructura de nivel superior. El valor del elemento de número de elementos representa el número real de elementos de matriz que se han escrito. El valor puede ir de 0 al máximo, que es el valor de apariciones especificado en la declaración del último elemento de estructura de nivel superior del registro.

El número de bytes escritos es igual a la suma de lo siguiente:
  • El número de bytes del componente de longitud fija del registro.
  • El valor del elemento de número de elementos multiplicado por el número de bytes de cada elemento de la matriz final.
El elemento de número de elementos tiene estas características:
  • Tiene un tipo primitivo BIN, DECIMAL, INT, NUM o SMALLINT
  • No tiene posiciones decimales
  • Permite 9 dígitos como máximo
A continuación se ofrece un ejemplo de componente de registro de longitud variable con la propiedad numElementsItem:
  Record SerialRecordPart2 type serialRecord
    {
      fileName = "myFile",
      numElementsItem = "myField02"
    }
    10 myField01 BIN(4);   // 2 bytes de longitud
    10 myField02 NUM(3);   // 3 bytes de longitud
    10 myField03 CHAR(20)[3]; // 60 bytes de longitud
       20 mySubField01 CHAR(10);
       20 mySubField02 CHAR(10);
  end
Escribir un registro del tipo SerialRecordPart2 con el elemento de número de elementos myField02 establecido en 2 da como resultado un registro de longitud variable, grabándose en el archivo o cola myField01, myField02 y dos apariciones de myField03.

El elemento de número de elementos debe ser un elemento en la parte de longitud fija del registro de longitud variable. Utilice una referencia no calificada para nombrar el elemento de número de elementos. Por ejemplo, utilice myField02 en lugar de myRecord.myField02.

El elemento de número de elementos no tiene ningún efecto cuando se lee un registro del archivo.

Registros de longitud variable con las propiedades lengthItem y numElementsItem

Si se especifican las propiedades lengthItem y numElementsItem para un registro de longitud variable, la longitud del registro se calcula utilizando el elemento de número de elementos. La longitud calculada se mueve al elemento de longitud de registro antes de que se escriba el registro en el archivo.

Registros de longitud variable pasados en una llamada o transferencia

Si en una llamada se pasan registros de longitud variable, se aplican las siguientes normas:
  • Se reserva espacio para la longitud máxima especificada para un registro
  • Si el valor de la propiedad type del elemento callLink es remoteCall o ejbCall, el elemento de longitud (si existe) debe estar dentro del registro; para obtener detalles, consulte el apartado Elemento callLink.

De forma parecida, si se pasan registros de longitud variable en una transferencia, se reserva espacio para la longitud máxima especificada para el registro.

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