Configuración del transcodificador

Puedes configurar el transcodificador de Mainframe Connector añadiendo la configuración necesaria en un archivo JSON. Este archivo se denomina archivo de configuración del transcodificador. Debe definir la configuración tal como se especifica en la sección Configuración. Los comandos qsam encode y qsam decode usan el archivo de configuración del transcodificador para transcodificar los datos.

En esta página se describen las distintas formas de configurar el transcodificador de Mainframe Connector.

Configuración

El objeto Configuration es la raíz de la configuración del transcodificador. Contiene todas las opciones de configuración de la herramienta de transcodificación.

Representación JSON
{
    "defaults": object (DefaultsSection),
    "field_suffixes": object (FieldSuffix),
    "field_overrides": object (FieldOverride),
    "transformations": object (Transformation),
    "schema_validation_mode": enum (SchemaValidationMode)
}
Campos
defaults

object (DefaultsSection)

Especifica los modificadores de campo predeterminados para los arquetipos de Cobol.

field_suffixes

object (FieldSuffix)

Especifica los sufijos de los campos.

field_overrides

object (FieldOverride)

Especifica las invalidaciones de campos.

transformations

object (Transformation)

Especifica las transformaciones de campos.

schema_validation_mode

enum (SchemaValidationMode)

Especifica el modo de validación del esquema.

DefaultsSection

El objeto DefaultsSection se puede usar para especificar modificaciones predeterminadas por tipos de COBOL. Se aplican antes de cualquier modificación de sufijo o de anulación.

Representación JSON
{
    "alpha_numeric_display": object (FieldModifier),
    "numeric_display": object (FieldModifier),
    "binary": object (FieldModifier),
    "packed_decimal": object (FieldModifier),
    "national": object (FieldModifier),
    "utf8": object (FieldModifier),
    "dbcs": object (FieldModifier),
    "hexadecimal_floating_point": object (FieldModifier)
}
Campos
alpha_numeric_display

object (FieldModifier)

Especifica los valores predeterminados de los campos alfanuméricos (PIC X).

numeric_display

object (FieldModifier)

Especifica los valores predeterminados de los campos de visualización numérica (decimal zonificado).

binary

object (FieldModifier)

Especifica los valores predeterminados de los campos de número binario (COMP).

packed_decimal

object (FieldModifier)

Especifica los valores predeterminados de los campos decimales empaquetados (COMP-3).

national

object (FieldModifier)

Especifica los valores predeterminados de los campos nacionales (PIC N).

utf8

object (FieldModifier)

Especifica los valores predeterminados de los campos UTF-8 (PIC U).

dbcs

object (FieldModifier)

Valor predeterminado para los campos dbcs (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

Valor predeterminado para los campos de coma flotante hexadecimal (COMP-1 y COMP-2).

FieldSuffix

Los sufijos de campo se aplican a todos los campos que tienen un sufijo.

Los campos coinciden si terminan con un guion (-) o un guion bajo (_) seguido del sufijo.

Los sufijos no distinguen entre mayúsculas y minúsculas.

El modificador FieldSuffix se aplica después del modificador FieldOverride.

Por ejemplo, el modificador definido para el sufijo NID se aplicará al campo llamado FLD-NID, pero no al campo FUNID.

Representación JSON
{
    "suffix": string,
    "is_inverse": boolean,
    "modifier": object (FieldModifier)
}
Campos
suffix

string

El campo con este sufijo tendrá aplicado el modificador.

is_inverse

boolean

Especifica si el modificador es un modificador de campo inverso o no. Un modificador de campo inverso aplica el modificador a otro campo que tiene el mismo nombre que el campo con el modificador sin el modificador. Por ejemplo, si los campos FLD-NID y FLD están en el mismo registro, el modificador se aplicará a FLD.

Cuando se usa un modificador de campo inverso, el identificador especial $self se puede usar siempre que se pueda usar un nombre de campo para hacer referencia al campo con el sufijo.

Por ejemplo, para crear un campo de indicador nulo, puedes usar el modificador de campo null_if con is_inverse definido como true. Consulta NullIf para obtener más información.

modifier

object (FieldModifier)

Especifica el modificador que se aplicará a los campos coincidentes.

FieldOverride

Anula o modifica la cadena de decodificación y codificación del campo especificado.

Representación JSON
{
    "field": string,
    "modifier": object (FieldModifier)
}
Campos
field

string

Especifica el nombre del campo al que se va a aplicar el modificador.

modifier

object (FieldModifier)

Especifica el modificador que se aplicará al campo coincidente.

Transformación

Las transformaciones de vistas se usan para modificar la relación entre la tabla y el archivo QSAM. Las transformaciones siempre se expresan desde el punto de vista de los datos. El concepto es similar al de las tablas de vista de BigQuery.

Representación JSON
{
    "exclude": object (Exclude),
    "unnest": object (Unnest),
    "move": object (Move),
    "rename": object (Rename)
}
Campos
exclude

object (Exclude)

unnest

object (Unnest)

move

object (Move)

rename

object (Rename)

FieldModifier

Un modificador de campo te permite modificar la codificación o decodificación de un campo específico. Ten en cuenta que no todos los modificadores se pueden aplicar a todos los campos. Consulta la documentación de los modificadores específicos para obtener más información.

Representación JSON
{
    "filler": object (Filler),
    "null_if": object (NullIf),
    "format_date": object (FormatDate),
    "chain": object (ModifierChain),
    "zoned_decimal": object (ZonedDecimal),
    "binary": object (Binary),
    "packed_decimal": object (PackedDecimal),
    "null_if_invalid": object (NullIfInvalid),
    "bytes": object (Bytes),
    "varlen": object (VarLen),
    "string": object (String),
    "null_if_empty": object (NullIfEmpty),
    "format_timestamp": object (FormatTimestamp),
    "hfp": object (HFP),
    "decode_as_null": object (DecodeAsNull),
    "encode_null_as": object (EncodeNullAs)
}
Campos
filler

object (Filler)

Excluye el campo del procesamiento y la salida.

null_if

object (NullIf)

Define el campo como nulo de forma condicional en función del valor de otro campo.

format_date

object (FormatDate)

Da formato a un campo de cadena como fecha.

chain

object (ModifierChain)

Encadena varios modificadores para que se apliquen secuencialmente.

zoned_decimal

object (ZonedDecimal)

Anula la configuración predeterminada de los campos decimales zonificados.

binary

object (Binary)

Anula la configuración predeterminada de los campos numéricos binarios.

packed_decimal

object (PackedDecimal)

Anula la configuración predeterminada de los campos decimales empaquetados.

null_if_invalid

object (NullIfInvalid)

Asigna el valor null al campo si se produce un error de transcodificación, lo que evita que se desborde el registro.

bytes

object (Bytes)

Trata el campo como una secuencia de bytes sin formato, ignorando la información de tipo anterior.

varlen

object (VarLen)

Define el registro como un campo de longitud variable.

string

object (String)

Anula la configuración predeterminada de los campos de cadena.

null_if_empty

object (NullIfEmpty)

Asigna el valor nulo al campo si se considera que su contenido está vacío.

format_timestamp

object (FormatTimestamp)

Da formato a un campo de cadena como una marca de tiempo.

hfp

object (HFP)

Interpreta el campo como un número de punto flotante hexadecimal (HFP).

decode_as_null

object (DecodeAsNull)

Define cómo se deben decodificar los valores nulos.

encode_null_as

object (EncodeNullAs)

Define cómo se deben codificar los valores nulos.

Excluir

Excluir un campo de la tabla resultante, pero seguir decodificándolo o codificándolo. Esto resulta útil cuando no es necesario transferir el campo a la tabla, pero sí para la transcodificación. Por ejemplo, se pueden omitir de la tabla los indicadores nulos o los campos de longitud.

Para omitir la transcodificación por completo, aplica el modificador de relleno.

Representación JSON
{
    "field": string
}
Campos
field

string

Especifica el campo que quieres excluir.

Desanidar

Desanida el campo.

Representación JSON
{
    "field": string,
    "format": string
}
Campos
field

string

Especifica el campo que quieres desanidar

format

string

Especifica el nuevo formato de campo.

El ${parent} se publicará con el nombre del campo que se va a anidar.

En el caso de las estructuras no anidadas, ${field} se sustituye por el nombre del campo de la estructura.

En las matrices y listas no anidadas, ${index} se sustituye por los índices de la matriz.

Mover

Mover un campo en el registro.

Representación JSON
{
    "field": string,
    "offset": int
}
Campos
field

string

Especifica el campo que quieres mover.

offset

int

Especifica el número de posiciones, hacia delante o hacia atrás, a las que se debe mover el campo.

Cambiar nombre

Cambiar el nombre de uno o varios campos en función de una coincidencia de expresiones regulares.

Por ejemplo, para sustituir todos los guiones por guiones bajos, usa el siguiente formato JSON: {"find": "\\-", "replace":"_"}.

Representación JSON
{
    "find": string,
    "replace": string
}
Campos
find

string

Especifica un patrón de expresión regular de Java para identificar los campos cuyo nombre se va a cambiar.

El patrón se compara con el nombre de campo completo. Si el patrón coincide con alguna parte del nombre del campo, se considera que el campo coincide.

Ejemplos:

  • "\\-" (coincide con cualquier campo que contenga un guion)
  • "^field_name$" (coincide con los campos que tienen el nombre exacto field_name)
  • "^field_(.*)$" (coincide con cualquier campo que empiece por field_ y captura el resto)
  • "part_of_name" (coincide con cualquier campo que contenga part_of_name)

replace

string

Especifica el nuevo nombre de los campos coincidentes.

Los grupos de captura de la expresión regular find se pueden usar en la cadena replace mediante referencias inversas como $1 y $2. De esta forma, se pueden hacer transformaciones más complejas basadas en partes del nombre del campo original.

Ejemplos:

  • "new_field_name" (sustituye el campo por un nombre fijo)
  • "new_$1" (usa el primer grupo de captura de find)
  • "${1}_new" (sintaxis alternativa para grupos de captura)
  • "prefix_$1_suffix" (usa un grupo de captura y añade prefijos o sufijos)

Aditivo

Especifica que un campo se ignorará durante el procesamiento. El campo no se decodificará de la entrada ni se codificará en la salida, y se excluirá del esquema y de la tabla de datos resultantes durante la decodificación. Puede aplicar este modificador a cualquier campo que tenga un tamaño estático conocido.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

NullIf

Asigna el valor null a un campo si se cumple una condición. Debes especificar null_value o non_null_value, o ambos.

Para crear un campo de indicador de nulo, puedes usar un FieldSuffix con un modificador de campo null_if y asignar el valor true a is_inverse, como se muestra en los siguientes ejemplos:

Ejemplo: indicador de valor nulo

Para crear un campo de indicador nulo, podemos usar el modificador de campo null_if de la siguiente manera.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "?",
       "target_field": "$self"
     }
    }
   }
  ]
 }

De esta forma, todos los campos con el sufijo NID se convierten en indicadores nulos, como se muestra en el siguiente fragmento de copybook:

 01 REC.
   02 FIELD     PIC X(10).
   02 FIELD-NID PIC X(1).

Ejemplo: indicador nulo binario

Para crear un campo binary indicador de nulo, podemos usar los modificadores de campo binary y null_if de la siguiente manera.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "binary": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "15",
       "target_field": "$self"
     }
    }
   }
  ]
 }

De esta forma, todos los campos con el sufijo NID se convierten en binary indicadores nulos mediante el mismo copybook del ejemplo anterior.

Ejemplo: bytes de indicador nulo

Para crear un campo bytes indicador de nulo, podemos usar los modificadores de campo bytes y null_if de la siguiente manera. Los valores de nulo y no nulo se expresan como HEX.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "bytes": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "FF",
       "target_field": "$self"
     }
    }
   }
  ]
 }

De esta forma, todos los campos con el sufijo NID serán un indicador nulo bytes mediante el mismo copybook del ejemplo anterior.

Representación JSON
{
    "target_field": string,
    "null_value": string,
    "null_values": string,
    "non_null_value": string,
    "non_null_values": string
}
Campos
target_field

string

Especifica el campo cuyo valor quieras comprobar. El campo debe estar en el ámbito.

null_value

string

Cuando se especifica, si target_field es igual a este valor, el campo no se decodifica ni se codifica, y el valor se establece como nulo.

null_values

string

Si se especifica y target_field es igual a alguno de estos valores, el campo no se decodifica ni se codifica y el valor se define como nulo.

non_null_value

string

Cuando se especifica, si target_field no es igual a este valor, el campo no se decodifica ni se codifica, y el valor se establece como nulo.

non_null_values

string

Si se especifica y target_field no es igual a ninguno de estos valores, el campo no se decodifica ni se codifica y el valor se define como null.

FormatDate

Da formato a una cadena como fecha con uno de los formatos admitidos. Solo puedes aplicar este modificador a los campos de tamaño. Durante el proceso de decodificación, los formatos se prueban en orden hasta que uno de ellos coincide con la cadena. Durante el proceso de codificación, se usa el primer formato y se ignoran los demás.

Representación JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Lista de formatos de fecha.

ModifierChain

Especifica una cadena de modificadores para aplicar varios modificadores en serie. Los modificadores se aplican en el orden en el que se especifican.

Representación JSON
{
    "modifiers": object (FieldModifier)
}
Campos
modifiers

object (FieldModifier)

Especifica la lista de modificadores que se van a aplicar.

ZonedDecimal

Define varias opciones relacionadas con la codificación y la decodificación de decimales zonificados. Solo puede aplicar este modificador a un campo decimal.

Representación JSON
{
    "logical_type": enum (DecimalLogicalType),
    "encoding": enum (ZonedDecimalEncoding)
}
Campos
logical_type

enum (DecimalLogicalType)

Especifica el tipo lógico que se va a usar al decodificar o codificar el campo.

encoding

enum (ZonedDecimalEncoding)

Codificación con la que se codifica el campo.

Binario

Ignora los modificadores anteriores y trata este campo como un número binario.

Representación JSON
{
    "signedness": enum (BinarySignedness)
}
Campos
signedness

enum (BinarySignedness)

El signo del número.

PackedDecimal

Asigna a este campo el valor PackedDecimal.

Representación JSON
{
    "logical_type": enum (DecimalLogicalType)
}
Campos
logical_type

enum (DecimalLogicalType)

Anula el tipo lógico. De forma predeterminada, Mainframe Connector usa el tipo lógico óptimo en función de la precisión y la escala.

NullIfInvalid

Trata el valor como nulo si falla la transcodificación. Solo puedes aplicar este modificador a los campos de tamaño. El error se ignora y no se registra en el conjunto de datos de desbordamiento. Durante el proceso de decodificación, el valor de este campo será nulo para este registro. Durante el proceso de codificación, si no se pueden escribir los datos, todo el campo se rellenará con bytes nulos.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

Bytes

Trata el campo como una secuencia de bytes sin formato. Este modificador anula cualquier información de tipo anterior, lo que provoca que los datos de bytes sin formato del campo se conserven tal cual, sin una codificación de caracteres ni una interpretación numérica específicas. Puede aplicar este modificador a cualquier campo, independientemente de su tipo o tamaño original.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

VarLen

Representa un campo de longitud variable.

Un campo de longitud variable contiene tres partes:

  1. Un elemento de grupo que contiene dos subcampos.
  2. Campo del elemento de grupo que contiene la longitud de los datos de la transacción.
  3. Campo del elemento de grupo que contiene los datos.

El nombre del campo de longitud variable será el nombre del grupo.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

Cadena

Define las distintas opciones relacionadas con la decodificación y la codificación de cadenas. Solo se puede aplicar a un campo de cadena.

Representación JSON
{
    "encoding": string,
    "trim_suffix": boolean,
    "pad_char": string
}
Campos
encoding

string

Codificación con la que se codifica el campo.

trim_suffix

boolean

Si se define como true, se eliminarán los espacios en blanco al final de la cadena. trim_suffix solo afecta a la decodificación, mientras que la codificación ignora trim_suffix. Ten en cuenta que las cadenas que solo contengan espacios en blanco se convertirán en cadenas vacías.

pad_char

string

Cuando se definen cadenas de exportación de relleno con pad_char. Si se define, la longitud de pad_char debe ser 1. pad_char solo afecta a la codificación, mientras que la decodificación ignora pad_char.

NullIfEmpty

El campo debe tener el valor null si todos los bytes de ese campo son 0.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

FormatTimestamp

Formatea una cadena en una marca de tiempo con uno de los formatos proporcionados. Solo se puede aplicar a campos de tamaño. Durante la decodificación, los formatos se prueban en orden hasta que uno de ellos coincide con la cadena. Durante la codificación, se usará el primer formato y se ignorará el resto.

Representación JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Lista de formatos de marca de tiempo.

HFP

Define este campo como punto flotante hexadecimal.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

DecodeAsNull

Define cómo se interpretan los valores nulos durante el proceso de decodificación. Como COBOL no admite valores nulos de forma nativa, este parámetro especifica qué valores deben tratarse como nulos.

Representación JSON
{
    "values": string,
    "hex_bytes": string
}
Campos
values

string

Lista de representaciones de cadena. Después de la decodificación inicial del campo a su forma de cadena, si el contenido del campo coincide con alguno de estos valores, se tratará como nulo.

hex_bytes

string

Lista de representaciones hexadecimales de un solo byte. Si un campo contiene repeticiones de alguno de estos bytes, se trata como nulo. Por ejemplo, puedes usar FF para todos los máximos y 00 para todos los mínimos (vacío).

EncodeNullAs

Define cómo se representan los valores nulos durante el proceso de codificación.

Representación JSON
{
    "value": string,
    "hex_byte": string
}
Campos
value

string

Codifica este valor específico cuando el valor de origen sea nulo. Comprueba que la cadena sea válida para el tipo de campo.

hex_byte

string

Codifica esta secuencia de bytes específica (representada como una cadena hexadecimal) cuando el valor de origen sea nulo. Por ejemplo, FF para un campo de dos bytes con valores altos. Puede aplicar este método a cualquier campo con un tamaño conocido. Los bytes se repiten para que coincidan con el tamaño del campo subyacente.

DateTimeFormat

Tamaño y patrón que se usarán al convertir el campo en una fecha.

Representación JSON
{
    "size": int,
    "pattern": string
}
Campos
size

int

Especifica el tamaño del campo al que se aplica este patrón.

pattern

string

Especifica el patrón del formateador de fechas. Para obtener más información sobre los patrones de formato válidos, consulta Clase DateTimeFormatter.

BinarySignedness

Tipo lógico que se va a usar en un campo decimal.

Enumeraciones
UNSPECIFIED Usa el tipo más óptimo en función de la escala y la precisión.
SIGNED Usa 64 bits para almacenar el valor. Este modificador solo funciona con números cuya precisión sea inferior o igual a 18 y cuya escala sea 0.
UNSIGNED Usa 64 bits para almacenar el valor. Este modificador solo funciona con números cuya precisión sea inferior o igual a 18.

SchemaValidationMode

Especifica el modo de validación de esquemas que se usará durante la compilación del copybook. Este modo verifica la compatibilidad con un formato de datos de destino específico.

Enumeraciones
DEFAULT Modo de validación de esquema predeterminado. Este modo verifica que los nombres de los campos únicos estén en el copybook.
BIG_QUERY Modo de validación de esquemas para la compatibilidad con BigQuery. Este modo amplía la validación predeterminada para verificar que el esquema del copybook sea compatible con los tipos de datos de BigQuery.

ZonedDecimalEncoding

Especifica la codificación que se debe usar al decodificar o codificar un campo decimal zonificado.

Enumeraciones
UNSPECIFIED Mantener la codificación especificada en la cadena de modificadores. Si no se especifica ningún modificador, se usa EBCDIC.
EBCDIC Usa la codificación EBCDIC.
ASCII Usa la codificación ASCII.

DecimalLogicalType

Tipo lógico que se va a usar en un campo decimal.

Enumeraciones
AUTO Usa el tipo más óptimo en función de la escala y la precisión.
LONG Usa 64 bits para almacenar el valor. Este modificador solo funciona con números cuya precisión sea inferior o igual a 18 y cuya escala sea 0.
DECIMAL64 Usa 64 bits para almacenar el valor. Este modificador solo funciona con números cuya precisión sea inferior o igual a 18.
BIG_DECIMAL Almacena el valor como un valor decimal sin límites. Esta es la opción más lenta, pero admite cualquier decimal de cualquier precisión a cualquier escala.
BIG_INTEGER Almacena el valor como un valor entero sin límites. Esta es la opción más lenta, pero admite cualquier número entero de cualquier precisión.